Azure Functions と Azure Logic Apps を使用して、Azure Event Grid 経由で受信した Azure Service Bus イベントに応答するRespond to Azure Service Bus events received via Azure Event Grid by using Azure Functions and Azure Logic Apps

このチュートリアルでは、Azure Functions と Azure Logic Apps を使用して、Azure Event Grid 経由で受信した Azure Service Bus イベントに応答する方法について説明します。In this tutorial, you learn how to respond to Azure Service Bus events that are received via Azure Event Grid by using Azure Functions and Azure Logic Apps. 次の手順を実行します。You'll do the following steps:

  • Event Grid からのイベントの初期フローをデバッグして確認するための、テスト Azure 関数を作成します。Create a test Azure function for debugging and viewing the initial flow of events from the Event Grid.
  • Event Grid イベントに基づいて Azure Service Bus メッセージを受信して処理する Azure 関数を作成します。Create an Azure function to receive and process Azure Service Bus messages based on Event Grid events.
  • Event Grid イベントに応答するロジック アプリを作成しますCreate a logic app to respond to Event Grid events

Service Bus、Event Grid、Azure Functions、および Logic Apps の成果物を作成した後後は、次のアクションを行います。After you create the Service Bus, Event Grid, Azure Functions, and Logic Apps artifacts, you do the following actions:

  1. Service Bus トピックにメッセージを送信します。Send messages to a Service Bus topic.
  2. トピックに対するサブスクリプションがそれらのメッセージを受信したことを確認しますVerify that the subscriptions to the topic received those messages
  3. イベントをサブスクライブした関数またはロジック アプリがイベントを受信したことを確認します。Verify that the function or logic app that subscribed for the event has received the event.

Service Bus 名前空間を作成するCreate a Service Bus namespace

このチュートリアルの手順に従ってください。クイック スタート:Azure portal を使用して Service Bus トピックとそのサブスクリプションを作成する」で確認し、次のタスクを実行します:Follow instructions in this tutorial: Quickstart: Use the Azure portal to create a Service Bus topic and subscriptions to the topic to do the following tasks:

  • Premium Service Bus 名前空間を作成します。Create a premium Service Bus namespace.
  • 接続文字列を取得します。Get the connection string.
  • Service Bus トピックを作成します。Create a Service Bus topic.
  • トピックに対するサブスクリプションを 2 つ作成します。Create two subscriptions to the topic.

サンプル アプリケーションを準備してメッセージを送信するPrepare a sample application to send messages

メッセージを Service Bus トピックに送信するには、お好きな方法を使用できます。You can use any method to send a message to your Service Bus topic. この手順の最後にあるサンプル コードは、Visual Studio 2017 の使用を前提としています。The sample code at the end of this procedure assumes that you're using Visual Studio 2017.

  1. GitHub の azure-service-bus リポジトリを複製します。Clone the GitHub azure-service-bus repository.

  2. Visual Studio で \samples\DotNet\Microsoft.ServiceBus.Messaging\ServiceBusEventGridIntegration フォルダーに移動し、SBEventGridIntegration.sln ファイルを開きます。In Visual Studio, go to the \samples\DotNet\Microsoft.ServiceBus.Messaging\ServiceBusEventGridIntegration folder, and then open the SBEventGridIntegration.sln file.

  3. MessageSender プロジェクトに移動し、 [Program.cs] を選択します。Go to the MessageSender project, and then select Program.cs.

  4. Service Bus トピック名と、前の手順で取得した接続文字列を入力します。Fill in your Service Bus topic name and the connection string you got from the previous step:

    const string ServiceBusConnectionString = "YOUR CONNECTION STRING";
    const string TopicName = "YOUR TOPIC NAME";
    
  5. テスト メッセージを Service Bus トピックに送信するプログラムをビルドして実行します。Build and run the program to send test messages to the Service Bus topic.

Azure でテスト関数を設定するSet up a test function on Azure

シナリオ全体を実行する前に、少なくとも小さなテスト関数を設定します。これを使用して、流れているイベントのデバッグと観察を行うことができます。Before you work through the entire scenario, set up at least a small test function, which you can use to debug and observe the events that are flowing. Azure portal で初めての関数を作成する」の記事の手順に従って、次のタスクを行ってください。Follow instructions in the Create your first function in the Azure portal article to do the following tasks:

  1. 関数アプリを作成します。Create a function app.
  2. HTTP によってトリガーされる関数を作成します。Create an HTTP triggered function.

