クイックスタート: Event Grid を使用して Azure 関数にカスタム イベントをルーティングする

このクイックスタートでは、Visual Studio CodeでEvent Gridトリガー付きの関数を作成し、AzureポータルでEvent Gridトピックとイベントサブスクリプションを作成し、テストイベントを送信してEvent GridがどのようにカスタムイベントをAzure関数にルーティングするかを確認します。

Azure Event Gridはクラウド向けのイベントルーティングサービスで、ソースからハンドラーへイベントを配信します。 Azure Functionsはサポートされているイベントハンドラの一つです。 両者をつなげることで、イベントに応じて自動的にコードを実行でき、変更のポーリングやインフラ管理を行う必要がありません。

Azure アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。

前提条件

Visual Studio Code を使用して Event Grid トリガーで関数を作成する

このセクションでは、Visual Studio Code を使用して、Event Grid トリガーを使用して関数を作成します。

関数を作成する

  1. Visual Studio Code を開きます。

  2. 左側のバーで [Azure] を選択します。

  3. 左側のウィンドウの [WORKSPACE ] セクションで、コマンド バーの [Azure Functions ] を選択します。 次に、[ 関数の作成] を選択します。

    Visual Studio Code の [Azure] タブと、関数を作成するためのメニュー コマンドを示すスクリーンショット。

  4. 関数コードを保存するフォルダーを選択します。

  5. [ 新しいプロジェクトの作成 ] コマンドの [ 言語] で 、[C#] を選択します。 「を選択し、を入力します。」

    Azure 関数を開発するための言語として C# の選択を示すスクリーンショット。

  6. .NET ランタイムの場合は、.NET 8.0 Isolated LTS を選択し、Enter キーをします。

  7. 関数の [テンプレート] で、[Azure Event Grid トリガー] を選択します。 「を選択し、を入力します。」

  8. [関数名] に、関数の名前を入力します。 「を選択し、を入力します。」

  9. [名前空間] には、関数の名前空間の名前を入力します。 「を選択し、を入力します。」

  10. プロジェクトを現在のウィンドウまたは新しいウィンドウで開くか、ワークスペースに追加します。

  11. 関数が作成されるまで待ちます。 関数の作成の状態が右下隅に表示されます。

    関数の作成の状態を示すスクリーンショット。

  12. YourFunctionName.cs ファイル (具体的には Run メソッド) のコードを表示します。 これは、ロガーを使用して情報を出力します。

    [Function(nameof(MyEventGridTriggerFunc))]
    public void Run([EventGridTrigger] CloudEvent cloudEvent)
    {
        _logger.LogInformation("Event type: {type}, Event subject: {subject}", cloudEvent.Type, cloudEvent.Subject);
    }
    

関数を Azure にデプロイする

  1. [Azure] ペインがまだ開いていない場合は、左側のバーの [Azure] ボタンを選択します。

  2. プロジェクトにホバーして、[Azure へのデプロイ] ボタンを選択します。

    Azure にデプロイするためのボタンを示すスクリーンショット。

  3. コマンド パレットのドロップダウン リストで、[ + 新しい関数アプリの作成] を選択し、 Enter キーを押します。

  4. [名前] に、新しい関数アプリのグローバルに一意の名前を入力します。 「を選択し、を入力します。」

  5. [ランタイム スタック] で、[.NET 8 Isolated] を選択します。

  6. Azure リソースの [場所] には、近くのリージョンを選択します。

  7. 関数アプリの作成の状態は、下部ペインの [AZURE] タブに表示されます。 関数アプリが作成されると、ローカルに作成した関数を関数アプリにデプロイする状態が表示されます。

  8. デプロイが成功したら、[ 関数アプリの作成に成功しました ] メッセージを展開します。 [クリック] を選択してリソースを表示します。 左側のペインの [リソース] セクションで、関数が選択されていることを確認します。

  9. 関数を右クリックし、[ポータルで開く] を選択します。

    ポータルで関数を開く際の選択を示すスクリーンショット。

  10. 必要に応じて Azure にサインインし、関数の [関数アプリ] ページが表示されることを確認します。

  11. 下部のペインで、関数を選択します。

    [関数アプリ] ページの Azure 関数の選択を示すスクリーンショット。

  12. [ ログ ] タブに切り替えます。この記事の後半で Event Grid トピックにイベントを送信するときにログに記録されたメッセージを表示できるように、このタブを開いたままにします。

    Azure portal の関数の [ログ] タブを示すスクリーンショット。

イベントグリッドのカスタムトピックを作成する

Event Grid のトピックは、イベントの送信先となるユーザー定義のエンドポイントになります。

  1. Web ブラウザー ウィンドウの新しいタブで、Azure portal にサインインします。

  2. 検索バー上部で「 Event Grid Topics」を検索し、「 Event Grid Topics」を選択してください。

    Event Grid トピックの選択を示すスクリーンショット。

  3. [トピック] ページで、コマンド バーの [+ 作成] を選択します。

    Event Grid トピックを作成するボタンを示すスクリーンショット。

  4. [トピックの作成] ページで、次の手順に従います。

    1. [サブスクリプション] で、Azure サブスクリプションを選択します。

    2. [リソース グループ] で、前の手順と同じリソース グループを選択します。

    3. [名前] に、カスタム トピックの一意の名前を指定します。 トピック名は、ドメイン ネーム システム (DNS) エントリによって表されるため、一意である必要があります。

      例で使われている画像に示されている名前は使用しないでください。 独自の名前を作成してください。 3 から 50 文字で、値 a から z、A から Z、0 から 9、ハイフン (-) のみを含める必要があります。

    4. リージョンは、Event Grid トピックの場所を選択します。

    5. [Review + create](レビュー + 作成) を選択します。

      トピックを作成するためのペインを示すスクリーンショット。

    6. [確認と作成] タブで設定を確認し、[作成] を選択します。

  5. カスタム トピックが作成されたら、[ リソースに移動 ] を選択して、そのトピックの [Event Grid トピック ] ページを開きます。

    Event Grid カスタム トピックのページを示すスクリーンショット。

イベントグリッドのカスタムトピックを購読してください

どのイベントを追跡し、どこにイベントを送信するかは、Event Grid トピックをサブスクライブすることによって Event Grid に伝えます。

  1. カスタム トピックの [Event Grid トピック] ページで、ツール バーの [+ イベント サブスクリプション] を選択します。

    ツール バーにイベント サブスクリプションを追加するためのボタンを示すスクリーンショット。

  2. [イベント サブスクリプションの作成] ペインで、次の手順に従います。

    1. [名前] に、イベント サブスクリプションの名前を入力します。

    2. [イベント スキーマ] に、[クラウド イベント スキーマ v1.0] を選択します。

    3. [エンドポイントのタイプ] で、 [Azure 関数] を選択します。

    4. [エンドポイントを構成する] を選択します。

      イベント サブスクリプションの値を示すスクリーンショット。

  3. [Azure 関数の選択] ペインで、次の手順に従います。

    1. [サブスクリプション] では、関数がある Azure サブスクリプションを選択します。

    2. [リソース グループ] では、関数を含むリソース グループを選択します。

    3. [関数アプリ] では、お使いの関数アプリを選択します。

    4. [関数] では、関数アプリの関数を選択します。

    5. [選択の確認] を選択します。

      以前に作成した Azure 関数を選択するためのペインを示すスクリーンショット。

  4. この手順は省略可能ですが、運用環境のシナリオにはお勧めします。 [イベント サブスクリプションの作成] ペインで、[追加の機能] タブに切り替え、[バッチごとの最大イベント数] および [優先バッチ サイズ (KB 単位)] の値を設定します。

    バッチ処理を使用すると、高いスループットが得られます。 [バッチあたりの最大イベント数] に、サブスクリプションがバッチに含めるイベントの最大数を設定します。 [優先バッチ サイズ (KB 単位)] は、バッチ サイズとして優先される上限をキロバイト単位で設定しますが、1 つのイベントがこのしきい値より大きい場合は、その上限を超えてしまう可能性があります。

    イベント サブスクリプションのバッチ設定を示すスクリーンショット。

  5. 次に、[イベント サブスクリプションの作成] ペインで、[作成] を選択します。

イベントグリッドトピックにテストイベントを送信してください

ここで、イベントをトリガーして、Event Grid がメッセージをエンドポイントに配信するようすを見てみましょう。 Azure CLI または Azure PowerShell を使用して、テスト イベントをカスタム トピックに送信します。 通常、アプリケーションやAzureサービスがイベントデータを送信します。

最初の例では、Azure CLI を使用しています。 この例では、カスタム トピックの URL とキー、およびサンプル イベント データを取得します。 topicname には、実際のカスタム トピック名を使用してください。 これによりサンプルのイベント データが作成されます。

JSON の data 要素がイベントのペイロードです。 このフィールドには、適切な形式の JSON であればどのようなものでも格納することができます。 また、高度なルーティングやフィルタリングを行う場合には、subject フィールドを使用することもできます。

cURL ツールは HTTP 要求を送信します。 この記事では、cURL を使って、イベントをカスタム トピックに送信します。

Azure CLI

  1. Azure portal で、 [Cloud Shell] を選択します。 Azure PowerShell モードにある場合は、[Bash に切り替える] を選択します。

    Azure Cloud Shell の Bash ウィンドウを示すスクリーンショット。

  2. コマンドで使用される topicname 変数と resourcegroupname 変数を設定します。

    TOPICNAME は実際の Event Grid トピックの名前で置き換えます。

    topicname="TOPICNAME"
    

    RESOURCEGROUPNAME は、Event Grid トピックを含む Azure リソース グループの名前に置き換えます。

    resourcegroupname="RESOURCEGROUPNAME"
    
  3. 次のコマンドを使用して、トピックのエンドポイントを取得します。 コマンドをコピーして貼り付けた後、実行する前にトピック名とリソース グループ名を更新してください。

    endpoint=$(az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv)
    
  4. 次のコマンドを使用して、カスタム トピックのキーを取得します。 コマンドをコピーして貼り付けた後、実行する前にトピック名とリソース グループ名を更新してください。

    key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)
    
  5. 次のステートメントをイベント定義と共にコピーし、 Enter キーを押します。

    event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
    
  6. 次の cURL コマンドを実行して、イベントを送信します。

    curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
    
  7. 関数からのメッセージが、Azure portal の関数の [ログ] タブに表示されることを確認します。

    Azure 関数の [ログ] タブを示すスクリーンショット。

