使用存取金鑰將事件發佈至 Azure 事件方格自訂主題

本文說明如何使用存取金鑰將事件張貼到自訂主題。 它會顯示貼文與事件資料的格式。 服務等級協定 (SLA) 只適用於符合預期格式的貼文。

注意

Microsoft Entra 驗證所提供的驗證支援優於存取金鑰或共用存取簽章 (SAS) 權杖驗證所提供的驗證支援。 使用 Microsoft Entra 驗證時,會根據 Microsoft Entra 識別提供者來驗證身分識別。 身為開發人員,如果您使用 Microsoft Entra 驗證,則不需要使用程式碼來處理金鑰。 您也將受益於 Microsoft 身分識別平台內建的所有安全性功能 (例如條件式存取),以協助您改善應用程式的安全性態勢。 如需詳細資訊,請參閱使用 Microsoft Entra ID 驗證發佈用戶端

端點

將 HTTP POST 傳送至自訂主題時,請使用 URI 格式:https://<topic-endpoint>?api-version=2018-01-01。 例如,https://exampletopic.westus2-1.eventgrid.azure.net/api/events?api-version=2018-01-01 便是有效的 URI。 若要使用 Azure CLI 取得自訂主題的端點,請使用:

az eventgrid topic show --name <topic-name> -g <topic-resource-group> --query "endpoint"

若要使用 Azure PowerShell 取得自訂主題的端點,請使用:

(Get-AzEventGridTopic -ResourceGroupName <topic-resource-group> -Name <topic-name>).Endpoint

在要求中,包含名為 aeg-sas-key 的標頭值,其中包含用於驗證的金鑰。 例如,有效的標頭值為 aeg-sas-key: xxxxxxxxxxxxxxxxxxxxxxx。 若要使用 Azure CLI 取得自訂主題的索引鍵,請使用:

az eventgrid topic key list --name <topic-name> -g <topic-resource-group> --query "key1"

若要使用 PowerShell 取得自訂主題的索引鍵,請使用:

(Get-AzEventGridTopicKey -ResourceGroupName <topic-resource-group> -Name <topic-name>).Key1

事件資料

對於自訂主題,最上層的資料包含與標準資源定義事件相同的欄位。 其中一個屬性是 data 屬性,其中包含自訂主題特有的屬性。 身為事件發行者,您必須判斷該資料物件的屬性。 以下是結構描述:

[
  {
    "id": string,    
    "eventType": string,
    "subject": string,
    "eventTime": string-in-date-time-format,
    "data":{
      object-unique-to-each-publisher
    },
    "dataVersion": string
  }
]

如需這些屬性的說明,請參閱 Azure Event Grid 事件結構描述。 將事件張貼至事件方格主題時,陣列可包含最多 1 MB 的大小總計。 允許的事件大小上限也是 1 MB。 超過 64 KB 的事件會以 64 KB 遞增計費。 批次接收事件時,每個批次允許的事件數目上限為 5,000。

例如,有效的事件資料結構描述為:

[{
  "id": "1807",
  "eventType": "recordInserted",
  "subject": "myapp/vehicles/motorcycles",
  "eventTime": "2017-08-10T21:03:07+00:00",
  "data": {
    "make": "Ducati",
    "model": "Monster"
  },
  "dataVersion": "1.0"
}]

回應

在張貼到主題端點之後,您會收到回應。 回應是標準的 HTTP 回應碼。 一些常見回應有:

結果 回應
成功 200 OK
事件資料的格式不正確 400 不正確的要求
存取金鑰無效 401 未經授權
端點不正確 404 找不到
陣列或事件超過大小限制 413 檔案太大

對於錯誤,訊息內文的格式如下:

{
    "error": {
        "code": "<HTTP status code>",
        "message": "<description>",
        "details": [{
            "code": "<HTTP status code>",
            "message": "<description>"
    }]
  }
}

下一步