共用方式為


使用存取金鑰將事件發佈至 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 取得自訂主題的端點,請使用:

您可以在 Azure 入口網站中 [事件方格主題] 頁面的 [概觀] 索引標籤中找到主題的端點。

顯示 Azure 入口網站上 [事件方格主題] 頁面的螢幕擷取畫面,其中已醒目提示主題端點。

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

若要取得自訂主題的存取金鑰,請選取 Azure 入口網站中 [事件方格主題] 頁面上的 [存取金鑰] 索引標籤。

螢幕擷取畫面,其中顯示 Azure 入口網站上 [事件方格] 主題頁面的 [存取金鑰] 索引標籤。

事件資料

對於自訂主題,最上層的資料包含與標準資源定義事件相同的欄位。 其中一個屬性是 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"
}]

傳送此範例事件

本節說明如何將範例事件傳送至自訂主題。

  1. Azure 入口網站中啟動 Cloud Shell。

  2. 在 Cloud Shell 中,在 BashPowerShell 工作階段中,從 Azure PowerShell 或 Azure CLI 執行此命令。

    螢幕擷取畫面,其中顯示在 Azure 入口網站的 Cloud Shell。

回應

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

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

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

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