在使用 Azure Functions 的 彈性取用模式時,開發人員在為 Python 函式應用程式設定 Blob 觸發器 時可能會遇到挑戰。本文概述了解決方案,以確保 Blob 觸發器如預期般運作,並提供了用於實作的其他資源。
問題概述
在嘗試設定 Blob 觸發器 時會出現問題,該觸發器用於部署在 彈性取用模式下的 Python 函式應用程式。儘管部署正確,但當 Blob 上傳到指定容器時,觸發器可能無法啟動。常見症狀包括:
- Blob 觸發器未觸發。
- 在 Application Insights 中監視時未顯示任何要求。
- 有關彈性取用模式下 Blob 觸發器的文件和範例有限或不清楚。
根本原因
彈性取用模式下的 Blob 觸發器需要 以 Event Grid 為基礎的觸發器 才能正常運作。這與標準取用方案中預設的 Blob 觸發器行為不同。設定錯誤或依賴過時的文件可能導致部署失敗。
解決方案
透過改用 以 Event Grid 為基礎的觸發器 來處理 Blob 儲存體,問題得到了解決。以下是實作該解決方案的步驟:
在彈性取用模式下設定 Blob 觸發器的步驟
- 使用 Event Grid 處理 Blob 儲存體
Azure Blob 儲存體觸發器依賴 Event Grid 通知才能在彈性取用模式下運作。請參閱此處的官方文件: 適用於 Azure Functions 的 Azure Blob 儲存體觸發器。 - 更新函式程式碼
確保 Python 函式應用程式已設定為處理 Event Grid 事件。以下是函式程式碼範例:
import logging
import azure.functions as func
def main(event: func.EventGridEvent):
logging.info('Event received: %s', event.get_json())
- 設定 Blob 儲存體和 Event Grid
- 建立 Blob 儲存體帳戶 並啟用 Event Grid 通知。
- 設定 Event Grid 訂閱,將事件轉送到你的 Azure 函式。
- 使用 Bicep 或 ARM 範本進行部署
以下是使用 Event Grid 整合來部署函式應用程式的 Bicep 範本範例:
resource blobStorage 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: 'myBlobStorage'
location: 'East US'
kind: 'StorageV2'
sku: {
name: 'Standard_LRS'
}
}
resource eventGridSubscription 'Microsoft.EventGrid/eventSubscriptions@2022-06-15' = {
name: 'myBlobEventSubscription'
scope: blobStorage
properties: {
destination: {
endpointType: 'AzureFunction'
properties: {
functionAppResourceId: '<FunctionAppResourceId>'
}
}
filter: {
includedEventTypes: [
'Microsoft.Storage.BlobCreated'
]
}
}
}
- 驗證部署
- 將 Blob 上傳到 Blob 儲存體中的指定容器。
- 查看 Application Insights 中的傳入要求。
其他說明
- 如果你使用 GitHub Actions 或 Azure DevOps 進行部署,請確保已套用彈性取用模式的正確設定。
- 若要進行疑難排解,請參閱 Azure Functions 監視 ,以了解觸發器活動的相關資訊。
結論
透過使用 以 Event Grid 為基礎的觸發器,可以解決在彈性取用模式下為 Python 函式應用程式設定 Blob 觸發器的問題。按照上述步驟操作,可以確保 Blob 觸發器與 Azure Functions 無縫協作。
如需了解詳細資訊,請參閱官方文件: 適用於 Azure Functions 的 Azure Blob 儲存體觸發器。