その後、次の手順を実行します。Then, do the following steps:

  1. ツリー ビューで [関数] を展開し、関数を選択します。Expand Functions in the tree view, and select your function. 関数のコードを次のコードに置き換えます。Replace the code for the function with the following code:

    #r "Newtonsoft.Json"
    
    using System.Net;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Primitives;
    using Newtonsoft.Json;
    
    public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
        var content = req.Body;
        string jsonContent = await new StreamReader(content).ReadToEndAsync();
        log.LogInformation($"Received Event with payload: {jsonContent}");
    
        IEnumerable<string> headerValues;
        headerValues = req.Headers.GetCommaSeparatedValues("Aeg-Event-Type");
    
        if (headerValues.Count() != 0)
        {
            var validationHeaderValue = headerValues.FirstOrDefault();
            if(validationHeaderValue == "SubscriptionValidation")
            {
                var events = JsonConvert.DeserializeObject<GridEvent[]>(jsonContent);
                var code = events[0].Data["validationCode"];
                log.LogInformation("Validation code: {code}");
                return (ActionResult) new OkObjectResult(new { validationResponse = code });
            }
        }
    
        return jsonContent == null
            ? new BadRequestObjectResult("Please pass a name on the query string or in the request body")
            : (ActionResult)new OkObjectResult($"Hello, {jsonContent}");
    }
    
    public class GridEvent
    {
        public string Id { get; set; }
        public string EventType { get; set; }
        public string Subject { get; set; }
        public DateTime EventTime { get; set; }
        public Dictionary<string, string> Data { get; set; }
        public string Topic { get; set; }
    }
    
    
  2. [保存および実行] を選択します。Select Save and run.

    関数アプリの出力

  3. [関数の URL の取得] を選択して、URL をメモします。Select Get function URL and note down the URL.

    関数の URL の取得

Event Grid による関数と名前空間の接続Connect the function and namespace via Event Grid

このセクションでは、Azure portal を使用して、関数と Service Bus 名前空間を関連付けます。In this section, you tie together the function and the Service Bus namespace by using the Azure portal.

Azure Event Grid サブスクリプションを作成するには、次の手順に従います。To create an Azure Event Grid subscription, follow these steps:

  1. Azure portal で、該当する名前空間に移動し、左側のウィンドウで [イベント] を選択します。In the Azure portal, go to your namespace and then, in the left pane, select Events. 該当する名前空間のウィンドウが開き、右側のウィンドウに 2 つの Event Grid サブスクリプションが表示されます。Your namespace window opens, with two Event Grid subscriptions displayed in the right pane.

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

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

  3. [イベント サブスクリプションの作成] ページで、次の手順を実行します。On the Create Event Subscription page, do the following steps:

    1. サブスクリプションの名前を入力します。Enter a name for the subscription.

    2. [エンドポイントのタイプ] には [Webhook] を選択します。Select Web Hook for Endpoint Type.

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

    3. [エンドポイントの選択] を選び、関数の URL を貼り付けてから、 [選択の確認] を選びます。Chose Select an endpoint, paste the function URL, and then select Confirm selection.

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

    4. [フィルター] タブに切り替えて、前に作成した Service Bus トピックに対する最初のサブスクリプションの名前を入力し、 [作成] ボタンを選択します。Switch to the Filters tab, enter the name of the first subscription to the Service Bus topic you created earlier, and then select the Create button.

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

  4. 一覧にそのイベント サブスクリプションが表示されていることを確認します。Confirm that you see the event subscription in the list.

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

Service Bus トピックにメッセージを送信するSend messages to the Service Bus topic

  1. Service Bus トピックにメッセージを送信する .Net C# アプリケーションを実行します。Run the .NET C# application, which sends messages to the Service Bus topic.

    コンソールのアプリ出力

  2. Azure 関数アプリのページで、 [関数] を展開して、該当の関数を展開し、 [監視] を選択します。On the page for your Azure function app, expand Functions, expand your function, and select Monitor.

    関数の監視

Azure Functions を使用してメッセージを受信するReceive messages by using Azure Functions

前のセクションでは、テストとデバッグの簡単なシナリオを確認し、イベントが送信されていることを確認しました。In the preceding section, you observed a simple test and debugging scenario and ensured that events are flowing.

