建立一個執行管線的觸發程序來回應儲存體事件

適用於: Azure Data Factory Azure Synapse Analytics

秘訣

Data Factory in Microsoft Fabric 是下一代的 Azure Data Factory,擁有更簡單的架構、內建 AI 及新功能。 如果你是資料整合新手,建議先從 Fabric Data Factory 開始。 現有的 ADF 工作負載可升級至 Fabric,以存取資料科學、即時分析與報告等新能力。

本文說明您可以在 Azure Data Factory 或 Azure Synapse Analytics 管線中建立的儲存事件觸發器。

事件驅動架構是常見的資料整合模式,所涉及的環節包括生產、偵測、取用和事件反應。 資料整合情境通常需要客戶觸發由 Azure 儲存體 帳號事件觸發的管線,例如 Azure Blob 儲存體 帳號中檔案的到達或刪除。 Data Factory 和 Azure Synapse Analytics 管線原生整合 Azure 事件方格,讓你能在這類事件中觸發管線。

儲存體事件觸發程序考量事項

當您使用儲存體事件觸發程序時,請考慮下列幾點:

  • 本文所述的整合取決於Azure 事件方格。 請確認您的訂用帳戶已向事件方格資源提供者註冊。 如需詳細資訊,請參閱資源提供者和類型。 你必須能執行 Microsoft.EventGrid/eventSubscriptions/ 動作。 此動作是 EventGrid EventSubscription Contributor 內建角色的一部分。
  • 如果你在 Azure Synapse Analytics 中使用此功能,請確保你也向 Data Factory 資源提供者註冊訂閱。 否則,您會收到一則訊息,指出「建立事件訂閱失敗」。
  • 如果 Blob 儲存帳戶位於 私人端點 並阻擋公共網路存取,您需要設定網路規則,以允許 Blob 儲存與事件網格之間的通訊。 你可以依照 Storage 文件,授予受信任的 Azure 服務(如事件網格)的儲存存取權,或依據 Event Grid 文件設定私有端點,映射到虛擬網路位址空間。
  • 儲存事件觸發目前僅支援 Azure Data Lake Storage Gen2 及通用版本 2 儲存帳號。 如果您使用安全檔案傳輸通訊協定 (SFTP) 儲存體事件,則也必須在<篩選>區段下指定 SFTP 資料 API。 由於事件方格的限制,Data Factory 只支援每個儲存體帳戶最多 500 個儲存體事件觸發程序。
  • 要建立新的儲存事件觸發器或修改現有的,你用來登入服務並發布儲存事件觸發器的 Azure 帳號必須擁有適當的基於角色的存取控制(Azure RBAC)權限。 不需要任何其他權限。 Azure Data Factory 和 Azure Synapse Analytics 的服務主體不需要對儲存帳號或事件網格擁有特殊權限。 如需存取控制的詳細資訊,請參閱角色型存取控制一節。
  • 如果你對儲存帳號施加了 Azure Resource Manager 鎖定,可能會影響 blob 觸發器建立或刪除 blob 的能力。 ReadOnly 鎖定可防止建立和刪除,而 DoNotDelete 鎖定可防止刪除。 請確定您考慮到這些限制,以避免觸發程序出現任何問題。
  • 不建議使用檔案抵達觸發程序作為資料流程接收的觸發機制。 資料流程會在目標資料夾中執行許多檔案重新命名和分割檔案重新排列工作,這些工作可能會在完成您的資料處理之前不經意地觸發檔案到達事件。

使用 UI 建立觸發程序

