チュートリアル:Azure Event Grid 経由で受信した Azure Service Bus のイベントに Azure Logic Apps を使用して応答する
このチュートリアルでは、Azure Logic Apps を使用して、Azure Event Grid 経由で受信した Azure Service Bus イベントに応答する方法について説明します。
前提条件
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;
) をビルドして実行します。
Logic Apps を使用してメッセージを受信する
この手順では、Service Bus イベントを Azure Event Grid 経由で受信する Azure ロジック アプリを作成します。
[+ リソースの作成] 、 [統合] 、 [ロジック アプリ] の順に選択します。
[ロジック アプリの作成] ページで、次の手順のようにします。
- Azure サブスクリプションを選択します。
- [リソース グループ] では [既存のものを使用] を選択し、以前に作成済みの、他のリソース (Azure 関数、Service Bus 名前空間など) に使用したリソース グループを選択します。
- ロジック アプリの名前を入力します。
- ロジック アプリの [リージョン] を選択します。
- [プランの種類] で [従量課金] を選択します。
- [確認および作成] を選択します。
- [確認および作成] ページで [作成] を選択してロジック アプリを作成します。
[デプロイ完了] ページで、[リソースに移動] を選択し、[ロジック アプリ] ページに移動します。
[Logic Apps デザイナー] ページの [テンプレート] で、 [空のロジック アプリ] を選択します。
Event Grid 経由で Service Bus からメッセージを受信するステップを追加する
[ロジック アプリ] ページで、左側のメニューの [ロジック アプリ デザイナー] を選択します。
右側のペインの [テンプレート] で [空のロジック アプリ] を選択します。
デザイナーで、次の手順を実行します。
Event Grid を検索します。
[リソース イベントが発生したとき - Azure Event Grid] を選択します。
[サインイン] を選択します。
[アカウントへのサインイン] ページで、Azure へのサインインに使用するアカウントを選択します。 1.
[When a resource event occurs](リソース イベントが発生したとき) ページで、次の手順を実行します。
Azure サブスクリプションを選択します。
[リソースの種類] で、 [Microsoft.ServiceBus.Namespaces] を選択します。
[リソース名] で、Service Bus 名前空間を選択します。
[新しいパラメーターの追加] を選択し、 [サフィックス フィルター] を選択してから、フォーカスをドロップダウン リストの外に移動します。
[サフィックス フィルター] で、Service Bus トピックのサブスクリプションの名前を入力します。
デザイナーで [+ 新しいステップ] を選択し、次の手順を実行します。
Service Bus を検索します。
一覧から [Service Bus] を選択します。
[アクション] 一覧から [メッセージを取得します] を選択します。
[トピック サブスクリプションからメッセージを取得する (ピークロック)] を選択します。
次のステップを実行します。
接続名を入力します。 たとえば、「トピック サブスクリプションからのメッセージの取得」などです。
[認証の種類] が [アクセス キー] に設定されていることを確認します。
[接続文字列] で、接続文字列をコピーし、前に保存した Service Bus 名前空間に貼り付けます。
[作成] を選択します
トピックとサブスクリプションを選択します。
受信したメッセージを処理して完了するステップを追加する
このステップでは、受信したメッセージをメールで送信し、メッセージを完了するステップを追加します。 実際のシナリオでは、メッセージを完了する前にロジック アプリでメッセージを処理します。
foreach ループを追加する
[+ New step (+ 新しいステップ)] を選択します。
[コントロール] を選択して選択します。
[アクション] の一覧で [For each] を選択します。
[以前の手順から出力を選択] (必要に応じてテキスト ボックス内をクリック)では、 [Get messages from a topic subscription (peek-lock)](トピック サブスクリプションからメッセージを取得 (peek-lock)) の下の [本文] を選択します。
メッセージ本文を含む電子メールを送信するステップを For each ループ内に追加する
For each ループ内で、 [アクションの追加] を選択します。
[コネクタとアクションを検索する] ボックスで、「Office 365」と入力します。
検索結果で、「Office 365 Outlook」を選択します。
アクションの一覧で、 [メールの送信 (V2)] を選択します。
[サインイン] を選択し、手順に従って Office 365 Outlook への接続を作成します。
[メールの送信 (V2)] ウィンドウで、次の手順に従います。
[本文] のテキスト ボックス内を選択し、次の手順に従います。
[宛先] にはメール アドレスを入力します。
[件名] には、「Message received from Service Bus topic's subscription」と入力します。
[式] に切り替えます。
次の式を入力します。
base64ToString(items('For_each')?['ContentData'])
[OK] を選択します。
For each ループに別のアクションを追加してメッセージを完了する
For each ループ内で、 [アクションの追加] を選択します。
[最近使った項目] 一覧から [Service Bus] を選択します。
アクションの一覧から [トピック サブスクリプション内のメッセージを完了する] を選択します。
Service Bus トピックを選択します。
トピックに対するサブスクリプションを選択します。
[メッセージのロック トークン] で、 [動的なコンテンツ] から [ロック トークン] を選択します。
Logic Apps デザイナーのツールバーの [保存] を選択して、ロジック アプリを保存します。
アプリをテストする
まだテスト メッセージをトピックに送信していない場合は、「Service Bus トピックにメッセージを送信する」セクションの手順に従って、トピックにメッセージを送信します。
ロジック アプリの [概要] ページに切り替えてから、一番下のペインで [実行の履歴] タブに切り替えます。 トピックに送信されたロジック アプリの実行のメッセージが表示されます。 ロジック アプリの実行が確認できるまでに数分かかる場合があります。 ツール バーの [Refresh](最新の情報に更新) を選択して、ページを最新の情報に更新してください。
ロジック アプリの実行を選択して詳細を確認します。 for ループで 5 つのメッセージが処理されていることに注目してください。
ロジック アプリによって受信された各メッセージの電子メールを受け取ります。
トラブルシューティング
しばらく待って最新の情報に更新しても呼び出しが表示されない場合は、次の手順に従います。
メッセージが Service Bus トピックに到達したことを確認します。 [Service Bus トピック] ページの受信メッセージカウンターに注目してください。 この場合、MessageSender アプリケーションを 1 回実行したので、5 件のメッセージが表示されています。
Service Bus サブスクリプションにアクティブなメッセージがないことを確認します。 このページにイベントが 1 つも表示されない場合、 [Service Bus Subscription](Service Bus サブスクリプション) ページに [アクティブなメッセージ数] が表示されていないことを確認してください。 このカウンターの数値がゼロより大きい場合は、なんらかの理由により、サブスクリプションのメッセージがハンドラー関数 (イベント サブスクリプション ハンドラー) に転送されていません。 イベント サブスクリプションが適切に設定されていることを確認してください。
また、Service Bus 名前空間の [イベント] ページに配信済みイベントが表示されます。
イベントが配信されたことは、 [イベント サブスクリプション] ページでも確認できます。 このページには、 [イベント] ページでイベント サブスクリプションを選択することによってアクセスできます。
次のステップ
- Azure Event Grid について学習します。
- Azure Functions について学習します。
- Azure App Service の Logic Apps 機能について学習します。
- Azure Service Bus の詳細については、こちらを参照してください。