このセクションでは、イベントを受信した後に、メッセージを受信して処理する方法について説明します。In this section, you'll learn how to receive and process messages after you receive an event.

Visual Studio から関数を発行するPublish a function from Visual Studio

  1. 開いていた同じ Visual Studio ソリューション (SBEventGridIntegration) で、SBEventGridIntegration プロジェクト内の ReceiveMessagesOnEvent.cs を選択します。In the same Visual Studio solution (SBEventGridIntegration) that you opened, select ReceiveMessagesOnEvent.cs in the SBEventGridIntegration project.

  2. 次のコードに実際の Service Bus 接続文字列を入力します。Enter your Service Bus connection string in the following code:

    const string ServiceBusConnectionString = "YOUR CONNECTION STRING";
    
  3. 関数の発行プロファイルをダウンロードします。Download the publish profile for the function:

    1. 関数アプリを選択します。Select your function app.

    2. [概要] タブが選択されていない場合は、選択します。Select the Overview tab if it isn't already selected.

    3. ツールバーの [発行プロファイルの取得] を選択します。Select Get publish profile on the toolbar.

      関数の発行プロファイルの取得

    4. プロジェクトのフォルダーにファイルを保存します。Save the file to your project's folder.

  4. Visual Studio で SBEventGridIntegration を右クリックして [発行] を選択します。In Visual Studio, right-click SBEventGridIntegration, and then select Publish.

  5. [発行] ページで [開始] * を選択します。Select Start* on the Publish page.

  6. [発行先を選択] ページで、次の手順に従い、 [プロファイルのインポート] を選択します。On the Pick a publish target page, do the following steps, select Import Profile.

    Visual Studio - [プロファイルのインポート] ボタン

  7. 先ほどダウンロードした発行プロファイル ファイルを選択します。Select the publish profile file you downloaded earlier.

  8. [発行] ページで [発行] を選択します。Select Publish on the Publish page.

    Visual Studio - 発行

  9. 新しい Azure 関数 ReceiveMessagesOnEvent が表示されていることを確認します。Confirm that you see the new Azure function ReceiveMessagesOnEvent. 必要に応じてページを更新します。Refresh the page if needed.

    新しい関数が作成されたことを確認

  10. この新しい関数の URL を取得し、メモします。Get the URL to the new function and note it down.

Event Grid サブスクリプションEvent Grid subscription

  1. 既存の Event Grid サブスクリプションを削除します。Delete the existing Event Grid subscription:
    1. [Service Bus 名前空間] ページで、左側のメニューの [イベント] を選択します。On the Service Bus Namespace page, select Events on the left menu.
    2. 既存のイベント サブスクリプションを選択します。Select the existing event subscription.
    3. [イベント サブスクリプション] ページで、 [削除] を選択します。On the Event Subscription page, select Delete.
  2. Event Grid による関数と名前空間の接続」セクションの手順に従い、新しい関数の URL を使用して Event Grid サブスクリプションを作成します。Follow instructions in the Connect the function and namespace via Event Grid section to create an Event Grid subscription using the new function URL.
  3. Service Bus トピックにメッセージを送信する」セクションの手順に従い、トピックにメッセージを送信して、関数を監視します。Follow instruction in the Send messages to the Service Bus topic section to send messages to the topic and monitor the function.

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

