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

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory (部分機器翻譯),這是適用於企業的全方位分析解決方案。 Microsoft Fabric (部分機器翻譯) 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用 (部分機器翻譯)!

本文描述您可以在 Data Factory 或 Synapse 管線中建立的儲存體事件觸發程序。

事件驅動架構 (EDA) 是常見的資料整合模式,所涉及的環節包括生產、偵測、取用和事件反應。 資料整合案例通常需要客戶根據儲存體帳戶中發生的事件 (例如 Azure Blob 儲存體帳戶中的檔案送達或刪除) 來觸發管線。 Data Factory 和 Synapse 管線原生與 Azure 事件方格整合,這可讓您在這類事件上觸發管線。

注意

本文章中說明的整合,仰賴 Azure 事件方格。 請確認您的訂用帳戶已向事件方格資源提供者註冊。 如需詳細資訊,請參閱資源提供者和類型。 您必須能夠執行 Microsoft.EventGrid/eventSubscriptions/* 動作。 此動作是 EventGrid EventSubscription 參與者內建角色的一部分。

重要

如果您是在 Azure Synapse Analytics 中使用此功能,請確定您的訂用帳戶也已向 Data Factory 資源提供者註冊,否則您會收到錯誤,指出「建立「事件訂用帳戶」失敗」

注意

如果 Blob 儲存體帳戶位於私人端點後面,並封鎖公用網路存取,您必須設定網路規則,以允許從 Blob 儲存體到 Azure 事件方格的通訊。 您可以遵循儲存體文件,將儲存體存取權授與信任的 Azure 服務 (例如事件方格),或遵循事件方格文件,針對事件方格設定對應至 VNet 位址空間的私人端點

使用 UI 建立觸發程序

本節說明如何在 Azure Data Factory 和 pipeline 使用者介面中建立儲存體事件觸發程序。

  1. 切換至 Data Factory 中的 [編輯] 索引標籤,或 Azure Synapse Analytics 中的 [整合] 索引標籤。

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

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

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

  5. 從 Azure 訂用帳戶下拉式清單中選取您的儲存體帳戶,或使用其儲存體帳戶資源識別碼手動進行。 選擇您希望發生事件的容器。 容器選取是必要作業,但請注意,選取所有容器可能會導致大量的事件。

    注意

    儲存體事件觸發程式目前僅支援 Azure Data Lake Storage Gen2 和一般用途第 2 版儲存體帳戶。 如果您正在使用 SFTP 儲存體事件,則必須在篩選區段下指定 SFTP 資料 API。 由於 Azure 事件方格限制,Azure Data Factory 僅支援每個儲存體帳戶最多 500 個儲存體事件觸發程式。 如果您達到限制,請連絡支援人員以取得建議,並透過事件方格小組提高評估時的限制。

    注意

    若要建立新的或修改現有的儲存體事件觸發程序,用來登入服務並發佈儲存體事件觸發程序的 Azure 帳戶必須對儲存體帳戶具有適當的角色型存取控制 (Azure RBAC) 權限。 不需要額外的權限:Azure Data Factory 和 Azure Synapse Analytics 的服務主體「不」需要儲存體帳戶或事件方格的特殊權限。 如需存取控制的詳細資訊,請參閱角色型存取控制一節。

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

    • Blob 路徑開頭:Blob 路徑的開頭必須是資料夾路徑。 有效值包括 2018/2018/april/shoes.csv。 如果未選取容器,就無法選取此欄位。
    • Blob 路徑結尾:Blob 路徑的結尾必須是檔案名稱或副檔名。 有效值包括 shoes.csv.csv。 容器和資料夾名稱若已指定,則必須以 /blobs/ 區段分隔。 例如,名為 'orders' 的容器可以有 /orders/blobs/2018/april/shoes.csv值。 若要指定任何容器中的資料夾,請省略前置的 '/' 字元。 例如,april/shoes.csv 將會在任何容器中名為 'april' 的資料夾中,對任何名為 shoes.csv 的檔案觸發事件。
    • 請注意,Blob 路徑 [開頭為] 和 [結尾為] 是儲存體事件觸發程序中唯一允許的模式比對。 觸發程序類型不支援其他類型的萬用字元比對。
  7. 選取您的觸發程序是否會回應 [已建立 Blob] 事件、[已刪除 Blob] 事件,或回應兩者。 在您指定的儲存位置中,每個事件都會觸發與觸發程序相關聯的 Data Factory 和 Synapse 管線。

    Screenshot of storage event trigger creation page.

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

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

    Screenshot of storage event trigger preview page.

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

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

    Screenshot of storage event trigger mapping properties to pipeline parameters.

    在上述範例中,觸發程序已設定為在 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。 這些值會在範例中對應至管線參數 sourceFoldersourceFile,其在管線中可分別作為 @pipeline().parameters.sourceFolder@pipeline().parameters.sourceFile 使用。

  12. 當您完成時按一下 [完成]

JSON 結構描述

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

JSON 元素 說明 類型 允許的值 必要
範圍 (scope) 儲存體帳戶的 Azure Resource Manager 資源識別碼。 String Azure Resource Manager 識別碼 Yes
events 會導致引發此觸發程序的事件類型。 陣列 Microsoft.Storage.BlobCreated、Microsoft.Storage.BlobDeleted 是,這些值的任意組合。
blobPathBeginsWith Blob 路徑的開頭必須是提供來引發觸發程序的模式。 例如,/records/blobs/december/ 只會針對 records 容器下 december 資料夾中的 Blob 引發觸發程序。 String 請為下列屬性中的至少一個屬性提供一值:blobPathBeginsWithblobPathEndsWith
blobPathEndsWith Blob 路徑的結尾必須是提供來引發觸發程序的模式。 例如,december/boxes.csv 只會針對 december 資料夾中名為 boxes 的 Blob 引發觸發程序。 String 請為下列屬性中的至少一個屬性提供一值:blobPathBeginsWithblobPathEndsWith
ignoreEmptyBlobs 零位元組 Blob 是否會觸發管線執行。 此值會預設為 True。 布林值 [True] 或 [False] No

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

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

重要

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

注意

不建議使用檔案抵達觸發程序作為資料流程接收的觸發機制。 資料流程會在目標資料夾中執行數個檔案重新命名和分割區檔案隨機顯示工作,這些工作可能會在完整處理資料之前觸發檔案抵達事件。

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

角色型存取控制

Azure Data Factory 和 Synapse 管線會使用 Azure 角色型存取控制 (Azure RBAC),以確保嚴格禁止若未授權存取,不得接聽、訂閱更新,以及觸發連結至 Blob 事件的管線。

  • 若要成功建立新的或更新現有的儲存體事件觸發程序,登入服務的 Azure 帳戶必須具有相關儲存體帳戶的適當存取權。 否則,作業將會由於「拒絕存取」而失敗。
  • Azure Data Factory 和 Azure Synapse Analytics 不需要事件方格的特殊權限,而且您「不」需要將特殊的 RBAC 權限指派給作業的 Data Factory 或 Azure Synapse Analytics 服務主體。

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

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

具體而言,

  • 在資料處理站中 (例如在開發環境中) 編寫時,登入的 Azure 帳戶必須具有上述權限
  • 透過 CI/CD 發佈時,用來將 ARM 範本發佈至測試或生產處理站的帳戶必須具有上述權限。

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

建立新的儲存體事件觸發程序

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

Workflow of storage event trigger creation.

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

  • Azure Data Factory 和 Azure Synapse Analytics「不會」與儲存體帳戶直接聯繫。 事件方格會改為轉送和處理建立訂用帳戶的要求。 因此,在此步驟中服務不需要儲存體帳戶的權限。

  • 存取控制和權限檢查會在服務內發生。 在服務傳送要求以訂閱儲存體事件之前,其會檢查使用者的權限。 更具體來說,其會檢查已登入並嘗試建立儲存體事件觸發程序的 Azure 帳戶是否具有相關儲存體帳戶的適當存取權。 如果權限檢查失敗,觸發程序建立也會失敗。

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

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

Workflow of storage event triggering pipeline runs.

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

  • 事件方格會使用推送模型,在儲存體將訊息卸除至系統時,儘快轉送訊息。 這與傳訊系統不同,例如使用提取系統的 Kafka。

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

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

    • 也就是說,如果您在管線內具有複製或其他活動來處理儲存體帳戶中的資料,服務將會使用儲存在連結服務中的認證,直接與儲存體聯繫。 確定已適當地設定連結服務
    • 不過,如果您未參考管線中的儲存體帳戶,則不需要將許權限授與服務以存取儲存體帳戶