次の方法で共有


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

Azure Event Grid は、クラウドのイベントルーティング サービスです。 Azure Functions は、サポートされているイベント ハンドラーの 1 つです。

このクイックスタートでは、Azure portal を使用し、カスタム トピックを作成してそのトピックをサブスクライブし、イベントをトリガーして結果を表示します。 イベントを Azure 関数に送信します。

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

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

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

前提条件

関数を作成する

  1. Visual Studio Code を開きます。

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

  3. 左側のペインの [ワークスペース] セクションで、コマンド バーの [Azure Functions] ボタンを選択し、[関数の作成] を選択します。

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

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

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

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

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

  7. [関数のテンプレート][Azure Event Grid トリガー] を選択し、Enter キーを選択します。

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

  9. [名前空間] に、関数の名前空間の名前を入力し、Enter キーを選択します。

  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. [名前] に、新しい関数アプリのグローバルに一意の名前を入力し、Enter キーを選択します。

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

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

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

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

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

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

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

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

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

  12. [ログ] タブに切り替えます。このタブまたはウィンドウを開いたままにして、このチュートリアルの後半で Event Grid トピックにイベントを送信するときにログに記録されるメッセージが見えるようにします。

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

カスタム トピックの作成

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

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

  2. トピックの検索バーで、Event Grid トピックを検索し、[Event Grid トピック] を選択します。

    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. [エンドポイントを構成する] を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

トピックへのイベントの送信

ここで、イベントをトリガーして、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. 左側のメニューの [リソース グループ] を選択します。

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

    別の方法として、左側のメニューで [すべてのサービス] を選択してから、[リソース グループ] 選択します。

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

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

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

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

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

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