次の手順に従い、ロジック アプリを Azure Service Bus と Azure Event Grid に接続します。Connect a logic app with Azure Service Bus and Azure Event Grid by following these steps:

  1. Azure portal で、ロジック アプリを作成します。Create a logic app in the Azure portal.

    1. [+ リソースの作成][統合][ロジック アプリ] の順に選択します。Select + Create a resource, select Integration, and then select Logic App.
    2. [ロジック アプリ - 作成] ページで、ロジック アプリの名前を入力します。On the Logic App - Create page, enter a name for the logic app.
    3. Azure サブスクリプションを選択します。Select your Azure subscription.
    4. [リソース グループ] では [既存のものを使用] を選択し、以前に作成済みの、他のリソース (Azure 関数、Service Bus 名前空間など) に使用したリソース グループを選択します。Select Use existing for the Resource group, and select the resource group that you used for other resources (like Azure function, Service Bus namespace) that you created earlier.
    5. ロジック アプリの場所を選択します。Select the Location for the logic app.
    6. [作成] を選択して、ロジック アプリを作成します。Select Create to create the logic app.
  2. [Logic Apps デザイナー] ページの [テンプレート] で、 [空のロジック アプリ] を選択します。On the Logic Apps Designer page, select Blank Logic App under Templates.

  3. デザイナーで、次の手順を実行します。On the designer, do the following steps:

    1. Event Grid を検索します。Search for Event Grid.

    2. [When a resource event occurs (preview) - Azure Event Grid](リソース イベントが発生したとき (プレビュー) - Azure Event Grid) を選択します。Select When a resource event occurs (preview) - Azure Event Grid.

      Logic Apps デザイナー - Event Grid トリガーの選択

  4. [サインイン] を選択して、Azure 資格情報を入力し、 [Allow Access](アクセスを許可する) を選択します。Select Sign in, enter your Azure credentials, and select Allow Access.

  5. [When a resource event occurs](リソース イベントが発生したとき) ページで、次の手順を実行します。On the When a resource event occurs page, do the following steps:

    1. Azure サブスクリプションを選択します。Select your Azure subscription.
    2. [リソースの種類] で、 [Microsoft.ServiceBus.Namespaces] を選択します。For Resource Type, select Microsoft.ServiceBus.Namespaces.
    3. [リソース名] で、Service Bus 名前空間を選択します。For Resource Name, select your Service Bus namespace.
    4. [新しいパラメーターの追加] を選択し、 [サフィックス フィルター] を選択します。Select Add new parameter, and select Suffix Filter.
    5. [サフィックス フィルター] で、Service Bus トピックの 2 つ目のサブスクリプションの名前を入力します。For Suffix Filter, enter the name of your second Service Bus topic subscription. Logic Apps デザイナー - イベントの構成Logic Apps Designer - configure event
  6. デザイナーで [+ 新しいステップ] を選択し、次の手順を実行します。Select + New Step in the designer, and do the following steps:

    1. Service Bus を検索します。Search for Service Bus.

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

    3. [アクション] 一覧から [メッセージを取得します] を選択します。Select for Get messages in the Actions list.

    4. [トピック サブスクリプションからメッセージを取得する (ピークロック)] を選択します。Select Get messages from a topic subscription (peek-lock).

      Logic Apps デザイナー - メッセージの取得アクション

    5. 接続名を入力します。Enter a name for the connection. 例: 「Get messages from the topic subscription」。そして、Service Bus 名前空間を選択します。For example: Get messages from the topic subscription, and select the Service Bus namespace.

      Logic Apps デザイナー - Service Bus 名前空間の選択

    6. [RootManageSharedAccessKey] を選択します。Select RootManageSharedAccessKey.

      Logic Apps デザイナー - 共有アクセス キーの選択

    7. 作成 を選択します。Select Create.

    8. トピックとサブスクリプションを選択します。Select your topic and subscription.

      Logic Apps デザイナー - Service Bus のトピックとサブスクリプションの選択

  7. [+ 新しいステップ] を選択し、次の手順を実行します。Select + New step, and do the following steps:

    1. [Service Bus] を選びます。Select Service Bus.

    2. アクションの一覧から [トピック サブスクリプション内のメッセージを完了する] を選択します。Select Complete the message in a topic subscription from the list of actions.

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

    4. トピックに対する 2 つ目のサブスクリプションを選択します。Select the second subscription to the topic.

    5. [メッセージのロック トークン] で、 [動的なコンテンツ] から [ロック トークン] を選択します。For Lock token of the message, select Lock Token from the Dynamic content.

      Logic Apps デザイナー - Service Bus のトピックとサブスクリプションの選択

  8. Logic Apps デザイナーのツールバーの [保存] を選択して、ロジック アプリを保存します。Select Save on the toolbar on the Logic Apps Designer to save the logic app.

  9. Service Bus トピックにメッセージを送信する」セクションの手順に従い、トピックにメッセージを送信します。Follow instruction in the Send messages to the Service Bus topic section to send messages to the topic.

  10. お使いのロジック アプリの [概要] ページに切り替えます。Switch to the Overview page of your logic app. 送信されたメッセージの [実行の履歴] に、ロジック アプリの実行が表示されます。You see the logic app runs in the Runs history for the messages sent.

    Logic Apps デザイナー - ロジック アプリの実行

次の手順Next steps