チュートリアル: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 トピックにメッセージを送信します。
GitHub azure-service-bus リポジトリをクローンするか、zip ファイルをダウンロードし、解凍してファイルを抽出します。
Visual Studio で \samples\DotNet\Azure.Messaging.ServiceBus\ServiceBusEventGridIntegrationV2 フォルダーに移動し、SBEventGridIntegration.sln ファイルを開きます。
ソリューション エクスプローラー ウィンドウで、 [MessageSender] プロジェクトを展開し、 [Program.cs] を選択します。
<SERVICE BUS NAMESPACE - CONNECTION STRING>
を Service Bus 名前空間への接続文字列で置き換え、<TOPIC NAME>
をトピックの名前で置き換えます。const string ServiceBusConnectionString = "<SERVICE BUS NAMESPACE - CONNECTION STRING>"; const string TopicName = "<TOPIC NAME>";
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 の開発」を参照してください。
SBEventGridIntegration.sln ソリューションの FunctionApp1 プロジェクトから ReceiveMessagesOnEvent.cs ファイルを開きます。
<SERVICE BUS NAMESPACE - CONNECTION STRING>
を Service Bus 名前空間の接続文字列に置き換えます。 これは、同じソリューションにある MessageSender プロジェクトの Program.cs ファイルで使用したものと同じである必要があります。[FunctionApp1] を右クリックし、 [発行] を選択します。
[発行] ページで [開始] を選択します。 これらの手順は、実際に表示される内容と異なる場合もありますが、発行のプロセスに大きな違いはありません。
発行ウィザードの [Target](ターゲット) ページで、 [Target](ターゲット) に [Azure] を選択します。
[特定のターゲット] ページで [Azure Function App (Windows)] を選択します。
[Functions インスタンス] ページで [新しい Azure 関数の作成] を選択します。
[Function App (Windows)] ページで、以下の手順に従います。
- 関数アプリの名前を入力します。
- Azure サブスクリプションを選択します。
- 既存のリソース グループを選択するか、新しいリソース グループを作成します。 このチュートリアルでは、Service Bus 名前空間があるリソース グループを選択します。
- App Service のプランの種類を選択します。
- 場所を選択します。 Service Bus 名前空間と同じ場所を選択します。
- 既存の Azure Storage を選択するか、 [New](新規作成) を選択して、関数アプリで使用される新しいストレージ アカウントを作成します。
- [作成] を選択して関数アプリを作成します。
発行ウィザードの [Functions インスタンス] ページに戻って [完了] を選択します。
Visual Studio の [発行] ページで、 [発行] を選択して関数アプリを Azure に発行します。
[出力] ウィンドウに表示されるビルドと発行のメッセージを見て、どちらも成功したことを確認します。
ここで、[発行] ページの [ホスティング] セクションで、[...] (省略記号) を選択し、[Azure portal での管理] を選択します。
Azure portal の [関数アプリ] ページで、左側のメニューにある [関数] を選択し、2 つの関数が表示されていることを確認します。
一覧から [EventGridTriggerFunction] を選択します。 HTTP トリガーを使用するよりも有利な点がいくつかあるため、Azure Functions では Event Grid トリガーの使用をお勧めします。 詳細については、「Event Grid イベントに対するイベント ハンドラーとしての Azure 関数」を参照してください。
[EventGridTriggerFunction] の [関数] ページで、左側のメニューの [監視] を選択します。
[構成] を選択し、呼び出しログをキャプチャするように Application Insights を構成します。 Event Grid から Service Bus のイベントを受信したら、このページを使用して関数の実行を監視します。
[Application Insights] ページでリソースの名前を入力し、リソースの場所を選択して、 [OK] を選択します。
上部 (階層リンク メニュー) の EventGridTriggerFunction 関数を選択して、 [関数] ページに戻ります。
[監視] ページが表示されていることを確認します。
このページは、Web ブラウザーのタブで開いたままにしておいてください。 後でこのページを最新の情報に更新すると、この関数の呼び出しが表示されます。
Event Grid による関数と Service Bus 名前空間の接続
このセクションでは、Azure portal を使用して、関数と Service Bus 名前空間を関連付けます。
Azure Event Grid サブスクリプションを作成するには、次の手順に従います。
Azure portal で、Service Bus 名前空間に移動し、左側のウィンドウで [イベント] を選択します。 該当する名前空間のウィンドウが開き、右側のウィンドウに 2 つの Event Grid サブスクリプションが表示されます。
ツール バーの [+ イベント サブスクリプション] を選択します。
[イベント サブスクリプションの作成] ページで、次の手順を実行します。
サブスクリプションの名前を入力します。
システム トピックの名前を入力します。 システム トピックは、Azure Storage アカウントや Azure Service Bus などの Azure リソースに関して作成されたトピックです。 システム トピックの詳細については、システム トピックの概要に関するページを参照してください。
[エンドポイントのタイプ] に [Azure Function] を選択し、[エンドポイントの選択] をクリックします。
[Azure 関数の選択] ページで、サブスクリプション、リソース グループ、関数アプリ、スロット、関数を選択し、 [選択の確認] を選択します。
[イベント サブスクリプションの作成] ページの [フィルター] タブに切り替えて、次の作業を行います。
[サブジェクト フィルタリングを有効にする] を選択します。
前に作成した Service Bus トピック (S1) に対するサブスクリプションの名前を入力します。
[作成] ボタンを選択します。
[イベント] ページの [イベント サブスクリプション] タブで、一覧にイベント サブスクリプションが表示されていることを確認します。
関数アプリを監視する
先ほど Service Bus トピックに送信したメッセージは、サブスクリプション (S1) に転送されます。 サブスクリプションにあるメッセージは、Event Grid によって Azure 関数に転送されます。 このチュートリアルの手順では、関数が呼び出されたことを確かめ、ログに記録された情報メッセージを確認します。
自分の Azure 関数アプリのページで、 [監視] タブに切り替えます (まだアクティブになっていない場合)。 Service Bus トピックにポストされた各メッセージのエントリが表示されます。 それらの表示されない場合は、数分待ってから、ページを最新の情報に更新してください。
一覧から呼び出しを選択して、詳細を表示します。
メッセージが送信されたときに、 [監視] ページの [ログ] タブを使用して、ログ情報を確認することもできます。 ある程度の待ち時間が発生する可能性があります。ログに記録されたメッセージが表示されるまで、数分お待ちください。
トラブルシューティング
しばらく待って最新の情報に更新しても、関数の呼び出しが表示されない場合は、以下の手順に従います。
メッセージが Service Bus トピックに到達したことを確認します。 [Service Bus トピック] ページの受信メッセージカウンターに注目してください。 この場合、MessageSender アプリケーションを 2 回実行したので、10 件のメッセージが表示されています (各実行につき 5 件のメッセージ)。
Service Bus サブスクリプションにアクティブなメッセージがないことを確認します。 このページにイベントが 1 つも表示されない場合、 [Service Bus Subscription](Service Bus サブスクリプション) ページに [アクティブなメッセージ数] が表示されていないことを確認してください。 このカウンターの数値がゼロより大きい場合は、なんらかの理由により、サブスクリプションのメッセージがハンドラー関数 (イベント サブスクリプション ハンドラー) に転送されていません。 イベント サブスクリプションが適切に設定されていることを確認してください。
また、Service Bus 名前空間の [イベント] ページに配信済みイベントが表示されます。
イベントが配信されたことは、 [イベント サブスクリプション] ページでも確認できます。 このページには、 [イベント] ページでイベント サブスクリプションを選択することによってアクセスできます。
次のステップ
- Azure Event Grid について学習します。
- Azure Functions について学習します。
- Azure App Service の Logic Apps 機能について学習します。
- Azure Service Bus の詳細については、こちらを参照してください。