共用方式為


在 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 入口網站中,提供參數的值。

    將 Resource Manager 範本部署至 Azure 的按鈕。

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

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

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

    檢視新網站

建立訂用帳戶

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

若要使用 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 位址 (例如,當事件方格訊息代理程式的服務類型為 ClusterIP 時),您可以從叢集的另一個 Pod 執行 Curl,以存取該 IP 位址。 例如,您可以執行下列步驟︰

    1. 使用下列設定來建立資訊清單檔。 建議您根據自己的需求來調整 dnsPolicy。 如需詳細資訊,請參閱適用於服務與 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 應用程式,以查看您剛剛傳送的事件。

在事件方格檢視器中檢視收到的事件

下一步

請參閱以下文章: