本文提供逐步指示,以 CloudEvents JSON 格式 將事件發佈至 Azure 事件方格,並使用推送傳遞模型傳遞這些事件。 具體來說,您可以使用 Azure CLI 和 Curl 將事件發佈至事件方格中的命名空間主題,並將這些事件從事件訂用帳戶推送至事件中樞處理程式目的地。 如需推送傳遞模型的詳細資訊,請參閱 推送傳遞概觀。
備註
Azure CLI 事件方格擴充 功能尚不支援命名空間及其包含的任何資源。 我們將使用 Azure CLI 資源 來建立事件方格資源。
如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶 。
先決條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 如果您正在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用本機安裝,請使用
az login命令登入 Azure CLI。 若要完成驗證程式,請遵循終端機中顯示的步驟。 如需其他登入選項,請參閱使用 Azure CLI 登入。出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
本文需要 2.0.70 版或更新版本的 Azure CLI。 如果使用 Azure Cloud Shell,則已安裝最新版本。
啟用事件方格資源提供者
如果這是您第一次在 Azure 訂用帳戶中使用事件方格,您可能需要註冊 Event Grid 資源提供者。 執行下列命令以註冊提供者:
az provider register --namespace Microsoft.EventGrid可能需要一點時間才能完成註冊。 若要檢查狀態,請執行下列命令:
az provider show --namespace Microsoft.EventGrid --query "registrationState"當
registrationState是Registered時,就可以繼續。
建立資源群組
使用 az group create 命令來建立 Azure 資源群組。 您可以使用此資源群組來包含本文中建立的所有資源。
使用 Cloud Shell 執行命令的一般步驟如下:
- 選取 [開啟 Cloud Shell ],以查看右窗格中的 [Azure Cloud Shell] 視窗。
- 複製 命令並貼到 Azure Cloud Shell 視窗中。
- 按 ENTER 鍵,執行此命令。
宣告變數以保存 Azure 資源群組的名稱。 請將
<your-resource-group-name>替換為您喜歡的值,以指定資源群組的名稱。resource_group="<your-resource-group-name>"location="<your-resource-group-location>"建立資源群組。 視需要變更位置。
az group create --name $resource_group --location $location
建立命名空間
事件方格命名空間會提供您張貼事件的使用者定義端點。 下列範例會使用 Azure Cloud Shell 中的 Bash,在您的資源群組中建立命名空間。 命名空間名必須是唯一的,因為它是域名系統 (DNS) 條目的一部分。 命名空間名稱應符合下列規則:
- 它應該介於 3-50 個字元之間。
- 它應該是區域唯一的。
- 只有允許的字元是 a-z、A-Z、0-9 和 -
- 它不應以保留的關鍵詞前置詞
Microsoft、System或EventGrid開頭。
宣告變數來保存事件方格命名空間的名稱。 將
<your-namespace-name>替換為您喜歡的值,以指定命名空間的名稱。namespace="<your-namespace-name>"建立命名空間。 您可能想要變更其部署位置。
az eventgrid namespace create -g $resource_group -n $namespace -l $location
建立命名空間主題
建立主題,用來保存發佈至命名空間端點的所有事件。
宣告變數來保存命名空間主題的名稱。 將
<your-topic-name>替換為您喜歡的值,以指定命名空間主題的名稱。topic="<your-topic-name>"建立命名空間主題:
az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace
建立新的事件中樞資源
建立事件中樞資源,以用作命名空間主題推送傳遞訂用帳戶的處理常式目的地。
宣告變數來保存事件中樞命名空間名稱。
eventHubsNamespace="<your-event-hubs-namespace-name>"建立事件中樞命名空間。
az eventhubs namespace create --resource-group $resource_group --name $eventHubsNamespace --location $location宣告變數以保存事件中樞名稱。
eventHubsEventHub="<your-event-hub-name>"執行下列命令,以在 命名空間中建立事件中樞。
az eventhubs eventhub create --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub
使用受控識別將事件傳遞至事件中樞
若要使用受控識別將事件傳遞至事件中樞命名空間中的事件中樞,請遵循下列步驟:
- 啟用系統指派或使用者指派的受控識別: 命名空間。 繼續閱讀下一節,以瞭解如何使用 Azure CLI 啟用受控識別。
- 將身分識別新增至事件中樞命名空間上的 Azure 事件中樞數據傳送者 角色,繼續閱讀下一節,以尋找如何新增角色指派。
- 在事件中樞命名空間上啟用 [允許信任的 Microsoft 服務略過此防火牆] 設定。
- 設定使用事件中樞作為端點的事件訂用帳戶,以使用系統指派或使用者指派的受控識別。
在事件方格命名空間中啟用受控識別
在事件方格命名空間中啟用系統指派的受控識別。
az eventgrid namespace update --resource-group $resource_group --name $namespace --identity {type:systemassigned}
在事件中樞新增事件方格受控識別的角色指派
取得事件方格命名空間系統受控識別主體識別碼。
principalId=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query identity.principalId -o tsv)取得事件中樞事件的中樞資源識別碼。
eventHubResourceId=$(az eventhubs eventhub show --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub --query id -o tsv)在事件中樞新增事件方格系統受控識別的角色指派。
az role assignment create --role "Azure Event Hubs Data Sender" --assignee $principalId --scope $eventHubResourceId
建立事件訂閱
建立新的推送傳遞事件訂用帳戶。
event_subscription="<your_event_subscription_name>"
az resource create --api-version 2023-06-01-preview --resource-group $resource_group --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $event_subscription --parent namespaces/$namespace/topics/$topic --location $location --properties "{\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"maxDeliveryCount\":10,\"deliveryWithResourceIdentity\":{\"identity\":{\"type\":\"SystemAssigned\"},\"destination\":{\"endpointType\":\"EventHub\",\"properties\":{\"resourceId\":\"$eventHubResourceId\"}}}}}}"
將事件傳送至您的主題
現在,依照本節中的步驟,將範例事件傳送至命名空間主題。
列出命名空間存取金鑰
取得與您建立之命名空間相關聯的存取金鑰。 您可以在發佈事件時使用其中一個來進行驗證。 若要列出金鑰,您必須先取得完整的命名空間資源識別碼。 執行下列命令以取得它:
namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)從命名空間取得第一個索引鍵:
key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
發佈事件
擷取命名空間主機名。 您使用它來組成傳送事件用的命名空間 HTTP 端點。 下列作業在 API 版本
2023-06-01-preview首次提供。publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview建立符合 CloudEvents 規範事件的 範例:
event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} 'data元素是您事件的負載。 任何語式正確的 JSON 都可以進入這個欄位。 如需可在事件中執行之屬性(也稱為內容屬性)的詳細資訊,請參閱 CloudEvents 規格。使用 CURL 將事件傳送至主題。 CURL 是可傳送 HTTP 要求的公用程式。
curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri流覽至 Azure 入口網站中的 [ 事件中樞命名空間] 頁面 ,重新整理頁面,並確認圖表中的傳入訊息計數器指出已收到事件。
後續步驟
在本文中,您已建立並設定事件方格命名空間和事件中樞資源。 如需從事件中樞接收事件的逐步說明,請參閱下列教程: