チュートリアル: カスタム トピックを使用して Azure Event Grid の MQTT メッセージを Azure Functions にルーティングする - Azure portal

このチュートリアルでは、次の手順に従って、Event Grid のカスタム トピックを使用して、Azure Event Grid 名前空間で受信した MQTT メッセージを Azure 関数にルーティングする方法について学習します。

Azure サブスクリプションを持っていない場合は、無料試用版にサインアップできます。

Event Grid トリガーを使用して Azure 関数を作成する

Visual Studio Code を使用した Azure 関数の作成に関するページの手順に従いますが、HTTP トリガー を使用する代わりに、Azure Event Grid トリガーを使用します。 次の例のようなコードが表示されます。

using System;
using Azure.Messaging;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

namespace Company.Function
{
    public class MyEventGridTriggerFunc
    {
        private readonly ILogger<MyEventGridTriggerFunc> _logger;

        public MyEventGridTriggerFunc(ILogger<MyEventGridTriggerFunc> logger)
        {
            _logger = logger;
        }

        [Function(nameof(MyEventGridTriggerFunc))]
        public void Run([EventGridTrigger] CloudEvent cloudEvent)
        {
            _logger.LogInformation("Event type: {type}, Event subject: {subject}", cloudEvent.Type, cloudEvent.Subject);
        }
    }
}

この Azure 関数は、このチュートリアルの後半でトピックのサブスクリプションのイベント ハンドラーとして使用します。

Note

  • すべてのリソースを同じリージョンに作成します。
  • このチュートリアルは、.NET 8.0 (分離) ランタイム スタックを使用する Azure 関数でテストされています。

Event Grid トピックを作成する (カスタム トピック)

Event Grid トピックを作成します。 ポータルを使用したカスタム トピックの作成に関するページを参照してください。 Event Grid トピックを作成する場合、[詳細] タブの [イベント スキーマ]で、[クラウド イベント スキーマ v1.0] を選択します。

[トピックの作成] ウィザードの [詳細] ページを示すスクリーンショット。

Note

このチュートリアルのすべての場所でクラウド イベント スキーマを使用します。

関数を使用してトピックにサブスクリプションを追加する

この手順では、前に作成した Azure 関数を使用して、Event Grid トピックのサブスクリプションを作成します。

  1. [Event Grid トピック] ページの左側のナビゲーション バーで [サブスクリプション] を選択します。

    トピックの [イベント サブスクリプション] ページを示すスクリーンショット。

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

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

    2. [イベント スキーマ] で、[クラウド イベント スキーマ v1.0] を選択します。

    3. [エンドポイントの種類] で、[Azure Functions] を選択します。

    4. [エンドポイントの構成] を選択します。

      [イベント サブスクリプションの作成] ページを示すスクリーンショット。

  3. [Azure 関数の選択] ページで、次の手順を行います。

    1. [サブスクリプション] で、自分の Azure サブスクリプションを選択します。

    2. [リソース グループ] で、Azure 関数を含むリソース グループを選択します。

    3. [関数アプリ] で、関数を含む関数アプリを選択します。

    4. [スロット] で、[運用] を選択します。

    5. [関数] で、お使いの Azure 関数を選択します。

    6. 次に、ページの下部にある [選択を確認] を選択します。

      [Azure 関数の選択] ページを示すスクリーンショット。

  4. [イベント サブスクリプションの作成] ページで、 [作成] を選択します。

  5. [イベント サブスクリプション] ページに、作成したサブスクリプションが表示されます。

名前空間、クライアント、トピック空間、アクセス許可バインドを作成する

クイック スタート: Azure portal で Event Grid 名前空間を使用した MQTT メッセージの発行とサブスクライブに関するページの手順に従って、次の操作を行います。

  1. Event Grid 名前空間を作成します。
  2. 2 つのクライアントを作成します。
  3. トピック空間を作成します。
  4. パブリッシャーとサブスクライバーのアクセス許可バインドを作成します。
  5. MQTTX アプリを使用してテストし、クライアントがメッセージを送受信できることを確認します。

名前空間のマネージド ID を有効にする

このセクションでは、Event Grid 名前空間のシステム割り当てマネージド ID を有効にします。 次に、メッセージをカスタム トピックにルーティングできるように、先ほど作成した Event Grid カスタム トピックへの送信アクセス許可を ID に付与します。 そのためには、マネージド ID をカスタム トピックの Event Grid データ送信者のロールに追加します。

  1. [Event Grid 名前空間] ページの左側のナビゲーション メニューで [ID] を選択します。

    [ID] タブが選択されている Event Grid 名前空間を示すスクリーンショット。

  2. Event Grid カスタム トピックの [Event Grid トピック] に移動します。

  3. 左側のナビゲーション バーで [アクセスの制御] を選択します。

  4. [アクセスの制御] ページで [追加] を選択し、[ロールの割り当ての追加] を選択します。

    [アクセスの制御] ページを示すスクリーンショット。

  5. [ロールの割り当ての追加] ウィザードの [ロール] ページで、[Event Grid データ送信者] ロールを選択し、ページの下部にある [次へ] を選択します。

    [ロール割り当ての追加] ウィザードの [ロール] ページを示すスクリーンショット。

  6. [ロール割り当ての追加] ウィザードの [メンバー] ページで、[マネージド ID] を選択し、[メンバーの選択] を選択します。

    [ロールの割り当ての追加] 画面の [メンバー] ページを示すスクリーンショット。

  7. [マネージド ID の選択] ページで、次の手順を行います。

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

    2. [マネージド ID] には、[Event Grid 名前空間] を選択します。

    3. Event Grid 名前空間と同じ名前のマネージド ID を選択します。

    4. ページの下部にある [選択] を選択します。

      [マネージド ID の選択] ページを示すスクリーンショット。

  8. [ロールの割り当ての追加] ページで、ページの下部にある [次へ] を選択します。

  9. [確認と割り当て] ページで設定を確認し、ページの下部にある [確認と割り当て] を選択します。

カスタム トピックを使用して Azure 関数へのメッセージのルーティングを構成する

この手順では、受信したメッセージが作成したカスタム トピックにルーティングされるように、Event Grid 名前空間のルーティングを構成します。

  1. [Event Grid 名前空間] ページの左側のナビゲーション バーで、[ルーティング] を選択します。

  2. [ルーティング] ページで、[ルーティングを有効にする] を選択します。

  3. [トピックの種類][カスタム トピック] を選択します。

  4. [トピック] で、このチュートリアル用に作成したカスタム トピックを選択します。

  5. [配信用のマネージド ID] で、[システム割り当て] を選択します。

  6. ページの下部で [適用] を選びます。

    名前空間の [ルーティング] ページを示すスクリーンショット。

MQTTX を使用してテスト MQTT メッセージを送信する

テスト MQTT メッセージを名前空間に送信し、関数が受信していることを確認します。

MQTTX アプリを使用したメッセージの発行とサブスクライブ」の手順に従って、いくつかのテスト メッセージを Event Grid 名前空間に送信します。

イベントまたはメッセージのフローを次に示します。

  1. MQTTX は、Event Grid 名前空間のトピック空間にメッセージを送信します。

  2. メッセージは、構成したカスタム トピックにルーティングされます。

  3. メッセージは、Azure 関数であるイベント サブスクリプションに転送されます。

  4. ログ機能を使用して、関数がイベントを受信したことを確認します。

    Azure 関数の [ログ ストリーム] ページを示すスクリーンショット。

次のステップ

この GitHub リポジトリにあるサンプル コードを参照してください。