Azure PowerShell

2 番目の例では、Azure PowerShell を使用して、同様の手順を実行します。

  1. Azure portal で Cloud Shell を選択するか、 Azure Cloud Shell ページに移動します。 Cloud Shell ウィンドウの左上隅で、[PowerShell に切り替える] を選択します。

  2. 次の変数を設定します。 コマンドをコピーして貼り付けた後、トピック名とリソース グループ名を更新してから、次のコマンドを実行します。

    $resourceGroupName = "RESOURCEGROUPNAME"
    
    $topicName = "TOPICNAME"
    
  3. 次のコマンドを実行して、トピックのエンドポイントとキーを取得します。

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint
    $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
    
  4. イベントを準備します。 これらのステートメントをコピーし、Cloud Shell ウィンドウ内で実行します。

    $eventID = Get-Random 99999
    
    #Date format should be SortableDateTimePattern (ISO 8601)
    $eventDate = Get-Date -Format s
    
    #Construct the body by using a hash table
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #Use ConvertTo-Json to convert the event body from a hash table to a JSON object
    #Append square brackets to the converted JSON payload because they're expected in the event's JSON payload syntax
    $body = "["+(ConvertTo-Json $htbody)+"]"
    
  5. Invoke-WebRequest コマンドレットを使用してイベントを送信します。

    Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}
    
  6. 関数からのメッセージが、Azure portal の関数の [ログ] タブに表示されることを確認します。

    関数の [ログ] タブを示すスクリーンショット。

関数がイベントを受信したことを確認する

イベントがトリガーされ、そのメッセージが、Event Grid によってサブスクライブ時に構成したエンドポイントに送信されました。 これで、関数がこれを受け取ったかどうかを確認できます。

  1. 関数の [ 呼び出し ] タブを開きます。

    [モニター] ページの [呼び出し] タブを示すスクリーンショット。

  2. 詳細を表示するには、呼び出しを選択します。

    呼び出しの詳細を示すスクリーンショット。

    [ ログ ] タブを使用することもできます。

    ログを含む関数の [モニター] ビューを示すスクリーンショット。

リソースをクリーンアップする

引き続きこのイベントを使用する場合は、この記事で作成したリソースをクリーンアップしないでください。 それ以外の場合は、この記事で作成したリソースを削除してください。

  1. Azure portal の検索ボックスに「 リソース グループ」 と入力し、[ リソース グループ] を選択します。

    リソース グループのページを示すスクリーンショット。

  2. リソース グループを選択して、詳細のペインを開きます。

  3. ツール バーの [リソース グループの削除] を選びます。

  4. リソース グループの名前を入力して削除を確認し、[削除] を選択します。

Cloud Shell ウィンドウが作成され、リソース グループ ページに表示されているその他のリソース グループが使用されました。 後で Cloud Shell ウィンドウを使用する予定がない場合は、このリソース グループを削除してください。

トピックを作成し、イベントをサブスクライブする方法がわかったら、Event Grid でできることについて、さらに情報を収集しましょう。

さまざまなプログラミング言語を使用した Event Grid へのイベントの発行、およびそのイベントの使用については、次のサンプルを参照してください。