チュートリアル:Azure Functions を使用して、Azure Event Grid 経由で受信した Azure Service Bus のイベントに応答する

このチュートリアルでは、Azure Functions と Azure Logic Apps を使用して、Azure Event Grid 経由で受信した Azure Service Bus イベントに応答する方法について説明します。

このチュートリアルでは、以下の内容を学習します。

  • Service Bus 名前空間を作成する
  • サンプル アプリケーションを準備してメッセージを送信する
  • Service Bus トピックにメッセージを送信する
  • Logic Apps を使用してメッセージを受信する
  • Azure でテスト関数を設定する
  • Event Grid による関数と名前空間の接続
  • Azure Functions を使用してメッセージを受信する

前提条件

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

Service Bus 名前空間を作成する

このチュートリアルの手順に従ってください。クイック スタート: Azure portal を使用して Service Bus トピックとそのサブスクリプションを作成する」で確認し、次のタスクを実行します:

  • Premium Service Bus 名前空間を作成します。
  • 接続文字列を取得します。
  • Service Bus トピックを作成します。
  • トピックへのサブスクリプションを作成します。 このチュートリアルで必要なサブスクリプションは 1 つだけです。そのため、サブスクリプション S2 および S3 を作成する必要はありません。

Service Bus トピックにメッセージを送信する

この手順では、サンプル アプリケーションを使用して、前の手順で作成した Service Bus トピックにメッセージを送信します。

  1. GitHub azure-service-bus リポジトリをクローンするか、zip ファイルをダウンロードし、解凍してファイルを抽出します。

  2. Visual Studio で \samples\DotNet\Azure.Messaging.ServiceBus\ServiceBusEventGridIntegrationV2 フォルダーに移動し、SBEventGridIntegration.sln ファイルを開きます。

  3. ソリューション エクスプローラー ウィンドウで、 [MessageSender] プロジェクトを展開し、 [Program.cs] を選択します。

  4. <SERVICE BUS NAMESPACE - CONNECTION STRING> を Service Bus 名前空間への接続文字列で置き換え、<TOPIC NAME> をトピックの名前で置き換えます。

    const string ServiceBusConnectionString = "<SERVICE BUS NAMESPACE - CONNECTION STRING>";
    const string TopicName = "<TOPIC NAME>";
    
  5. 5 つのテスト メッセージを Service Bus トピックに送信するプログラム (const int numberOfMessages = 5;) をビルドして実行します。

    コンソールのアプリ出力

追加の前提条件

Visual Studio 2022 をインストールし、Azure の開発ワークロードを追加します。 このワークロードには、Visual Studio での Azure Functions プロジェクトの作成、ビルド、デプロイに必要な Azure Function Tools が含まれています。

関数アプリをデプロイする

Note

Azure Functions アプリの作成とデプロイについて詳しくは、「Visual Studio を使用する Azure Functions の開発」を参照してください。

  1. SBEventGridIntegration.sln ソリューションの FunctionApp1 プロジェクトから ReceiveMessagesOnEvent.cs ファイルを開きます。

  2. <SERVICE BUS NAMESPACE - CONNECTION STRING> を Service Bus 名前空間の接続文字列に置き換えます。 これは、同じソリューションにある MessageSender プロジェクトの Program.cs ファイルで使用したものと同じである必要があります。

  3. [FunctionApp1] を右クリックし、 [発行] を選択します。

  4. [発行] ページで [開始] を選択します。 これらの手順は、実際に表示される内容と異なる場合もありますが、発行のプロセスに大きな違いはありません。

  5. 発行ウィザードの [Target](ターゲット) ページで、 [Target](ターゲット)[Azure] を選択します。

  6. [特定のターゲット] ページで [Azure Function App (Windows)] を選択します。

  7. [Functions インスタンス] ページで [新しい Azure 関数の作成] を選択します。

    Visual Studio - [発行] ダイアログ ボックスの関数の追加ボタンの画像。

  8. [Function App (Windows)] ページで、以下の手順に従います。

    1. 関数アプリの名前を入力します。
    2. Azure サブスクリプションを選択します。
    3. 既存のリソース グループを選択するか、新しいリソース グループを作成します。 このチュートリアルでは、Service Bus 名前空間があるリソース グループを選択します。
    4. App Service のプランの種類を選択します。
    5. 場所を選択します。 Service Bus 名前空間と同じ場所を選択します。
    6. 既存の Azure Storage を選択するか、 [New](新規作成) を選択して、関数アプリで使用される新しいストレージ アカウントを作成します。
    7. [作成] を選択して関数アプリを作成します。
  9. 発行ウィザードの [Functions インスタンス] ページに戻って [完了] を選択します。

  10. Visual Studio の [発行] ページで、 [発行] を選択して関数アプリを Azure に発行します。

    関数アプリを発行する

  11. [出力] ウィンドウに表示されるビルドと発行のメッセージを見て、どちらも成功したことを確認します。

  12. ここで、[発行] ページの [ホスティング] セクションで、[...] (省略記号) を選択し、[Azure portal での管理] を選択します。

  13. Azure portal の [関数アプリ] ページで、左側のメニューにある [関数] を選択し、2 つの関数が表示されていることを確認します。

    Event Grid トリガー関数を含む [関数] ページを示すスクリーンショット。

  14. 一覧から [EventGridTriggerFunction] を選択します。 HTTP トリガーを使用するよりも有利な点がいくつかあるため、Azure Functions では Event Grid トリガーの使用をお勧めします。 詳細については、「Event Grid イベントに対するイベント ハンドラーとしての Azure 関数」を参照してください。

  15. [EventGridTriggerFunction][関数] ページで、左側のメニューの [監視] を選択します。

  16. [構成] を選択し、呼び出しログをキャプチャするように Application Insights を構成します。 Event Grid から Service Bus のイベントを受信したら、このページを使用して関数の実行を監視します。

  17. [Application Insights] ページでリソースの名前を入力し、リソースの場所を選択して、 [OK] を選択します。

  18. 上部 (階層リンク メニュー) の EventGridTriggerFunction 関数を選択して、 [関数] ページに戻ります。

  19. [監視] ページが表示されていることを確認します。

    関数の [監視] ページ (関数の呼び出し前)

    このページは、Web ブラウザーのタブで開いたままにしておいてください。 後でこのページを最新の情報に更新すると、この関数の呼び出しが表示されます。

Event Grid による関数と Service Bus 名前空間の接続

このセクションでは、Azure portal を使用して、関数と Service Bus 名前空間を関連付けます。

Azure Event Grid サブスクリプションを作成するには、次の手順に従います。

  1. Azure portal で、Service Bus 名前空間に移動し、左側のウィンドウで [イベント] を選択します。 該当する名前空間のウィンドウが開き、右側のウィンドウに 2 つの Event Grid サブスクリプションが表示されます。

    Service Bus - [イベント] ページ

  2. ツール バーの [+ イベント サブスクリプション] を選択します。

  3. [イベント サブスクリプションの作成] ページで、次の手順を実行します。

    1. サブスクリプションの名前を入力します。

    2. システム トピック名前を入力します。 システム トピックは、Azure Storage アカウントや Azure Service Bus などの Azure リソースに関して作成されたトピックです。 システム トピックの詳細については、システム トピックの概要に関するページを参照してください。

    3. [エンドポイントのタイプ][Azure Function] を選択し、[エンドポイントの選択] をクリックします。

      Service Bus - Event Grid サブスクリプション

    4. [Azure 関数の選択] ページで、サブスクリプション、リソース グループ、関数アプリ、スロット、関数を選択し、 [選択の確認] を選択します。

      関数 - エンドポイントの選択

    5. [イベント サブスクリプションの作成] ページの [フィルター] タブに切り替えて、次の作業を行います。

      1. [サブジェクト フィルタリングを有効にする] を選択します。

      2. 前に作成した Service Bus トピック (S1) に対するサブスクリプションの名前を入力します。

      3. [作成] ボタンを選択します。

        イベント サブスクリプションのフィルター

  4. [イベント] ページの [イベント サブスクリプション] タブで、一覧にイベント サブスクリプションが表示されていることを確認します。

    一覧のイベント サブスクリプション

関数アプリを監視する

先ほど Service Bus トピックに送信したメッセージは、サブスクリプション (S1) に転送されます。 サブスクリプションにあるメッセージは、Event Grid によって Azure 関数に転送されます。 このチュートリアルの手順では、関数が呼び出されたことを確かめ、ログに記録された情報メッセージを確認します。

  1. 自分の Azure 関数アプリのページで、 [監視] タブに切り替えます (まだアクティブになっていない場合)。 Service Bus トピックにポストされた各メッセージのエントリが表示されます。 それらの表示されない場合は、数分待ってから、ページを最新の情報に更新してください。

    関数の [監視] ページ (呼び出し後)

  2. 一覧から呼び出しを選択して、詳細を表示します。

    関数の呼び出しの詳細

    メッセージが送信されたときに、 [監視] ページの [ログ] タブを使用して、ログ情報を確認することもできます。 ある程度の待ち時間が発生する可能性があります。ログに記録されたメッセージが表示されるまで、数分お待ちください。

    関数のログ

トラブルシューティング

しばらく待って最新の情報に更新しても、関数の呼び出しが表示されない場合は、以下の手順に従います。

  1. メッセージが Service Bus トピックに到達したことを確認します。 [Service Bus トピック] ページの受信メッセージカウンターに注目してください。 この場合、MessageSender アプリケーションを 2 回実行したので、10 件のメッセージが表示されています (各実行につき 5 件のメッセージ)。

    [Service Bus トピック] ページ - 受信メッセージ

  2. Service Bus サブスクリプションにアクティブなメッセージがないことを確認します。 このページにイベントが 1 つも表示されない場合、 [Service Bus Subscription](Service Bus サブスクリプション) ページに [アクティブなメッセージ数] が表示されていないことを確認してください。 このカウンターの数値がゼロより大きい場合は、なんらかの理由により、サブスクリプションのメッセージがハンドラー関数 (イベント サブスクリプション ハンドラー) に転送されていません。 イベント サブスクリプションが適切に設定されていることを確認してください。

    Service Bus サブスクリプション側におけるアクティブなメッセージ数

  3. また、Service Bus 名前空間の [イベント] ページに配信済みイベントが表示されます。

    [イベント] ページ - 配信済みイベント

  4. イベントが配信されたことは、 [イベント サブスクリプション] ページでも確認できます。 このページには、 [イベント] ページでイベント サブスクリプションを選択することによってアクセスできます。

    [イベント サブスクリプション] ページ - 配信済みイベント

次のステップ