使用 Kubernetes 上的 Azure 事件方格 將雲端事件路由傳送至 Webhook

在本快速入門中,您會在 Kubernetes 上的事件方格中建立主題、建立主題的訂用帳戶,然後將範例事件傳送至主題以測試案例。

重要

具有 Azure Arc 的 Kubernetes 上的事件方格目前處於公開預覽狀態。 此預覽版本是在沒有服務等級協定的情況下提供,不建議用於生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

必要條件

  1. 連線 Kubernetes 叢集至 Azure Arc
  2. 在 Kubernetes 叢集上安裝事件方格擴充功能。 此延伸模組會將事件方格部署到 Kubernetes 叢集。

建立自定義位置

作為 Azure 位置延伸模組,自定義位置可讓您使用已啟用 Azure Arc 的 Kubernetes 叢集作為部署事件方格等資源的目標位置。 自定義位置代表叢集中的命名空間,而它是主題和事件訂閱部署的位置。 在本節中,您會建立自定義位置。

  1. 宣告下列變數來保存 Azure Arc 叢集、資源群組和自定義位置名稱的值。 將這些語句複製到編輯器、取代值,然後將/貼到bash視窗。

    resourcegroupname="<AZURE RESOURCE GROUP NAME>"
    arcclustername="<AZURE ARC CLUSTER NAME>"
    customlocationname="<CUSTOM LOCATION NAME>"
    
  2. 取得 Azure Arc 連線叢集的資源標識碼。 在執行 命令之前,先更新 Azure Arc 叢集名稱和資源群組參數的值。

    hostresourceid=$(az connectedk8s show -n $arcclustername -g $resourcegroupname --query id -o tsv)    
    
  3. 取得事件方格延伸模組資源標識碼。 此步驟假設您為事件方格延伸模組提供的名稱是 eventgrid-ext。在執行 命令之前,請先更新 Azure Arc 叢集和資源群組名稱。

    clusterextensionid=$(az k8s-extension show --name eventgrid-ext --cluster-type connectedClusters -c $arcclustername -g $resourcegroupname  --query id -o tsv)    
    
  4. 使用上一個步驟中的兩個值建立自定義位置。 在執行 命令之前,請先更新自定義位置和資源組名。

    az customlocation create -n $customlocationname -g $resourcegroupname --namespace arc --host-resource-id $hostresourceid --cluster-extension-ids $clusterextensionid    
    
  5. 取得自定義位置的資源識別碼。 在執行 命令之前,請先更新自定義位置名稱。

    customlocationid=$(az customlocation show -n $customlocationname -g $resourcegroupname --query id -o tsv)    
    

    如需建立自定義位置的詳細資訊,請參閱 在已啟用 Azure Arc 的 Kubernetes 上建立和管理自定義位置。

建立主題

在本節中,您會在上一個步驟中建立的自定義位置中建立主題。 在執行命令之前,請先更新資源群組和事件方格主題名稱。 如果您使用美國東部以外的位置,請更新位置。

  1. 宣告變數以保存主題名稱。

    topicname="<TOPIC NAME>"
    
  2. 執行下列命令以建立主題。

    az eventgrid topic create -g $resourcegroupname --name $topicname --kind azurearc --extended-location-name $customlocationid --extended-location-type customlocation --input-schema CloudEventSchemaV1_0 --location $region    
    

    如需 CLI 命令的詳細資訊,請參閱 az eventgrid topic create

建立訊息端點

建立自定義主題的訂用帳戶之前,請先建立事件訊息的端點。 端點通常會根據事件資料來採取動作。 若要簡化此快速入門,請部署預先建置的 Web 應用程式以顯示事件訊息。 部署的解決方案包括 App Service 方案、App Service Web 應用程式,以及 GitHub 的原始程式碼。

  1. 在文章頁面中,選取 [部署至 Azure ] 以將解決方案部署至您的訂用帳戶。 在 Azure 入口網站中,提供參數的值。

    Button to deploy the Resource Manager template to Azure.

  2. 部署需要幾分鐘的時間才能完成。 成功部署之後,檢視 Web 應用程式,確定它正在執行。 在網頁瀏覽器中,瀏覽至:https://<your-site-name>.azurewebsites.net

    如果部署失敗,請檢查錯誤訊息。 可能是因為網站名稱已經採用。 再次部署範本,併為月臺選擇不同的名稱。

  3. 您看到網站,但其中尚未發佈任何事件。

    View new site

