使用命名空間主題將事件傳遞至 Azure 事件中樞 - Azure CLI (預覽)

本文提供將事件發佈至 CloudEvents JSON 格式 Azure 事件方格 並使用推送傳遞模型傳遞這些事件的逐步指示。 具體來說,您可以使用 Azure CLI 和 Curl 將事件發佈至事件方格中的命名空間主題,並將這些事件從事件訂用帳戶推送至事件中樞處理程式目的地。 如需推送傳遞模型的詳細資訊,請參閱 推送傳遞概觀

注意

  • 命名空間、命名空間主題和與命名空間主題相關聯的事件訂用帳戶一開始可在下列區域中使用:美國東部、美國中部、美國中南部、美國西部 2、東亞、東南亞、北歐、西歐、阿聯酋北部。
  • Azure CLI 事件方格擴充 功能尚不支援命名空間及其包含的任何資源。 我們將使用 Azure CLI 資源 來建立事件方格資源。
  • Azure 事件方格 命名空間目前支援共用存取簽章 (SAS) 令牌和存取金鑰驗證。

如果您沒有 Azure 訂閱,請在開始之前,先建立 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,就已安裝最新版本。

啟用事件方格資源提供者

  1. 如果您先前在 Azure 訂用帳戶中從未使用過事件方格,可能必須註冊事件方格資源提供者。 執行下列命令以註冊提供者:

    az provider register --namespace Microsoft.EventGrid
    
  2. 可能需要一點時間才能完成註冊。 若要查看狀態,請執行下列命令:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    registrationStateRegistered 時,代表已準備好繼續進行。

建立資源群組

使用 az group create 命令來建立 Azure 資源群組。 您可以使用此資源群組來包含本文中建立的所有資源。

使用 Cloud Shell 執行命令的一般步驟如下:

  • 選取 [ 開啟 Cloud Shell ],以查看右窗格中的 [Azure Cloud Shell] 視窗。
  • 複製 命令並貼到 Azure Cloud Shell 視窗中。
  • 按 Enter 鍵以執行命令。
  1. 宣告變數以保存 Azure 資源群組的名稱。 將 取代 <your-resource-group-name> 為您喜歡的值,以指定資源群組的名稱。

    resource_group="<your-resource-group-name>"
    
    location="<your-resource-group-location>"
    
  2. 建立資源群組。 視需要變更位置。

    az group create --name $resource_group --location $location
    

建立命名空間

事件方格命名空間會提供您張貼事件的使用者定義端點。 下列範例會使用 Azure Cloud Shell 中的 Bash,在您的資源群組中建立命名空間。 命名空間名稱必須是唯一的,因為它是域名系統 (DNS) 專案的一部分。 命名空間名稱應符合下列規則:

  • 它應該介於 3-50 個字元之間。
  • 它應該是區域唯一的。
  • 只有允許的字元是 a-z、A-Z、0-9 和 -
  • 它不應該以、 或 EventGridMicrosoftSystem保留的關鍵詞前置詞開頭。
  1. 宣告變數來保存事件方格命名空間的名稱。 將 取代 <your-namespace-name> 為您想要的值,以指定命名空間的名稱。

    namespace="<your-namespace-name>"
    
  2. 建立命名空間。 您可能想要變更其部署位置。

    az eventgrid namespace create -g $resource_group -n $namespace -l $location
    

建立命名空間主題

建立主題,用來保存發佈至命名空間端點的所有事件。

  1. 宣告變數來保存命名空間主題的名稱。 將 取代 <your-topic-name> 為您喜歡的值,以指定命名空間主題的名稱。

    topic="<your-topic-name>"
    
  2. 建立命名空間主題:

    az eventgrid namespace topic create -g $resource_group -n $topic --namespace-name $namespace 
    

建立新的事件中樞資源

建立事件中樞資源,做為命名空間主題推送傳遞訂用帳戶的處理程式目的地。

  1. 宣告變數來保存事件中樞命名空間名稱。

    eventHubsNamespace="<your-event-hubs-namespace-name>"
    
  2. 建立事件中樞命名空間。

    az eventhubs namespace create --resource-group $resource_group --name $eventHubsNamespace --location $location  
    
  3. 宣告變數以保存事件中樞名稱。

    eventHubsEventHub="<your-event-hub-name>"
    
  4. 執行下列命令,以在 命名空間中建立事件中樞。

    az eventhubs eventhub create --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub 
    

使用受控識別將事件傳遞至事件中樞

若要使用受控識別將事件傳遞至事件中樞命名空間中的事件中樞,請遵循下列步驟:

  1. 啟用系統指派或使用者指派的受控識別: 命名空間。 繼續閱讀下一節,以瞭解如何使用 Azure CLI 啟用受控識別。
  2. 將身分識別新增至事件中樞命名空間上的 Azure 事件中樞 數據傳送者角色,繼續閱讀下一節,以尋找如何新增角色指派。
  3. 在事件中樞命名空間上啟用 [允許信任的 Microsoft 服務略過此防火牆] 設定
  4. 設定使用事件中樞作為端點的事件訂用帳戶,以使用系統指派或使用者指派的受控識別。

注意

將事件傳遞至 Azure 事件中樞 目前處於預覽狀態。

在事件方格命名空間中啟用受控識別

在事件方格命名空間中啟用系統指派的受控識別。

az eventgrid namespace update --resource-group $resource_group --name $namespace --identity {type:systemassigned}

在事件中樞中新增事件方格受控識別的角色指派

  1. 取得事件方格命名空間系統受控識別主體標識碼。

    principalId=$(az eventgrid namespace show --resource-group $resource_group --name $namespace --query identity.principalId -o tsv)
    
  2. 取得事件中樞事件中樞資源標識符。

    eventHubResourceId=$(az eventhubs eventhub show --resource-group $resource_group --namespace-name $eventHubsNamespace --name $eventHubsEventHub --query id -o tsv)
    
  3. 在事件中樞中新增事件方格系統受控識別的角色指派。

    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\"}}}}}}"

將事件傳送至您的主題

現在,依照本節中的步驟,將範例事件傳送至命名空間主題。

列出命名空間存取金鑰

  1. 取得與您建立之命名空間相關聯的存取金鑰。 您可以在發佈事件時使用其中一個來進行驗證。 若要列出金鑰,您必須先取得完整的命名空間資源識別碼。 執行下列命令以取得它:

    namespace_resource_id=$(az eventgrid namespace show -g $resource_group -n $namespace --query "id" --output tsv)
    
  2. 從命名空間取得第一個索引鍵:

    key=$(az eventgrid namespace list-key -g $resource_group --namespace-name $namespace --query "key1" --output tsv)
    

發佈事件

  1. 擷取命名空間主機名。 您可以使用它來撰寫傳送事件的命名空間 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
    
  2. 建立符合 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 規格。

  3. 使用 CURL 將事件傳送至主題。 CURL 是可傳送 HTTP 要求的公用程式。

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

    流覽至 Azure 入口網站 中的 [事件中樞命名空間] 頁面,重新整理頁面,並確認圖表中的傳入訊息計數器指出已收到事件。

    顯示事件中樞頁面的螢幕快照,其中顯示已收到事件的圖表。

下一步

在本文中,您已建立並設定事件方格命名空間和事件中樞資源。 如需從事件中樞接收事件的逐步指示,請參閱下列教學課程: