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 トリガー用のエンドポイント URL に含める必要のある承認キーです。 次のセクションでは、システム キーを取得する方法について説明します。

次の 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}"
    }
  ]
}

ポータルの [Function App の設定] タブから関数アプリのマスター キーを取得できます。

重要

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

詳しくは、HTTP トリガーのリファレンス記事の「承認キー」をご覧ください。

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

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

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

Screenshot of connecting to a new event subscription to trigger in the portal.

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

Screenshot of creating an event subscription with the function endpoint already defined.

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 に要求を手動で投稿します。

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

また、ngrok ユーティリティを使用して、ローカルで実行されている関数にリモート要求を転送することもできます。 詳細については、こちらのチュートリアルを参照してください。

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

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

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

Button to deploy the Resource Manager template to Azure.

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

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

View new site

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 アプリに表示されたら、要求本文をコピーします。

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

Copy request body from web app

要求を手動で投稿する

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

Postmancurl などのツールを使って、HTTP POST 要求を作成します。

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

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

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

  • Event Grid トリガー関数の URL に投稿します。

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

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

次のスクリーンショットでは、Postman のヘッダーと要求本文を示します。

Headers in Postman

Request body in Postman

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

Sample Event Grid trigger function logs

次のステップ

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