使用 access keys 將事件發佈到 Azure 事件方格 自訂主題

Event Grid 自訂主題是應用程式傳送事件的端點,讓 Event Grid 能將這些事件路由給有興趣的訂閱者。 本文將教你如何利用存取金鑰將事件發佈到自訂主題,這些金鑰在不需設定 Microsoft Entra ID 的情況下驗證你的請求。 你會取得主題端點和存取鍵,格式化事件有效載荷,傳送範例事件,然後審查回應。

服務水準協議(SLA)僅適用於符合預期格式的貼文。

先決條件

注意

Microsoft Entra 認證提供比存取金鑰或共享存取簽章(SAS)令牌認證更好的認證支援。 透過使用 Microsoft Entra 認證,Microsoft Entra 身份提供者會驗證身份,因此你不必處理程式碼中的金鑰。 你也能受益於 Microsoft 身分識別平台 內建的安全功能,例如條件存取(Conditional Access),有助於提升應用程式的安全性。 如需詳細資訊,請參閱使用 Microsoft Entra ID 驗證發佈用戶端。

取得主題端點

若要將事件發佈到自訂主題,請使用以下 URI 格式發送 HTTP POST 請求: https://<topic-endpoint>?api-version=2018-01-01 例如,https://exampletopic.westus2-1.eventgrid.azure.net/api/events?api-version=2018-01-01 便是有效的 URI。 要取得自訂主題的端點,請使用 Azure portal、Azure CLI 或 Azure PowerShell。

在 Azure 入口網站事件網格主題頁面的概覽標籤中找到該主題的端點。

Azure 入口網站中事件網格主題頁面的截圖,主題端點被高亮標示。

取得存取金鑰

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

要取得自訂主題的存取金鑰,請在 Azure 入口網站的事件網格主題頁面選擇存取鍵標籤。

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

格式化事件酬載

將每個事件格式化為 JSON 物件。 頂層欄位與標準的資源定義事件相同,屬性 data 包含你自訂主題獨有的屬性。 作為發佈者,你定義了物件的內容 data 。 關於每個屬性的說明,請參見 Azure 事件方格 事件結構。

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

在建造有效載荷時,請考慮以下尺寸限制:

  • 事件陣列的總大小可達 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 中,在 Bash 或 PowerShell 工作階段中,從 Azure PowerShell 或 Azure CLI 執行此命令。

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

檢視回應

在你發佈到主題端點後,你會收到回覆。 回應是標準的 HTTP 回應碼。 一些常見回應有:

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

對於錯誤,訊息主體採用以下格式:

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