本節將展示如何在 Azure Data Factory 與 Azure Synapse Analytics 管線使用者介面(UI)中建立儲存事件觸發器。

  1. 切換到 Data Factory 裡的 Edit 分頁,或是 Azure Synapse Analytics 裡的 Integrate 分頁。

  2. 在功能表上,選取 [觸發程序],然後選取 [新增/編輯]。

  3. 在 [新增觸發程序] 頁面上,選取 [選擇觸發程序],然後選取 [+ 新增]。

  4. 選取觸發程序類型 [儲存體事件]。

  5. 從 Azure 訂閱下拉選單選擇你的儲存帳號,或手動使用儲存帳號資源 ID。 選擇您希望事件發生所在的容器。 選取容器是必要作業,但選取所有容器可能會導致大量的事件。

  6. Blob path begins with 和 Blob path ends with 屬性可讓您指定要收到事件的容器、資料夾和 Blob 名稱。 您的儲存體事件觸發程序至少需要定義其中一個屬性。 您可以針對 Blob path begins with 和 Blob path ends with 屬性使用各種不同的模式,如本文稍後的範例所示。

    • Blob path begins with:Blob 路徑的開頭必須是資料夾路徑。 有效值包括 2018/ 和 2018/april/shoes.csv。 如果未選取容器,就無法選取此欄位。
    • Blob path ends with:Blob 路徑的結尾必須是檔案名稱或副檔名。 有效值包括 shoes.csv 和 .csv。 容器和資料夾名稱若已指定,則必須以 /blobs/ 區段分隔。 例如,名為 orders 的容器可以有 /orders/blobs/2018/april/shoes.csv 值。 若要指定任何容器中的資料夾,請省略前置的 / 字元。 例如,april/shoes.csv 會在任何容器中名為 shoes.csv 的資料夾中對任何名為 april 的檔案觸發事件。

    請注意,Blob path begins with 和 Blob path ends with 是儲存體事件觸發程序中唯一允許的模式比對。 觸發程序類型不支援其他類型的萬用字元比對。

  7. 選取您的觸發程序是否會回應 [已建立 Blob] 事件、[已刪除 Blob] 事件,或回應這兩項。 在你指定的儲存位置,每個事件都會觸發與該觸發器相關的 Data Factory 和 Azure Synapse Analytics 管線。

    螢幕擷取畫面:儲存事件觸發器建立頁面。

  8. 選取您的觸發程序是否忽略零位元組的 Blob。

  9. 在設定您的觸發程序之後,請選取 [下一步: 資料預覽]。 此畫面會顯示您的儲存體事件觸發程序設定所符合的現有 Blob。 請確定您有特定的篩選條件。 設定太廣泛的篩選條件可能會比對大量已建立或已刪除的檔案,並可能大幅影響您的成本。 驗證您的篩選條件後,請選取 [完成]。

    螢幕擷取畫面:儲存事件觸發預覽頁面。

  10. 若要將管線連結到此觸發程序,請移至管線畫布,並選取 [觸發程序]>[新增/編輯]。 當側邊窗格出現時,選取 [選擇觸發程序] 下拉式清單,然後選取您所建立的觸發程序。 選取 [下一步:資料預覽] 以確認設定正確無誤。 然後,選取 [下一步] 以驗證資料預覽正確無誤。

  11. 如果您的管線具有參數,則可在 [觸發程序執行參數] 側邊窗格上加以指定。 儲存體事件觸發程序會將 Blob 的資料夾路徑和檔案名稱擷取到 @triggerBody().folderPath 和 @triggerBody().fileName 屬性中。 若要在管線中使用這些屬性的值,您必須將屬性對應到管線參數。 在將屬性對應到參數之後,您可在整個管線中透過 @pipeline().parameters.parameterName 運算式存取觸發程序所擷取的值。 如需詳細說明,請參閱管線中的觸發器中繼資料參考。

    螢幕擷取畫面:儲存體事件觸發程序將屬性對應到管線參數。

    在上述範例中,觸發程序已設定為在 ample-data 容器的 event-testing 資料夾中建立以 .csv 結尾的 Blob 路徑時引發。 folderPath 和 fileName 屬性都會擷取新 Blob 的位置。 例如,將 MoviesDB.csv 新增至「sample-data/event-testing」路徑時,@triggerBody().folderPath 的值為 sample-data/event-testing,而 @triggerBody().fileName 的值為 moviesDB.csv。 這些值會在範例中對應至管線參數 sourceFolder 和 sourceFile,其在管線中可分別作為 @pipeline().parameters.sourceFolder 和 @pipeline().parameters.sourceFile 使用。

  12. 完成之後,請選取 [完成]。

JSON 結構描述

下表提供與儲存體事件觸發程序相關的結構描述元素概觀。

JSON 元素 描述 類型 允許的值 必須
範圍 儲存體帳戶的 Azure Resource Manager 資源識別碼。 字串 Azure 資源管理器 ID 是。
活動 會導致這個觸發器觸發的事件類型。 陣列 Microsoft.Storage.BlobCreated, Microsoft.Storage.BlobDeleted 是,這些值的任意組合。
blobPathBeginsWith Blob 路徑的開頭必須是提供來引發觸發程序的模式。 例如,/records/blobs/december/ 只會針對 december 容器下 records 資料夾中的 Blob 引發觸發程序。 字串 請為下列屬性中的至少一個屬性提供一值:blobPathBeginsWith 或 blobPathEndsWith。
blobPathEndsWith Blob 路徑的結尾必須是提供來引發觸發程序的模式。 例如,december/boxes.csv 只會針對 boxes 資料夾中名為 december 的 Blob 引發觸發程序。 字串 請為下列屬性中的至少一個屬性提供一值:blobPathBeginsWith 或 blobPathEndsWith。
ignoreEmptyBlobs 零位元組 Blob 是否會觸發管線執行。 根據預設,這項設定為 true。 布林值 真或假 否。

儲存體事件觸發程序的範例

本節提供儲存體事件觸發程序設定的範例。

重要

