Event Grid イベントのイベント ハンドラーとして関数を使用する

イベントハンドラは、Azure Event Gridが処理のためにイベントを送信する宛先です。 Azureはイベントを処理するために複数のサービスを自動で設定しており、そのうちの一つがAzure Functionsです。

関数をイベントハンドラとして使う場合、サーバーのプロビジョニングや管理をせずに、各イベントに応じてカスタムコードを実行します。 例えば、Event Gridは関数を アンチコラクションレイヤー として使い、イベントを変換または検証してから下流システムに転送することができます。

この記事では、関数をイベントハンドラとして使う2つの方法を説明し、どのアプローチを使うべきかを説明します。

Azure の関数をイベントのハンドラーとして使用するには、次のいずれかの方法に従います。

  • イベントグリッドトリガーを使いましょう。 エンドポイントのタイプとして Azure 関数を指定します。 次に、関数アプリとイベントを処理する関数を指定します。
  • HTTPトリガーを使いましょう。 エンドポイントのタイプとして Webhook を指定します。 次に、イベントを処理する関数のURLを指定します。

最初の方法(イベントグリッドトリガー)を使いましょう。 後者のアプローチに比べて以下の利点があります。

  • Event Grid では、Event Grid トリガーが自動的に検証されます。 汎用 HTTP トリガーの場合は、検証応答を開発者自身が実装する必要があります。
  • イベントグリッドは、イベントグリッドイベントがトリガーする関数へのイベント配信速度を自動的に調整します。これは、関数がイベントを処理できると認識される速度に基づいてです。 このレートマッチ機能は、関数のイベント処理速度が時間とともに変動するため、イベント処理ができないことに起因する配信エラーを回避します。 スループットを高めて効率を向上させるには、イベント サブスクリプションでのバッチ処理を有効にします。 詳細については、「バッチ処理を有効にする」をご覧ください。

  • Azure関数を使ってEvent Gridトリガーでイベントサブスクリプションを追加すると、Event GridはEvent Gridサービスプリンシパルの認証情報を使ってターゲット関数のアクセスキーを取得します。 Event Gridは、AzureサブスクリプションでEvent Gridリソースプロバイダーを登録すると権限を受け取ります。
  • Microsoft Entra IDアプリケーションでAzure関数を保護する場合は、HTTPトリガーを使う汎用ウェブフック方式を取る必要があります。 サブスクリプションを追加するときは、Azure 関数エンドポイントを Webhook URL として使用します。

チュートリアル

タイトル 説明
クイック スタート: 関数を使用したイベントの処理 処理するカスタム イベントを関数に送信します。
チュートリアル: ビッグ データをデータ ウェアハウスにストリーミングする イベント ハブによってキャプチャ ファイルが作成されると、Event Grid が関数アプリにイベントを送信します。 アプリは Capture ファイルを取得し、データ ウェアハウスにデータを移行します。
チュートリアル:Azure Service Bus の Azure Event Grid への統合の例 Event GridはService Busトピックから関数アプリやロジックアプリへメッセージを送信します。

REST API の例

以下の例は、Azure関数をイベントハンドラとしてイベントサブスクリプションを作成するPUT操作のリクエストボディを示しています。 ターゲット関数のリソースIDを設定し、バッチ処理を可能にします。

{
    "properties":
    {
        "destination":
        {
            "endpointType": "AzureFunction",
            "properties":
            {
                "resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.Web/sites/<FUNCTION APP NAME>/functions/<FUNCTION NAME>",
                "maxEventsPerBatch": 10,
                "preferredBatchSizeInKilobytes": 64
            }
        },
        "eventDeliverySchema": "EventGridSchema"
    }
}

バッチ処理を有効にする

スループットを上げたい場合は、サブスクリプションでバッチングを有効にしてください。 Azureポータルを使う場合、サブスクリプション作成時やその後にバッチごとに最大イベント数や希望するバッチサイズをキロバイト単位で設定できます。

Azureポータル、PowerShell、CLI、またはResource Managerテンプレートを使ってバッチ設定を設定できます。

Azure portal

ポータルでサブスクリプションを作成する際、「 イベントサブスクリプション作成 」ページで「 Advanced Features 」タブに切り替え、 バッチごとの最大イベント 数と 優先バッチサイズ(キロバイト単位)を設定します。

イベントサブスクリプション作成ページの「Advanced Features」タブのスクリーンショットで、バッチ設定が示されています。

イベントグリッドトピックページの「機能」タブで、既存のサブスクリプションの値を更新してください。

イベントグリッドトピックページの機能タブのスクリーンショットで、既存のサブスクリプションのバッチ設定が示されています。

Azure Resource Manager テンプレート

maxEventsPerBatchpreferredBatchSizeInKilobytesをAzure Resource Managerテンプレートに設定してください。 詳細については、Microsoft.EventGrid eventSubscriptions テンプレートのリファレンスをご覧ください。

Azure CLI

az eventgrid event-subscription createコマンドを使って、--max-events-per-batchまたは--preferred-batch-size-in-kilobytesのパラメータでバッチ関連の設定を設定できます。

Azure PowerShell

バッチ関連の設定には New-AzEventGridSubscription または Update-AzEventGridSubscription コマンドレットを使ってください。 -MaxEventsPerBatchまたは-PreferredBatchSizeInKiloBytesパラメータを使って好みを設定します。

サポートされているイベントハンドラの一覧については、「 イベントハンドラ」 の記事をご覧ください。