Azure Functions で Event Grid トリガーとバインドを使用する方法

Azure Functions には、トリガーとバインドを使用した Azure Event Grid との組み込みの統合が用意されています。 この記事では、Event Grid トリガーとバインドを構成し、ローカルで評価する方法について示します。 Event Grid トリガーと出力バインドの定義と例の詳細については、次のいずれかの参照記事をご覧ください。

イベント サブスクリプションの作成

Event Grid HTTP 要求の受信を開始するには、Event Grid によって発生したイベントのサブスクリプションが必要です。 イベント サブスクリプションでは、関数を呼び出すエンドポイントの URL を指定します。 Azure portal で関数の [統合] タブからイベント サブスクリプションを作成すると、URL が提供されます。 イベント サブスクリプションをプログラムで作成する場合、または Event Grid からイベント サブスクリプションを作成する場合は、エンドポイントを指定する必要があります。 エンドポイントの URL にはシステム キーが含まれており、これは Functions 管理者 REST API から取得する必要があります。

Webhook エンドポイント URL を取得する

Event Grid でトリガーされる関数の URL エンドポイントは、Functions ランタイムのバージョンによって異なります。 バージョン固有の URL パターンの例を次に示します。

https://{functionappname}.azurewebsites.net/runtime/webhooks/eventgrid?functionName={functionname}&code={systemkey}

Note

イベント サブスクリプションを使用している BLOB ストレージ トリガーのバージョンもあります。 この種類の BLOB ストレージ トリガーのエンドポイント URL には /runtime/webhooks/blobs のパスがありますが、Event Grid トリガーのパスは /runtime/webhooks/EventGrid である場合があります。 BLOB を処理するためのオプションの比較については、「BLOB コンテナーでトリガーする」を参照してください。

システム キーを取得する

作成した URL エンドポイントには、システム キーの値が含まれます。 システム キーは、Event Grid Webhook に固有の承認キーで、Event Grid トリガーのエンドポイント URL への要求に含める必要があります。 次のセクションでは、システム キーを取得する方法について説明します。

ポータルの [関数]>[アプリ キー] から関数アプリのマスター キーを取得することもできます。

注意事項

マスター キーでは、関数アプリへの管理者アクセス権が提供されます。 このキーを第三者と共有したり、ネイティブ クライアント アプリケーションで配布したりしないでください。

詳細については、「Azure Functions でのアクセス キーの使用」を参照してください。

関数アプリからシステム キーを取得するには、次の管理者 API (HTTP GET) を使用します。

http://{functionappname}.azurewebsites.net/admin/host/systemkeys/eventgrid_extension?code={masterkey}

この REST API は管理者 API なので、お使いの関数アプリのマスター キーが必要です。 システム キー (Event Grid トリガー関数を呼び出す場合) とマスター キー (関数アプリで管理タスクを実行する場合) を混同しないでください。 Event Grid トピックをサブスクライブするときは、システム キーを使います。

システム キーを提供する応答の例を次に示します。

{
  "name": "eventgridextensionconfig_extension",
  "value": "{the system key for the function}",
  "links": [
    {
      "rel": "self",
      "href": "{the URL for the function, without the system key}"
    }
  ]
}

サブスクリプションを作成する

イベント サブスクリプションは、Azure portalから、または Azure CLI を使用して作成できます。

イベント グリッド トリガーを使用して Azure portal で開発する関数の場合は、 [統合] を選択します。次に、 [イベント グリッド トリガー] を選択し、 [Event Grid サブスクリプションの作成] を選択します。

ポータルでトリガーする新しいイベント サブスクリプションに接続するスクリーンショット。

このリンクを選ぶと、現在のトリガー エンドポイントが既に定義された [イベント サブスクリプションの作成] ページがポータルに表示されます。

関数のエンドポイントが既に定義されている、イベント サブスクリプションの作成のスクリーンショット。

Azure Portal を使ってサブスクリプションを作成する方法について詳しくは、Event Grid のドキュメントの「カスタム イベントの作成 - Azure Portal」をご覧ください。

サブスクリプションを作成する方法について詳しくは、BLOB ストレージのクイック スタートまたは他の Event Grid クイック スタートのページをご覧ください。

