在數據工廠中使用 Azure Function APP 運行 Python 腳本

肯尼

我正在從 blob 存儲合併到 CSV 文件並將其上傳到數據湖存儲(第 2 代)。該代碼適用於 PyCharm 和 VS Code,但我想使用函數應用在 Azure 數據工廠管道中運行它。如果我嘗試在管道中運行它,我會收到此錯誤:“目標 Azure Function1 上的操作失敗:調用提供的 Azure 函數‘名稱’失敗,狀態為‘未授權’和消息‘調用 Azure 函數失敗,HttpStatusCode 為未授權。 '。”

import azure.functions as func
import pandas as pd
import logging
from azure.storage.blob import BlobServiceClient
from azure.storage.filedatalake import DataLakeServiceClient

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    STORAGEACCOUNTURL= 'https://storage.blob.core.windows.net/'
    STORAGEACCOUNTKEY= '****'
    LOCALFILENAME= ['file1.csv', 'file2.csv']
    CONTAINERNAME= 'inputblob'

    file1 = pd.DataFrame()
    file2 = pd.DataFrame(])
    #download from blob

    blob_service_client_instance = BlobServiceClient(account_url=STORAGEACCOUNTURL, credential=STORAGEACCOUNTKEY)

    for i in LOCALFILENAME:
        with open(i, "wb") as my_blobs:
            blob_client_instance = blob_service_client_instance.get_blob_client(container=CONTAINERNAME, blob=i, snapshot=None)
            blob_data = blob_client_instance.download_blob()
            blob_data.readinto(my_blobs)
            if i == 'file1.csv':
                file1 = pd.read_csv(i)
            if i == 'file2.csv':
                file2 = pd.read_csv(i)

    # load

    # join the 2 dataframes into the final dataframe
    summary = pd.merge(left=file1, right=file2, on='key', how='inner')
        
    summary.to_csv(path_or_buf=r'path\summary.csv', index=False, encoding='utf-8')

    global service_client
            
    service_client = DataLakeServiceClient(account_url="https://storage.dfs.core.windows.net/", credential='****')
        
    file_system_client = service_client.get_file_system_client(file_system="outputdatalake")

    directory_client = file_system_client.get_directory_client("functionapp") 

    file_client = directory_client.create_file("merged.csv")
            
    local_file = open(r"path\summary.csv",'rb') 

    file_contents = local_file.read()

    file_client.upload_data(file_contents, overwrite=True) 

    return func.HttpResponse("This HTTP triggered function executed successfully.")
KarthikBhyresh-MT

我嘗試使用基於 python 的 http 觸發器進行重現,並且在第一次部署後遇到以下錯誤

Call to provided Azure function 'HttpTriggerT' failed with status-'Unauthorized' and message - 'Invoking Azure function failed with HttpStatusCode - Unauthorized.'.

在此處輸入圖片說明

注意:在部署或更改函數應用服務後,嘗試刷新並重新啟動它。眾所周知,這可以解決一些瞬態問題。

在此處輸入圖片說明

理想情況下,您可以使用功能鍵(針對特定的單個功能)或主/主機鍵(針對功能應用服務中的所有功能)來允許訪問。託管身份提供對整個函數應用的安全訪問

  1. 對於使用功能鍵,

導航到您的函數應用 > 函數 > your_function > 功能鍵

在此處輸入圖片說明

複製密鑰並添加到功能鏈接服務中進行授權

在此處輸入圖片說明

  1. 用於使用託管身份

此外,我進行了以下更改以使其正常工作。

導航到您部署的函數應用,設置 > 標識 > 打開系統分配的託管標識。

在此處輸入圖片說明

添加身份提供者。設置 > 身份驗證 > Microsoft 身份

在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

為 ADF 創建託管標識:

在此處輸入圖片說明

在此處輸入圖片說明

向 ADF 添加憑據

在此處輸入圖片說明

在此處輸入圖片說明

最後編輯 Azure 函數鏈接服務

在此處輸入圖片說明

從註冊為身份提供者的 AAD App 獲取資源 ID

在此處輸入圖片說明

在此處輸入圖片說明

管道中的測試函數調用

在此處輸入圖片說明

在此處輸入圖片說明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 nohup 依次運行多個 python 腳本

如何“重置”在使用 Flask 應用程序數據庫的 Python 腳本中運行的 db.session?

Python 運行與我的腳本不同的腳本

使用 Python 腳本的 ADF 管道中的 Azure 函數

使用已導入的模塊/模塊運行 python 腳本

從另一個腳本運行一個 python 腳本,其中命令行參數具有可執行文件

使用 Azure 數據工廠刪除 Excel 文件中的特定行

如何安排從anaconda運行的python腳本?

Python InDesign 腳本:如何運行預檢?

如何從 Python 腳本運行 nohup 命令?

如何選擇 CPU 來運行 python 腳本?

如何與始終運行的 python 腳本通信

為什麼我不能在 Python 中使用一維數組運行這個邏輯回歸腳本?

使用約束運行數據庫創建腳本

無法在 Azure 機器學習實驗上運行的腳本中的 python 中安裝 python-dotenv

如何在多個數據目錄上運行我的腳本

在 Azure 數據工廠的 Web 活動中使用 OAuth2.0

使用參數在批處理文件中運行腳本

從 VS 代碼在 Python IDLE 中運行 python 腳本

如何對基於 Azure 數據工廠的管道進行冒煙測試

Python 腳本未執行

模塊未導入在啟動時運行 python 腳本

試圖運行我的 python 腳本沒有做任何事情

如何運行python腳本直到它結束而沒有錯誤?

運行 Python/PySpark 腳本時出現環境變量錯誤

如何通過命令啟動屏幕並運行python腳本

在命令行/批處理文件/python 腳本中運行 java 主類

Azure 數據工廠直到

我們可以在azure數據工廠中IF條件的活動中使用FOREACH的參數嗎