Python 関数アプリの開発において、 Azure Functions の フレキシブル従量課金モードで Blob トリガー を設定する際に問題に直面することがあります。この記事では、Blob トリガーが期待どおりに動作するための解決策の概要を説明し、実装のための追加リソースを紹介します。
問題の概要
問題は、 Blob トリガー を、 フレキシブル従量課金モードにデプロイされた Python 関数アプリ用に構成しようとしたときに発生します。デプロイ自体は正しく行われているにもかかわらず、指定したコンテナーに Blob をアップロードしてもトリガーが起動しないことがあります。一般的な症状は次のとおりです。
- Blob トリガーが起動しない。
- 監視ツール Application Insights に要求が表示されない。
- フレキシブル従量課金モードにおける Blob トリガーに関するドキュメントや例が限られているか、不明確である。
根本原因
フレキシブル従量課金モードの Blob トリガーが正しく機能するには、 Event Grid ベースのトリガー が必要です。これは、標準の従量課金プランにおける既定の Blob トリガーの動作とは異なります。設定ミスや古いドキュメントへの依存は、デプロイの失敗につながる可能性があります。
解決策
この問題は、Blob Storage 用の Event Grid ベースのトリガー に切り替えることで解決しました。解決策を実装する手順は次のとおりです。
フレキシブル従量課金モードで Blob トリガーを構成する手順
- Blob Storage に Event Grid を使用する
Azure Blob Storage トリガーは、フレキシブル従量課金モードで機能するために Event Grid の通知に依存します。公式ドキュメントはこちら: Azure Functions 用の Azure Blob Storage トリガー。 - 関数コードを更新する
Python 関数アプリが Event Grid イベントを処理するように構成されていることを確認してください。関数コードの例を次に示します。
import logging
import azure.functions as func
def main(event: func.EventGridEvent):
logging.info('Event received: %s', event.get_json())
- Blob Storage と Event Grid を構成する
- まず、 Blob Storage アカウント を作成し、 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 Storage の指定したコンテナーに Blob をアップロードします。
- 着信要求については、 Application Insights を確認します。
追加の注意事項
- デプロイに GitHub Actions または Azure DevOps を使用している場合は、フレキシブル従量課金モードの正しい設定が適用されていることを確認してください。
- トラブルシューティングについては、 Azure Functions の監視 を参照して、トリガーのアクティビティに関する分析情報を確認してください。
結論
フレキシブル従量課金モードで Python 関数アプリ用に Blob トリガーを構成する問題は、 Event Grid ベースのトリガーを利用することで解決できます。上記の手順に従うことで、Blob トリガーが Azure Functions とシームレスに動作するようになります。
詳細については、公式ドキュメントをご覧ください。 Azure Functions 用の Azure Blob Storage トリガー。