チュートリアル: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 トピックにメッセージを送信します。

  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;) をビルドして実行します。

    コンソールのアプリ出力

Logic Apps を使用してメッセージを受信する

この手順では、Service Bus イベントを Azure Event Grid 経由で受信する Azure ロジック アプリを作成します。

  1. [+ リソースの作成][統合][ロジック アプリ] の順に選択します。

    [リソースの作成] -> [統合] -> [ロジック アプリ] メニューを示すスクリーンショット。

  2. [ロジック アプリの作成] ページで、次の手順のようにします。

    1. Azure サブスクリプションを選択します。
    2. [リソース グループ] では [既存のものを使用] を選択し、以前に作成済みの、他のリソース (Azure 関数、Service Bus 名前空間など) に使用したリソース グループを選択します。
    3. ロジック アプリの名前を入力します。
    4. ロジック アプリの [リージョン] を選択します。
    5. [プランの種類][従量課金] を選択します。
    6. [確認および作成] を選択します。 [ロジック アプリの作成] ページを示すスクリーンショット。
    7. [確認および作成] ページで [作成] を選択してロジック アプリを作成します。
  3. [デプロイ完了] ページで、[リソースに移動] を選択し、[ロジック アプリ] ページに移動します。

  4. [Logic Apps デザイナー] ページの [テンプレート] で、 [空のロジック アプリ] を選択します。

Event Grid 経由で Service Bus からメッセージを受信するステップを追加する

  1. [ロジック アプリ] ページで、左側のメニューの [ロジック アプリ デザイナー] を選択します。

  2. 右側のペインの [テンプレート][空のロジック アプリ] を選択します。

    [空のロジック アプリ] オプションが選択されている [ロジック アプリ デザイナー] ページを示すスクリーンショット。

  3. デザイナーで、次の手順を実行します。

    1. Event Grid を検索します。

    2. [リソース イベントが発生したとき - Azure Event Grid] を選択します。

      Event Grid トリガーが選択されている Logic Apps デザイナーを示すスクリーンショット。

  4. [サインイン] を選択します。

    [サインイン] ボタンが選択されている Logic Apps デザイナーを示すスクリーンショット。

  5. [アカウントへのサインイン] ページで、Azure へのサインインに使用するアカウントを選択します。 1.

  6. [When a resource event occurs](リソース イベントが発生したとき) ページで、次の手順を実行します。

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

    2. [リソースの種類] で、 [Microsoft.ServiceBus.Namespaces] を選択します。

    3. [リソース名] で、Service Bus 名前空間を選択します。

    4. [新しいパラメーターの追加] を選択し、 [サフィックス フィルター] を選択してから、フォーカスをドロップダウン リストの外に移動します。

      サフィックス フィルター型の新しいパラメータの追加を示すスクリーンショット。

    5. [サフィックス フィルター] で、Service Bus トピックのサブスクリプションの名前を入力します。

      Service Bus 名前空間の接続構成を含む Logic Apps デザイナーを示すスクリーンショット。

  7. デザイナーで [+ 新しいステップ] を選択し、次の手順を実行します。

    1. Service Bus を検索します。

    2. 一覧から [Service Bus] を選択します。

      Service Bus の選択を示すスクリーンショット。

    3. [アクション] 一覧から [メッセージを取得します] を選択します。

    4. [トピック サブスクリプションからメッセージを取得する (ピークロック)] を選択します。

      [トピック サブスクリプションからメッセージを取得する] が選択されている Logic Apps デザイナーを示すスクリーンショット。

    5. 次のステップを実行します。

      1. 接続名を入力します。 たとえば、「トピック サブスクリプションからのメッセージの取得」などです。

      2. [認証の種類][アクセス キー] に設定されていることを確認します。

      3. [接続文字列] で、接続文字列をコピーし、前に保存した Service Bus 名前空間に貼り付けます。

      4. [作成] を選択します

        Service Bus 接続文字列が指定されている Logic Apps デザイナーを示すスクリーンショット。

    6. トピックサブスクリプションを選択します。

      Service Bus のトピックとサブスクリプションが指定されている Logic Apps デザイナーを示すスクリーンショット。

受信したメッセージを処理して完了するステップを追加する