每當您指定容器與資料夾、容器與檔案,或容器、資料夾與檔案時,都必須包含路徑的 /blobs/ 區段,如下列範例所示。 對於 blobPathBeginsWith,該 UI 會自動在觸發程序 JSON 中的資料夾與容器名稱之間新增 /blobs/。

屬性 範例 描述
Blob path begins with /containername/ 接收容器中任何 Blob 的事件。
Blob path begins with /containername/blobs/foldername/ 接收 containername 容器與 foldername 資料夾中任何 Blob 的事件。
Blob path begins with /containername/blobs/foldername/subfoldername/ 您也可以參考子資料夾。
Blob path begins with /containername/blobs/foldername/file.txt 接收 file.txt 容器下 foldername 資料夾中名為 containername 之 Blob 的事件。
Blob path ends with file.txt 接收任何路徑中名為 file.txt 之 Blob 的事件。
Blob path ends with /containername/blobs/file.txt 接收容器 file.txt 下名為 containername 之 Blob 的事件。
Blob path ends with foldername/file.txt 接收任何容器下 file.txt 資料夾中名為 foldername 之 Blob 的事件。

角色型存取控制

Data Factory 與 Azure Synapse Analytics 管線使用 Azure 角色基礎存取控制(Azure RBAC),嚴格禁止未經授權存取以監聽、訂閱更新及觸發與 blob 事件相關的管線。

  • 要成功建立新的儲存事件觸發器或更新現有事件,已登入服務的 Azure 帳號必須擁有該儲存帳號的適當存取權。 否則,該作業會失敗且有訊息「拒絕存取」。
  • Data Factory 和 Azure Synapse Analytics 不需要對你的事件網格實例取得特殊權限,而且你不需要為 Data Factory 或 Azure Synapse Analytics 服務主體指派執行該操作的特殊 RBAC 權限。

下列任何 RBAC 設定都適用於儲存體事件觸發程序:

  • 儲存帳戶的擁有者角色
  • 儲存體帳戶的參與者角色
  • Microsoft.EventGrid/EventSubscriptions/Write 儲存帳號的權限 /subscriptions/####/resourceGroups/####/providers/Microsoft.Storage/storageAccounts/storageAccountName

具體而言:

  • 當你在資料工廠(例如開發環境)中創作時,登入的 Azure 帳號需要擁有之前的權限。
  • 當你透過 持續整合與持續交付發佈時,用於將Azure Resource Manager範本發佈到測試或生產工廠的帳號必須擁有先前的權限。

若要了解服務如何提供這兩項承諾,讓我們退後一步,看看幕後的情形。 以下是 Data Factory/Azure Synapse Analytics、Storage、Event Grid 之間整合的高階工作流程。

建立新的儲存事件觸發器

此高階工作流程說明 Data Factory 如何與事件方格互動,以建立儲存體事件觸發程序。 Azure Synapse Analytics 的資料流程相同,Azure Synapse Analytics 管線在下圖中扮演資料工廠的角色。

此圖顯示儲存體事件觸發程序的建立工作流程。

兩個來自工作流程的明顯標註:

  • Data Factory 和 Azure Synapse Analytics 不會直接與儲存帳戶聯繫。 建立訂用帳戶的要求會改由事件方格轉送和處理。 此服務不需要權限即可存取儲存體帳戶。
  • 存取控制和權限檢查會在服務內發生。 在服務傳送要求以訂閱儲存體事件之前,會檢查使用者的權限。 更具體來說,它會檢查已登入並嘗試建立儲存事件觸發器的 Azure 帳號是否擁有該儲存帳號的適當存取權。 如果權限檢查失敗,觸發程序建立也會失敗。

儲存體事件觸發程序管線執行

此高階工作流程描述了儲存體事件觸發程序管線如何透過事件方格執行。 對於 Azure Synapse Analytics,資料流相同,Azure Synapse Analytics 管線在下圖中扮演 Data Factory 的角色。

此圖顯示儲存體事件觸發管線執行的工作流程。

工作流程中有三個與服務內事件觸發管線相關的明顯標註:

  • 事件方格使用推送模型,一旦儲存體將訊息投入系統時,即儘快轉送訊息。 此方法與傳訊系統不同,例如使用提取系統的 Kafka。

  • 事件觸發程序可作為內送訊息的作用中接聽程式,並正確地觸發相關聯的管線。

  • 儲存體事件觸發程序本身不會與儲存體帳戶直接聯繫。

    • 如果您在管線內有 Copy 活動或其他活動要處理儲存體帳戶中的資料,服務會使用儲存在連結服務中的認證,直接與儲存體帳戶連線。 請確定您已適當地設定連結服務。
    • 如果您未在流程中提到儲存體帳戶,則不需要授予服務存取儲存體帳戶的權限。