ビューアー Web アプリでのローカル テスト

Event Grid トリガーをローカルにテストするには、クラウド内の送信元からローカル コンピューターに配信された Event Grid の HTTP 要求を取得する必要があります。 これを行う方法の 1 つは、オンラインで要求をキャプチャし、ローカル コンピューター上でそれを手動で再送信することです。

  1. イベント メッセージをキャプチャするビューアー Web アプリを作成します。
  2. ビューアー アプリにイベントを送信する Event Grid サブスクリプションを作成します。
  3. 要求を生成し、ビューアー アプリから要求本文をコピーします。
  4. Event Grid トリガー関数の localhost URL に要求を手動で投稿します。

HTTP ポスト要求を送信するには、次のいずれかの HTTP テスト ツールが必要です。

注意事項

資格情報、シークレット、アクセス トークン、API キーなどの機密データがあるシナリオでは、必要なセキュリティ機能でデータを保護したうえで、ツールは必ずオフラインまたはローカルで動作し、データをクラウドに同期せず、オンライン アカウントにサインインする必要がないものを使用してください。 このようにすることで、機密データを一般に公開するリスクを軽減できます。

テストが完了したら、エンドポイントを更新することで、同じサブスクリプションを運用環境に使うことができます。 az eventgrid event-subscription update Azure CLI コマンドを使用します。

ビューアー Web アプリを作成する

イベント メッセージのキャプチャを簡素化するために、イベント メッセージを表示する構築済みの Web アプリをデプロイすることができます。 デプロイされたソリューションには、App Service プラン、App Service Web アプリ、および GitHub からのソース コードが含まれています。

[Deploy to Azure](Azure にデプロイ) を選択して、ソリューションをサブスクリプションにデプロイします。 Azure portal で、パラメーターの値を指定します。

Resource Manager テンプレートを Azure にデプロイするボタン。

デプロイが完了するまでに数分かかる場合があります。 デプロイが成功した後で、Web アプリを表示して、実行されていることを確認します。 Web ブラウザーで https://<your-site-name>.azurewebsites.net にアクセスします

サイトは表示されますが、イベントはまだ送信されていません。

新しいサイトを表示する

Event Grid のサブスクリプションを作成する

テストする種類の Event Grid サブスクリプションを作成し、イベント通知のエンドポイントとして Web アプリからの URL を指定します。 Web アプリのエンドポイントには、サフィックス /api/updates/ が含まれている必要があります。 したがって、完全な URL は https://<your-site-name>.azurewebsites.net/api/updates となります。

Azure Portal を使ってサブスクリプションを作成する方法については、Event Grid のドキュメントの「カスタム イベントの作成 - Azure Portal」を参照してください。

要求を生成する

Web アプリ エンドポイントへの HTTP トラフィックを生成するイベントをトリガーします。 たとえば、BLOB ストレージ サブスクリプションを作成した場合は、BLOB をアップロードまたは削除します。 要求が Web アプリに表示されたら、要求本文をコピーします。

最初に、サブスクリプション検証要求を受信します。検証要求はすべて無視し、イベント要求をコピーします。

Web アプリから要求本文をコピーする

要求を手動で投稿する

Event Grid 関数をローカルで実行します。 Content-Type および aeg-event-type のヘッダーは手動で設定する必要がありますが、他のすべての値は既定値のままにすることができます。

HTTP テスト ツールを使用して HTTP POST 要求を作成する:

  • Content-Type: application/json ヘッダーを設定します。

  • aeg-event-type: Notification ヘッダーを設定します。

  • 要求本文に RequestBin のデータを貼り付けます。

  • Event Grid トリガーを手動で開始する HTTP POST 要求をエンドポイントに送信します。

    http://localhost:7071/runtime/webhooks/eventgrid?functionName={FUNCTION_NAME}
    

functionName パラメーターには、FunctionName 属性で指定されている名前を指定する必要があります。

Event Grid トリガー関数が実行されて、次の例のようなログが表示されます。

Event Grid トリガー関数のログの例

次のステップ

Event Grid と Functions の詳細については、次の記事をご覧ください。