教學課程:使用自定義主題將 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 函式進行測試。
建立事件方格主題 (自訂主題)
在此步驟中,您會建立事件方格主題。
- 將文稿複製並貼到編輯器。
- 取代下列值。
- 選取 [ 開啟 Cloud Shell]。
- 從 PowerShell 切換至 Bash (在 Cloud Shell 視窗左上角)。
- 將腳本從編輯器複製並貼到 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 訊息的指示:
- 建立事件方格命名空間。
- 建立兩個用戶端。
- 建立主題空間。
- 建立發行者和訂閱者許可權系結。
- 使用 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 應用程式發佈、訂閱訊息一文中的指示,將一些測試訊息傳送至事件方格命名空間。
以下是事件或訊息的流程:
後續步驟
請參閱此 GitHub 存放庫中的程式代碼範例。