このステップでは、受信したメッセージをメールで送信し、メッセージを完了するステップを追加します。 実際のシナリオでは、メッセージを完了する前にロジック アプリでメッセージを処理します。

foreach ループを追加する

  1. [+ New step (+ 新しいステップ)] を選択します。

  2. [コントロール] を選択して選択します。

    [コントロール] カテゴリを示すスクリーンショット。

  3. [アクション] の一覧で [For each] を選択します。

    選択された For-each 操作を示すスクリーンショット。

  4. [以前の手順から出力を選択] (必要に応じてテキスト ボックス内をクリック)では、 [Get messages from a topic subscription (peek-lock)](トピック サブスクリプションからメッセージを取得 (peek-lock)) の下の [本文] を選択します。

    For-each の入力の選択を示すスクリーンショット。

メッセージ本文を含む電子メールを送信するステップを For each ループ内に追加する

  1. For each ループ内で、 [アクションの追加] を選択します。

    For-each ループ内の [アクションの追加] ボタンの選択を示すスクリーンショット。

  2. [コネクタとアクションを検索する] ボックスで、「Office 365」と入力します。

  3. 検索結果で、「Office 365 Outlook」を選択します。

    Office 365 の選択を示すスクリーンショット。

  4. アクションの一覧で、 [メールの送信 (V2)] を選択します。

    [メールの送信] 操作の選択を示すスクリーンショット。

  5. [サインイン] を選択し、手順に従って Office 365 Outlook への接続を作成します。

  6. [メールの送信 (V2)] ウィンドウで、次の手順に従います。

  7. [本文] のテキスト ボックス内を選択し、次の手順に従います。

    1. [宛先] にはメール アドレスを入力します。

    2. [件名] には、「Message received from Service Bus topic's subscription」と入力します。

    3. [式] に切り替えます。

    4. 次の式を入力します。

      base64ToString(items('For_each')?['ContentData'])
      
    5. [OK] を選択します。

      [メールの送信] アクティビティの本文の式を示すスクリーンショット。

For each ループに別のアクションを追加してメッセージを完了する

  1. For each ループ内で、 [アクションの追加] を選択します。

    1. [最近使った項目] 一覧から [Service Bus] を選択します。

    2. アクションの一覧から [トピック サブスクリプション内のメッセージを完了する] を選択します。

      [トピック サブスクリプション内のメッセージを完了する] の選択を示すスクリーンショット。

    3. Service Bus トピックを選択します。

    4. トピックに対するサブスクリプションを選択します。

    5. [メッセージのロック トークン] で、 [動的なコンテンツ] から [ロック トークン] を選択します。

      [ロック トークン] フィールドを示すスクリーンショット。

  2. Logic Apps デザイナーのツールバーの [保存] を選択して、ロジック アプリを保存します。

    Logic Apps デザイナーの [保存] ボタンを示すスクリーンショット。

アプリをテストする

  1. まだテスト メッセージをトピックに送信していない場合は、「Service Bus トピックにメッセージを送信する」セクションの手順に従って、トピックにメッセージを送信します。

  2. ロジック アプリの [概要] ページに切り替えてから、一番下のペインで [実行の履歴] タブに切り替えます。 トピックに送信されたロジック アプリの実行のメッセージが表示されます。 ロジック アプリの実行が確認できるまでに数分かかる場合があります。 ツール バーの [Refresh](最新の情報に更新) を選択して、ページを最新の情報に更新してください。

    ロジック アプリの実行履歴を示すスクリーンショット。

  3. ロジック アプリの実行を選択して詳細を確認します。 for ループで 5 つのメッセージが処理されていることに注目してください。

    選択したロジック アプリの実行の詳細を示すスクリーンショット。

  4. ロジック アプリによって受信された各メッセージの電子メールを受け取ります。

    トピックのサブスクリプションから受信したメッセージを含む Outlook のスクリーンショット。

トラブルシューティング

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

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

    受信メッセージ数が選択されている [Service Bus トピック] ページを示すスクリーンショット。

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

    アクティブなメッセージ数が選択されている [Service Bus サブスクリプション] ページを示すスクリーンショット。

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

    [Service Bus 名前空間] ページの [イベント] ページを示すスクリーンショット。

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

    配信されたイベント数が選択されている [イベント サブスクリプション] ページを示すスクリーンショット。

次のステップ