回應 Blob 儲存體事件

Azure 儲存體事件可讓應用程式回應事件,例如建立和刪除 Blob。 它不需要複雜的程式碼或昂貴且無效率的輪詢服務來執行此動作。 最大的好處是,您只需依據使用量付費。

Blob 儲存體事件可使用 Azure 事件方格推送給訂閱者,例如 Azure Functions、Azure Logic Apps,甚或您自己的 HTTP 接聽程式。 事件方格可透過多種重試原則和無效信件處理,對您的應用程式提供可靠的事件傳遞。

請參閱 Blob 儲存體事件結構描述一文,以檢視 Blob 儲存體所支援之事件的完整清單。

常見的 Blob 儲存體事件案例包括映像或影片處理、搜尋索引,或任何檔案導向的工作流程。 非同步檔案上傳非常適合事件。 在變更不常見但情況需要立即回應的情況下,以事件為基礎的架構可能特別有效。

如果您想要嘗試 Blob 儲存體事件,請參閱下列任何快速入門文章:

如果您想要使用此工具: 請參閱此文章:
Azure 入口網站 快速入門:使用 Azure 入口網站將 Blob 儲存體事件路由傳送至 Web 端點
PowerShell 快速入門:使用 PowerShell 將儲存體事件路由至 Web 端點
Azure CLI 快速入門:使用 Azure CLI 將儲存體事件路由至 Web 端點

若要檢視使用 Azure 函式來回應 Blob 儲存體事件的深入範例,請參閱下列文章:

注意

Storage (一般用途 v1)支援與 Event Grid 整合。

事件模型

事件方格會使用事件訂用帳戶將事件訊息路由至訂閱者。 此圖說明事件發行者、事件訂用帳戶與事件處理常式之間的關聯性。

事件方格模型

首先,為端點訂閱事件。 然後,當事件觸發時,事件方格服務會將該事件的相關資料傳送至端點。

請參閱 Blob 儲存體事件結構描述一文以檢視:

  • Blob 儲存體事件的完整清單,以及每個事件的觸發方式。

  • 事件方格會為每個事件傳送的資料範例。

  • 出現在資料中的每個索引鍵/值組的用途。

篩選事件

Blob 事件可以篩選,可用的篩選依據包括事件類型、容器名稱、建立/刪除之物件的名稱。 事件方格中的篩選條件會比對主旨的開頭或結尾,讓具有相符主旨的事件傳送至訂閱者。

若要深入瞭解如何套用篩選,請參閱事件方格的篩選事件

Blob 儲存體事件的主體使用格式:

/blobServices/default/containers/<containername>/blobs/<blobname>

若要比對儲存體帳戶的所有事件,您可以將主體篩選條件保留空白。

若要比對建立於共用前置詞的一組容器之 Blob 事件,請使用 subjectBeginsWith 篩選條件,例如:

/blobServices/default/containers/containerprefix

若要比對建立於特定容器之 Blob 事件,請使用 subjectBeginsWith 篩選條件,例如:

/blobServices/default/containers/containername/

若要比對建立於共用 Blob 名稱前置詞的特定容器之 Blob 事件,請使用 subjectBeginsWith 篩選條件,例如:

/blobServices/default/containers/containername/blobs/blobprefix

若要比對建立於共用 Blob 名稱前置詞的特定容器之 Blob 事件,請使用 subjectEndsWith 篩選條件,例如 ".log" 或 ".jpg"。 如需詳細資訊,請參閱 Event Grid 概念

消費事件做法

處理 Blob 儲存體事件的應用程式應該遵循幾個建議做法:

  • 由於可設定多個訂用帳戶以將事件路由至相同的事件處理常式,因此重要的是,不要假設事件來自於特定來源,而要檢查訊息主題以確定其來自預期的儲存體帳戶。

  • 同樣地,檢查 eventType 也是必須進行的步驟之一,而且不要假設您收到的所有事件都是您預期的類型。

  • 雖然大部分訊息會近乎即時地送達,但訊息送達所需的時間周圍並沒有服務等級協定。 在某些情況下,訊息可能需要幾分鐘的時間才會送達。 由於訊息可能會在延遲一段時間後送達,請使用 [etag] 欄位以了解您的物件資訊是否仍是最新狀態。 若要了解如何使用 etag 欄位,請參閱管理 Blob 儲存體中的並行存取

  • 訊息有可能以錯誤的順序送達,請使用 [排序器] 欄位了解任何特定物件的事件順序。 [排序器] 欄位是字串值,表示任何特定 Blob 名稱之事件的邏輯順序。 您可以使用標準字串比較,以了解 Blob 名稱相同之兩個事件的相對順序。

  • 儲存體事件可保證至少會向訂閱者傳遞一次,以確保所有訊息都會輸出。 不過,由於後端節點和服務之間的重試或訂用帳戶的可用性,可能會出現重複的訊息。 若要深入了解訊息傳遞和重試,請參閱事件方格訊息傳遞和重試

  • 請使用 [blobType] 欄位以了解 Blob 允許何種類型的作業,以及您應該使用何種類型的用戶端程式庫來存取 Blob。 有效值為 BlockBlobPageBlob

  • 請使用帶有 CloudBlockBlobCloudAppendBlob 建構函式的 [url] 欄位存取 Blob。

  • 請忽略您不了解的欄位。 此做法將有助於保持未來可能新增功能的彈性。

  • 如果您想要確保只有在完全認可區塊 Blob 時才會觸發 Microsoft.Storage.BlobCreated 事件,請篩選 CopyBlobPutBlobPutBlockListFlushWithClose REST API 呼叫的事件。 只有在資料完全認可至區塊 Blob 之後,這些 API 呼叫才會觸發 Microsoft.Storage.BlobCreated 事件。 若要了解如何建立篩選,請參閱 Event Grid 的篩選事件

功能支援

啟用 Data Lake Storage Gen2、網路檔案系統 (NFS) 3.0 通訊協定,或 SSH 檔案傳輸通訊協定 (SFTP),可能會影響到此功能的支援。 如果您已啟用上述任何功能,請參閱 Azure 儲存體帳戶中的 Blob 儲存體功能支援,以評估此功能的支援。

下一步

深入了解 Event Grid 並嘗試 Blob 儲存體事件: