共用方式為


教學課程:使用自訂主題將 Azure 事件方格中的 MQTT 訊息路由傳送至 Azure Functions - Azure CLI

在本教學課程中,您將瞭解如何遵循下列步驟,透過事件方格自訂主題,將 Azure 事件方格命名空間所接收的 MQTT 訊息路由傳送至 Azure 函式:

如果您沒有 Azure 訂用帳戶,您可以註冊 免費試用版。

先決條件

請遵循使用 Visual Studio Code 建立 Azure 函式中的指示,但使用 Azure 事件方格觸發程序 ,而不是使用 HTTP 觸發程序。 您應該會看到類似下列範例的程式碼:

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 函式作為主題訂用帳戶的事件處理常式。

備註

  • 在相同區域中建立所有資源。
  • 本教學課程已使用採用 .NET 8.0 隔離執行階段堆疊的 Azure 函式進行測試。

建立事件方格主題 (自訂主題)

在此步驟中,您會建立事件方格主題。

  1. 將指令碼複製並貼到編輯器。
  2. 取代下列值。
  3. 選取 [開啟 Cloud Shell]。
  4. PowerShell 切換至 Bash (位於 Cloud Shell 視窗的左上角)。
  5. 將指令碼從編輯器複製並貼到 Cloud Shell,然後執行指令碼。

腳本會在其中建立 Azure 資源群組和事件方格自訂主題。 在本教學課程稍後,您會設定事件網格命名空間的路由,讓傳送至命名空間的事件或訊息被路由至自訂主題,然後通過訂閱該主題路由至 Azure 函式。

Placeholder Description
RESOURCEGROUPNAME 要建立的資源群組名稱。
REGION 您要在其中建立資源群組和自訂主題的區域。
TOPICNAME 要建立的自訂主題名稱。

腳本會使用命令 az eventgrid topic create 來建立事件方格主題或自訂主題。 結構描述類型會指定為雲端事件結構描述。

rgName="RESOURCEGROUPNAME"
location="REGION"
topicName="TOPICNAME"

az group create -n $rgName -l $location

az eventgrid topic create --name $topicName -l $location -g $rgName --input-schema cloudeventschemav1_0

備註

在本教學課程中,隨處使用 雲端事件結構描述

使用函數將訂閱新增至主題

在此步驟中,您會使用稍早建立的 Azure 函式來建立自訂主題的訂用帳戶。

取代下列值,並在 Cloud Shell 中執行指令碼。 指令碼會使用命令 az eventgrid event-subscription create 來建立自訂主題的 Azure 函式訂用帳戶。 在命令中,來源 ID 是主題的資源 ID,端點是函數的資源 ID。 端點類型會設定為 Azure 函式,而事件傳遞結構描述會指定為雲端事件結構描述。

Placeholder Description
FUNCTIONRESOURCEGROUP 具有 Azure Functions 應用程式的資源群組名稱。
FUNCTIONSAPPNAME Azure Functions 應用程式的名稱。
FUNCTIONNAME Azure 函式的名稱。
funcAppRgName="FUNCTIONRESOURCEGROUP"
funcAppName="FUNCTIONSAPPNAME"
funcName="FUNCTIONNAME"
funcResourceId=$(az functionapp function show -g $funcAppRgName -n $funcAppName --function-name $funcName --query "{I:id}" -o tsv)

topicResourceId=$(az eventgrid topic show --name $topicName -g $rgName --query id --output tsv)
eventSubscriptionName="EVENTSUBSCRIPTIONNAME"
az eventgrid event-subscription create --name $eventSubscriptionName --source-resource-id $topicResourceId  --endpoint-type azurefunction --endpoint $funcResourceId --event-delivery-schema cloudeventschemav1_0

建立命名空間、用戶端、主題空間和權限繫結

請遵循 快速入門中的指示:使用 Azure CLI 在事件方格命名空間上發佈和訂閱 MQTT 訊息 ,以:

  1. 建立事件方格命名空間。
  2. 建立兩個用戶端。
  3. 建立主題空間。
  4. 建立發行者和訂閱者權限繫結。
  5. 使用 MQTTX 應用程式 進行測試,以確認用戶端能夠傳送和接收訊息。

啟用命名空間的受控識別

取代下列值,並執行指令碼,以啟用事件方格命名空間的系統指派受控識別。

Placeholder Description
EVENTGRIDNAMESPACENAME 事件方格命名空間的名稱。

指令碼會使用az eventgrid namespace update命令,並將identity設定為SystemAssigned身分。

nsName="EVENTGRIDNAMESPACENAME"
az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"

然後,將您稍早建立之 Azure 事件方格自訂主題的 [傳送] 權限授與命名空間的受控識別,讓命名空間可以將訊息傳送或路由傳送至自訂主題。 您可以藉由將受控識別新增至自訂主題上的 事件方格資料傳送者 角色來執行此動作。

egNamespaceServicePrincipalObjectID=$(az ad sp list --display-name $nsName --query [].id -o tsv)
topicResourceId=$(az eventgrid topic show --name $topicName -g $rgName --query id --output tsv)
az role assignment create --assignee $egNamespaceServicePrincipalObjectID --role "EventGrid Data Sender" --scope $topicResourceId

腳本使用 az role assignment create 命令及命名空間受控識別和自訂主題的識別碼,將 Event Grid 資料傳送者 角色指派給在自訂主題上的命名空間受控識別。

透過自訂主題設定路由訊息至 Azure 函數

在此步驟中,您會設定事件方格命名空間的路由,使其收到的訊息會路由傳送至您建立的自訂主題。

az eventgrid namespace update -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$topicResourceId,'routingIdentityInfo':{type:SystemAssigned}}"

腳本會使用az eventgrid namespace update命令來設定路由主題,以及設定用來將事件路由至該主題的受控識別類型。

使用 MQTTX 傳送測試 MQTT 訊息

將測試 MQTT 訊息傳送至命名空間,並確認函數收到這些訊息。

請遵循使用 MQTTX 應用程式發佈、訂閱訊息 一文中的指示,將一些測試訊息傳送至事件方格命名空間。

以下是事件或訊息的流程:

  1. MQTTX 會將訊息傳送至事件方格命名空間的主題空間。

  2. 訊息會路由傳送至您設定的自訂主題。

  3. 訊息會轉送至事件訂閱,這是 Azure 的函式。

  4. 使用日誌記錄功能來驗證函數是否已收到事件。

    螢幕擷取畫面,顯示 Azure 函式的 [記錄資料流程] 頁面。

後續步驟

請參閱 此 GitHub 存放庫中的程式碼範例。