Share via


教學課程:使用自定義主題將 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 函式主題。

預留位置 描述
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 函式訂用帳戶。 在命令中,來源標識碼是主題的資源標識符,而端點是函式的資源標識符。 端點類型會設定為 Azure 函式,並將事件傳遞架構指定為雲端事件架構。

預留位置 描述
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 應用程式 進行測試,以確認客戶端能夠傳送和接收訊息。

啟用命名空間的受控識別

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

預留位置 描述
EVENTGRIDNAMESPACENAME 事件方格命名空間的名稱。

腳本會az eventgrid namespace update使用 設定為SystemAssigned身分識別的 命令identity

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

然後,將您稍早建立的事件方格自定義主題的傳送許可權授與命名空間的受控識別,讓命名空間可以將訊息傳送或路由傳送至自定義主題。 您可以在自訂主題上將受控識別新增至 事件方格數據傳送者 角色。

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使用 命令搭配命名空間受控識別和自定義主題的標識碼,並將事件方格數據傳送者角色指派給自定義主題上的命名空間受控識別。

透過自定義主題設定路由訊息至 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 存放庫中的程式代碼範例。