建立訂用帳戶

訂閱者可以註冊發佈至主題的事件。 若要接收任何事件,您必須為感興趣的主題建立事件方格訂用帳戶。 事件訂用帳戶會定義傳送這些事件的目的地。 若要了解支援的所有目的地或處理程式,請參閱 事件處理程式

若要使用 WebHook (HTTPS 端點) 目的地建立事件訂閱,請輸入事件訂閱的名稱、更新網站的名稱,然後執行下列命令。

topicid=$(az eventgrid topic show --name $topicname --resource-group $resourcegroupname --query id -o tsv)
az eventgrid event-subscription create --name <EVENT SUBSCRIPTION NAME> --source-resource-id $topicid --endpoint https://<SITE NAME>.azurewebsites.net/api/updates

如需 CLI 命令的詳細資訊,請參閱 az eventgrid event-subscription create

將事件傳送至主題

  1. 執行下列命令以取得主題的端點:複製並貼上命令之後,請先更新主題名稱和資源組名,再執行命令。 您會將範例事件發佈至本主題端點。

    az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv
    
  2. 執行下列命令以取得自定義主題的金鑰:複製並貼上命令之後,請先更新主題名稱和資源組名,再執行命令。 這是主題的主鍵。 若要從 Azure 入口網站 取得此金鑰,請切換至 [事件方格主題] 頁面的 [存取密鑰] 索引標籤。 若要將事件張貼至自定義主題,您需要存取金鑰。

    az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv
    
  3. 執行下列 Curl 命令來張貼事件。 在執行命令之前,請先指定步驟 1 和 2 中的端點 URL 和密鑰。

    curl  -k -X POST -H "Content-Type: application/cloudevents-batch+json" -H "aeg-sas-key: <KEY_FROM_STEP_2>" -g <ENDPOINT_URL_FROM_STEP_1> \
    -d  '[{ 
          "specversion": "1.0",
          "type" : "orderCreated",
          "source": "myCompanyName/us/webCommerceChannel/myOnlineCommerceSiteBrandName",
          "id" : "eventId-n",
          "time" : "2020-12-25T20:54:07+00:00",
          "subject" : "account/acct-123224/order/o-123456",
          "dataSchema" : "1.0",
          "data" : {
             "orderId" : "123",
             "orderType" : "PO",
             "reference" : "https://www.myCompanyName.com/orders/123"
          }
    }]'
    

    如果步驟 1 的主題端點 URL 是私人 IP 位址,例如當 Event Grid Broker 的服務類型為 ClusterIP 時,您可以從叢集中的另一個 Pod 執行 Curl ,以存取該 IP 位址。 例如,您可以執行下列步驟:

    1. 使用下列組態建立指令清單檔。 您可能要根據需求調整 dnsPolicy 。 如需詳細資訊,請參閱 Services 和 Pod 的 DNS。

      apiVersion: v1
      kind: Pod
      metadata:
          name: test-pod2
      spec:
          containers:
            - name: nginx
              image: nginx
          hostNetwork: true
          dnsPolicy: ClusterFirstWithHostNet       
      
    2. 建立 Pod。

          kubectl apply -f <name_of_your_yaml_manifest_file>
      
    3. 確認 Pod 正在執行。

          kubectl get pod test-pod
      
    4. 從容器啟動殼層會話

          kubectl exec --stdin --tty test-pod -- /bin/bash
      

    此時,您有叢集中執行中容器的殼層會話,您可以從中執行 先前步驟中所述的 Curl 命令。

    注意

    若要瞭解如何使用程式設計語言傳送雲端事件,請參閱下列範例:

在事件方格查看器中確認

您已觸發此事件,而 Event Grid 會將訊息傳送至您在訂閱時設定的端點。 檢視您的 Web 應用程式,以查看您剛剛傳送的事件。

View received event in Event Grid Viewer

下一步

請參閱以下文章: