建立一個執行管線的觸發程序來回應儲存體事件
適用於:Azure Data Factory Azure Synapse Analytics
提示
試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft 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 儲存體到事件方格的通訊。 您可以遵循儲存體文件 (部分機器翻譯),將儲存體存取權授與信任的 Azure 服務 (例如事件方格),或遵循事件方格文件,針對事件方格設定對應至虛擬網路位址空間的私人端點。
- 儲存體事件觸發程序目前僅支援 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) 中建立儲存體事件觸發程序。
切換至 Data Factory 中的 [編輯] 索引標籤,或 Azure Synapse Analytics 中的 [整合] 索引標籤。
在功能表上,選取 [觸發程序],然後選取 [新增/編輯]。
在 [新增觸發程序] 頁面上,選取 [選擇觸發程序],然後選取 [+ 新增]。
選取觸發程序類型 [儲存體事件]。
從 Azure 訂用帳戶下拉式清單中選取您的儲存體帳戶,或使用其儲存體帳戶資源識別碼手動進行。 選擇您希望事件發生所在的容器。 選取容器是必要作業,但選取所有容器可能會導致大量的事件。
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
會在任何容器中名為april
的資料夾中對任何名為shoes.csv
的檔案觸發事件。
請注意,
Blob path begins with
和Blob path ends with
是儲存體事件觸發程序中唯一允許的模式比對。 觸發程序類型不支援其他類型的萬用字元比對。選取您的觸發程序是否會回應 [已建立 Blob] 事件、[已刪除 Blob] 事件,或回應這兩項。 在您指定的儲存位置中,每個事件都會觸發與觸發程序相關聯的 Data Factory 和 Azure Synapse Analytics 管線。
選取您的觸發程序是否忽略零位元組的 Blob。
在設定您的觸發程序之後,請選取 [下一步: 資料預覽]。 此畫面會顯示您的儲存體事件觸發程序設定所符合的現有 Blob。 請確定您有特定的篩選條件。 設定太廣泛的篩選條件可能會比對大量已建立或已刪除的檔案,並可能大幅影響您的成本。 驗證您的篩選條件後,請選取 [完成]。
若要將管線連結到此觸發程序,請移至管線畫布,並選取 [觸發程序]>[新增/編輯]。 當側邊窗格出現時,選取 [選擇觸發程序] 下拉式清單,然後選取您所建立的觸發程序。 選取 [下一步:資料預覽] 以確認設定正確無誤。 然後,選取 [下一步] 以驗證資料預覽正確無誤。
如果您的管線具有參數,則可在 [觸發程序執行參數] 側邊窗格上加以指定。 儲存體事件觸發程序會將 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
使用。完成之後,請選取 [完成]。
JSON 結構描述
下表提供與儲存體事件觸發程序相關的結構描述元素概觀。
JSON 元素 | 描述 | 類型 | 允許的值 | 必要 |
---|---|---|---|---|
範圍 (scope) | 儲存體帳戶的 Azure Resource Manager 資源識別碼。 | String | Azure Resource Manager 識別碼 | 是。 |
活動 | 會導致引發此觸發程序的事件類型。 | Array | % | 是,這些值的任意組合。 |
blobPathBeginsWith |
Blob 路徑的開頭必須是提供來引發觸發程序的模式。 例如,/records/blobs/december/ 只會針對 records 容器下 december 資料夾中的 Blob 引發觸發程序。 |
String | 請為下列屬性中的至少一個屬性提供一值:blobPathBeginsWith 或 blobPathEndsWith 。 |
|
blobPathEndsWith |
Blob 路徑的結尾必須是提供來引發觸發程序的模式。 例如,december/boxes.csv 只會針對 december 資料夾中名為 boxes 的 Blob 引發觸發程序。 |
String | 請為下列屬性中的至少一個屬性提供一值:blobPathBeginsWith 或 blobPathEndsWith 。 |
|
ignoreEmptyBlobs |
零位元組 Blob 是否會觸發管線執行。 根據預設,這項設定為 true 。 |
布林值 | [True] 或 [False] | 否。 |
儲存體事件觸發程序的範例
本節提供儲存體事件觸發程序設定的範例。
重要
每當您指定容器與資料夾、容器與檔案,或容器、資料夾與檔案時,都必須包含路徑的 /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 |
接收 containername 容器下 foldername 資料夾中名為 file.txt 之 Blob 的事件。 |
Blob path ends with |
file.txt |
接收任何路徑中名為 file.txt 之 Blob 的事件。 |
Blob path ends with |
/containername/blobs/file.txt |
接收容器 containername 下名為 file.txt 之 Blob 的事件。 |
Blob path ends with |
foldername/file.txt |
接收任何容器下 foldername 資料夾中名為 file.txt 之 Blob 的事件。 |
角色型存取控制
Data Factory 和 Azure Synapse Analytics 管線會使用 Azure 角色型存取控制 (Azure RBAC),以確保嚴格禁止若未授權存取,不得接聽、訂閱更新,以及觸發連結至 Blob 事件的管線。
- 若要成功建立新的儲存體事件觸發程序或更新現有項目,登入服務的 Azure 帳戶必須具有相關儲存體帳戶的適當存取權。 否則,該作業會失敗且有訊息「拒絕存取」。
- Data Factory 和 Azure Synapse Analytics 不需要事件方格執行個體的特殊權限,而且您「不」需要將特殊的 RBAC 權限指派給作業的 Data Factory 或 Azure Synapse Analytics 服務主體。
下列任何 RBAC 設定都適用於儲存體事件觸發程序:
- 儲存體帳戶的擁有者角色
- 儲存體帳戶的參與者角色
- 儲存體帳戶
/subscriptions/####/resourceGroups/####/providers/Microsoft.Storage/storageAccounts/storageAccountName
的Microsoft.EventGrid/EventSubscriptions/Write
權限
具體而言:
- 當您在資料處理站中 (例如在開發環境中) 編寫時,登入的 Azure 帳戶必須具有上述權限。
- 當您透過持續整合與持續傳遞發佈時,用來將 Azure Resource Manager 範本發佈至測試或生產處理站的帳戶必須具有上述權限。
若要了解服務如何提供這兩項承諾,讓我們退後一步,看看幕後的情形。 以下是 Data Factory/Azure Synapse Analytics、儲存體和事件方格之間整合的高階工作流程。
建立新的儲存體事件觸發程序
此高階工作流程說明 Data Factory 如何與事件方格互動,以建立儲存體事件觸發程序。 Azure Synapse Analytics 中的資料流程是相同的,Azure Synapse Analytics 管線在下圖中扮演資料處理站的角色。
兩個來自工作流程的明顯標註:
- Data Factory 和 Azure Synapse Analytics「不會」與儲存體帳戶直接聯繫。 建立訂用帳戶的要求會改由事件方格轉送和處理。 服務不需要權限即可存取此步驟的儲存體帳戶。
- 存取控制和權限檢查會在服務內發生。 在服務傳送要求以訂閱儲存體事件之前,其會檢查使用者的權限。 更具體來說,其會檢查已登入並嘗試建立儲存體事件觸發程序的 Azure 帳戶是否具有相關儲存體帳戶的適當存取權。 如果權限檢查失敗,觸發程序建立也會失敗。
儲存體事件觸發程序管線執行
此高階工作流程描述了儲存體事件觸發程序管線如何透過事件方格執行。 對於 Azure Synapse Analytics,資料流程相同,Azure Synapse Analytics 管線在下圖中扮演 Data Factory 的角色。
工作流程中有三個與服務內事件觸發管線相關的明顯標註:
事件方格會使用推送模型,在儲存體將訊息卸除至系統時,儘快轉送訊息。 此方法與傳訊系統不同,例如使用提取系統的 Kafka。
事件觸發程序可作為內送訊息的作用中接聽程式,並正確地觸發相關聯的管線。
儲存體事件觸發程序本身不會與儲存體帳戶直接聯繫。
- 如果您在管線內具有用來處理儲存體帳戶中資料的複製活動或其他活動,服務會使用儲存在連結服務中的認證直接與儲存體帳戶聯繫。 請確定您已適當地設定連結服務。
- 如果您未參考管線中的儲存體帳戶,則不需要將權限授與服務以存取儲存體帳戶。
相關內容
- 如需觸發程序的詳細資訊,請參閱管線執行和觸發程序。
- 若要在管線中參考觸發程序中繼資料,請參閱在管線執行中參考觸發程序中繼資料。