快速入門:使用 Azure CLI 透過事件方格將自訂事件路由至 Azure 佇列儲存體

Azure 事件方格是一種高度可調整且無伺服器的事件訊息代理程式,您可以使用事件搭配它來整合應用程式。 事件方格會將事件傳遞至支援的事件處理常式,而 Azure 佇列儲存體就是其中之一。 在本文中,您會使用 Azure CLI 來執行下列步驟:

  1. 建立 Event Grid 自訂主題。
  2. 建立自訂主題的 Azure 佇列訂用帳戶。
  3. 將範例事件傳送至自訂主題。
  4. 確認這些事件已傳遞至 Azure 佇列儲存體。

如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶

建立資源群組

Event Grid 為 Azure 資源,必須放入 Azure 資源群組中。 資源群組是在其中部署與管理 Azure 資源的邏輯集合。

使用 az group create 命令來建立資源群組。 下列範例會在 westus2 位置建立名為 gridResourceGroup 的資源群組。

注意

選取 CLI 範例旁邊的 [試用],在右窗格中啟動 Cloud Shell。 選取 [複製] 按鈕以複製命令,並將其貼到 Cloud Shell 視窗中,然後按 ENTER 執行命令。

az group create --name gridResourceGroup --location westus2

啟用事件方格資源提供者

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

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

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

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

建立自訂主題

事件方格主題會提供使用者定義的端點,作為您發佈事件的目的地。 下列範例可在您的資源群組中建立自訂主題。 以自訂主題的唯一名稱取代 <topic_name>。 事件方格主題名稱必須是唯一的,因為它由網域名稱系統 (DNS) 項目表示。

  1. 指定主題的名稱。

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

    az eventgrid topic create --name $topicname -l westus2 -g gridResourceGroup
    

建立佇列儲存體

訂閱自訂主題之前,讓我們建立事件訊息的端點。 您將建立佇列儲存體來收集事件。

  1. 為 Azure 儲存體帳戶輸入唯一名稱。

    storagename="<STORAGE ACCOUNT NAME>"    
    
  2. 執行下列命令以在儲存體中建立 Azure 儲存體帳戶和佇列 (名為 eventqueue)。

    queuename="eventqueue"
    
    az storage account create -n $storagename -g gridResourceGroup -l westus2 --sku Standard_LRS
    key="$(az storage account keys list -n $storagename --query "[0].{value:value}" --output tsv)"    
    az storage queue create --name $queuename --account-name $storagename --account-key $key
    

訂閱自訂主題

下列範例可訂閱您所建立的自訂主題,以及傳遞端點的佇列儲存體資源識別碼。 利用 Azure CLI,您可以傳遞佇列儲存體識別碼作為端點。 端點的格式如下:

/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP NAME>/providers/Microsoft.Storage/storageAccounts/<STORAGE ACCOUNT NAME>/queueservices/default/queues/<QUEUE NAME>

下列指令碼會取得佇列的儲存體帳戶資源識別碼。 它會建構佇列儲存體的識別碼,並訂閱事件方格主題。 並將端點類型設為 storagequeue,然後使用端點的佇列識別碼。

重要

以實際值取代到期日預留位置 (<yyyy-mm-dd>)。 例如:在執行命令之前 2022-11-17

storageid=$(az storage account show --name $storagename --resource-group gridResourceGroup --query id --output tsv)
queueid="$storageid/queueservices/default/queues/$queuename"
topicid=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name mystoragequeuesubscription \
  --endpoint-type storagequeue \
  --endpoint $queueid \
  --expiration-date "<yyyy-mm-dd>"

建立事件訂用帳戶的帳戶必須具有佇列儲存體的寫入權限。 請留意到已針對訂閱設定到期日

如果您使用 REST API 來建立訂用帳戶時,可以傳遞儲存體帳戶的識別碼和佇列的名稱作為個別參數。

"destination": {
  "endpointType": "storagequeue",
  "properties": {
    "queueName":"eventqueue",
    "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-name>"
  }
  ...

將事件傳送至您的自訂主題

讓我們觸發事件以了解 Event Grid 如何將訊息散發至您的端點。 首先,讓我們取得自訂主題的 URL 和金鑰。

endpoint=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicname -g gridResourceGroup --query "key1" --output tsv)

若要簡化這篇文章,您可使用要傳送至自訂主題的範例事件資料。 一般而言,應用程式或 Azure 服務就會傳送事件資料。 CURL 是可傳送 HTTP 要求的公用程式。 在本文中,您會使用 CURL 將事件傳送到自訂主題。 下列範例會將三個事件傳送至事件方格主題:

for i in 1 2 3
do
   event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
   curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
done

請在入口網站中瀏覽至佇列,並注意事件方格會傳送這三個事件至佇列。

Screenshot showing the list of messages in the queue that are received from Event Grid.

清除資源

如果您打算繼續使用此事件,請勿清除在本文中建立的資源。 否則,請使用下列命令來刪除您在本文建立的資源。

az group delete --name gridResourceGroup

下一步

您現在知道如何建立主題和事件訂閱,深入了解 Event Grid 可協助您:

請參閱下列範例,了解如何使用不同的程式設計語言,將事件發佈至事件方格,以及從事件方格取用事件。