在 Azure Logic Apps 中,從工作流程連線至 Azure Blob 儲存體
適用於:Azure Logic Apps (使用量 + 標準)
此操作指南說明如何使用 Azure Blob 儲存體連接器,在 Azure Logic Apps 中從工作流程存取 Azure Blob 儲存體帳戶和容器。 此連接器提供您的工作流程可用於 Blob 作業的觸發程序和動作。 您接著可以建立自動化工作流程以在儲存體容器或其他系統中的事件觸發時執行,並執行動作來處理儲存體容器中的資料。 例如,您可以存取和管理儲存為 Azure 儲存體帳戶中 Blob 的檔案。
您可以在 [邏輯應用程式 (取用)] 和 [邏輯應用程式 (標準)] 資源類型中,從工作流程連線至 Azure Blob 儲存體。 您可以搭配使用連接器與多租用戶 Azure Logic Apps 和單一租用戶 Azure Logic Apps 中的邏輯應用程式工作流程。 使用 [邏輯應用程式 (標準)],您可以使用 [Azure Blob]「內建」連接器作業或 [Azure Blob 儲存體] 受控連接器作業。
連接器技術參考
根據邏輯應用程式類型和主機環境,Azure Blob 儲存體連接器會有不同的版本。
邏輯應用程式 | Environment | 連接器版本 |
---|---|---|
耗用 | 多租用戶 Azure Logic Apps | 受控連接器,其顯示在連接器資源庫的 [執行階段]>[共用] 下。 如需詳細資訊,請參閱下列文件: - Azure Blob 儲存體受控連接器參考 - Azure Logic Apps 的受控連接器 |
標準 | 單一租用戶 Azure Logic Apps 和 App Service 環境 v3 (僅限 Windows 方案) | 顯示在連接器資源庫的 [執行階段] > [共用] 下的受控連接器 (Azure 裝載),以及顯示在連接器資源庫的 [執行階段] > [應用程式內] 下,並以服務提供者為基礎的內建連接器。 內建版本在以下方面有相異之處: - 內建版本會直接連線至您只需要連接字串的 Azure 儲存體帳戶。 - 內建版本可以直接存取 Azure 虛擬網路。 如需詳細資訊,請參閱下列文件: - Azure Blob 儲存體受控連接器參考 - Azure Blob 內建連接器參考 - Azure Logic Apps 中的內建連接器 |
限制
Azure Blob 儲存體受控連接器動作可讀取或寫入 50 MB 或更小的檔案。 為了處理大於 50 MB 但不超過 1024 MB 的檔案,Azure Blob 儲存體動作支援訊息區塊化。 名為取得 Blob 內容的 Blob 儲存體動作會隱含地使用區塊化。
雖然 Azure Blob 儲存體的受控和內建觸發程序不支援區塊化,但內建觸發程序可處理 50 MB 以上的檔案。 不過,當受控觸發程序要求檔案內容時,觸發程序只會選取 50 MB 或更小的檔案。 若要取得大於 50 MB 的檔案,請依照下列模式:
使用可傳回檔案屬性的觸發程序,例如 [新增或修改 Blob 時 (僅限屬性)]。
遵循 Azure Blob 儲存體受控連接器動作名稱為取得 Blob 內容的觸發程序,其會讀取完整檔案,並隱含地使用區塊化。
Azure Blob 儲存體觸發程序限制
- 受控連接器觸發程序在輪詢虛擬資料夾中限制為 30,000 個 Blob。
- 內建連接器觸發程序在整個輪詢容器中限制為 10,000 個 Blob。
如果超過限制,新的 Blob 可能無法觸發工作流程,因此會略過觸發程序。
必要條件
Azure 帳戶和訂用帳戶。 如果您沒有 Azure 訂用帳戶,請先註冊免費的 Azure 帳戶。
您想要從中存取 Azure 儲存體帳戶的邏輯應用程式工作流程。 若要使用 Azure Blob 觸發程序來啟動工作流程,必須要有空白工作流程。 若要使用 Azure Blob 動作,請使用任何觸發程序啟動您的工作流程。
新增 Blob 觸發程序
使用量邏輯應用程式工作流程只能使用 Azure Blob 儲存體受控連接器。 不過,標準邏輯應用程式工作流程可以使用 Azure Blob 儲存體受控連接器和 Azure Blob 內建連接器。 雖然這兩個連接器版本只提供一個 Blob 觸發程序,但觸發程序名稱會根據您使用的是使用量還是標準工作流程而不同,如下所示:
邏輯應用程式 | 連接器版本 | 觸發程序名稱 | 描述 |
---|---|---|---|
耗用 | 僅限受控連接器 | 新增或修改 Blob 時 (僅限屬性) | 觸發程序是在儲存體容器的根資料夾中新增或更新 Blob 屬性時所引發。 當您設定受控觸發程序時,受控版本會忽略儲存體容器中的現有 Blob。 |
標準 | - 內建連接器 - 受控連接器 |
- 內建:新增或更新 Blob 時 - 受控:新增或修改 Blob 時 (僅限屬性) |
- 內建:觸發程序是在您的儲存體容器中新增或更新 Blob 時所引發,並針對您儲存體容器中的任何巢狀資料夾引發,而不只是根資料夾。 當您設定內建觸發程序時,內建版本會處理儲存體容器中的所有現有 Blob。 - 受控:觸發程序是在儲存體容器的根資料夾中新增或更新 Blob 屬性時所引發。 當您設定受控觸發程序時,受控版本會忽略儲存體容器中的現有 Blob。 |
下列步驟會使用 Azure 入口網站進行,但若搭配適當的 Azure Logic Apps 延伸模組,則也可以使用下列工具來建立邏輯應用程式工作流程:
使用量邏輯應用程式工作流程:Visual Studio 或 Visual Studio Code
標準邏輯應用程式工作流程:Visual Studio Code
在 Azure 入口網站上,於設計工具中開啟您的使用量邏輯應用程式和空白工作流程。
在設計工具中的搜尋方塊下選取 [標準],然後依照這些一般步驟新增您想要的 Azure Blob 儲存體受控觸發程序。
此範例會繼續執行名為 [新增或修改 Blob 時 (僅限屬性)] 的觸發程序。
如果出現提示,則請針對儲存體帳戶連線提供下列資訊。 完成時,選取建立。
屬性 必要 描述 連線名稱 Yes 您連線的名稱 驗證類型 Yes 儲存體帳戶的驗證類型。 如需詳細資訊,請檢閱支援驗證的觸發程序和動作驗證類型 - 保護存取權和資料。 例如,此連線會使用存取金鑰驗證,並提供儲存體帳戶的存取金鑰值,以及下列屬性值:
屬性 必填 值 Description Azure 儲存體帳戶名稱 是,但僅適用於存取金鑰驗證 <storage-account-name> Blob 容器所在 Azure 儲存體帳戶的名稱。
注意:若要尋找儲存體帳戶名稱,請在 Azure 入口網站中開啟您的儲存體帳戶資源。 在資源功能表中,於 [安全性 + 網路] 下,選取 [存取金鑰]。 在 [儲存體帳戶名稱] 下,複製並儲存名稱。Azure 儲存體帳戶存取金鑰 是,
但僅適用於存取金鑰驗證<storage-account-access-key> Azure 儲存體帳戶的存取金鑰。
注意:若要尋找存取金鑰,請在 Azure 入口網站中開啟您的儲存體帳戶資源。 在資源功能表中,於 [安全性 + 網路] 下,選取 [存取金鑰] > [金鑰 1] > [顯示]。 複製並儲存主索引鍵值。出現觸發程序資訊方塊之後,請提供必要的資訊。
針對 [容器] 屬性值,選取資料夾圖示以瀏覽 Blob 容器。 或者,使用 /<container-name> 語法來手動輸入路徑,例如:
若要新增此觸發程序可用的其他屬性,請開啟 [新增參數] 清單,然後選取您想要的屬性。
如需詳細資訊,請檢閱 Azure Blob 儲存體受控連接器觸發程序屬性。
新增您工作流程所需的任何其他動作。
完成後,請儲存您的工作流程。 在設計師工具列上選取儲存。
新增 Blob 動作
使用量邏輯應用程式工作流程只能使用 Azure Blob 儲存體受控連接器。 不過,標準邏輯應用程式工作流程可以使用 Azure Blob 儲存體受控連接器和 Azure Blob 內建連接器。 每個版本都會有多個但名稱不同的動作。 例如,受控和內建連接器版本都有自己的動作來取得檔案中繼資料以及取得檔案內容。
受控連接器動作:這些動作會在使用量或標準工作流程中執行。
內建連接器動作:這些動作只會在標準工作流程中執行。
下列步驟會使用 Azure 入口網站進行,但若搭配適當的 Azure Logic Apps 延伸模組,則也可以使用下列工具來建立及編輯邏輯應用程式工作流程:
使用量邏輯應用程式工作流程:Visual Studio 或 Visual Studio Code
標準邏輯應用程式工作流程:Visual Studio Code
在 Azure 入口網站上,於設計工具中開啟您的使用量邏輯應用程式和工作流程。
如果您的工作流程空白,請新增您的案例所需的觸發程序。
此範例使用週期性觸發程序。
在設計工具中,依照這些一般步驟尋找並新增您想要的 Azure Blob 儲存體受控動作。
此範例會繼續使用名為 [取得 Blob 內容] 的動作。
如果出現提示,請針對您的連線提供下列資訊。 完成時,選取建立。
屬性 必要 描述 連線名稱 Yes 您連線的名稱 驗證類型 Yes 儲存體帳戶的驗證類型。 如需詳細資訊,請檢閱支援驗證的觸發程序和動作驗證類型 - 保護存取權和資料。 例如,此連線會使用存取金鑰驗證,並提供儲存體帳戶的存取金鑰值,以及下列屬性值:
屬性 必填 值 Description Azure 儲存體帳戶名稱 是,
但僅適用於存取金鑰驗證<storage-account-name> Blob 容器所在 Azure 儲存體帳戶的名稱。
注意:若要尋找儲存體帳戶名稱,請在 Azure 入口網站中開啟您的儲存體帳戶資源。 在資源功能表中,於 [安全性 + 網路] 下,選取 [存取金鑰]。 在 [儲存體帳戶名稱] 下,複製並儲存名稱。Azure 儲存體帳戶存取金鑰 是,
但僅適用於存取金鑰驗證<storage-account-access-key> Azure 儲存體帳戶的存取金鑰。
注意:若要尋找存取金鑰,請在 Azure 入口網站中開啟您的儲存體帳戶資源。 在資源功能表中,於 [安全性 + 網路] 下,選取 [存取金鑰] > [金鑰 1] > [顯示]。 複製並儲存主索引鍵值。在動作資訊方塊中,提供必要資訊。
例如,在 [取得 Blob 內容] 動作中,提供您的儲存體帳戶名稱。 針對 [Blob] 屬性值,選取資料夾圖示以瀏覽儲存體容器或資料夾。 或者,手動輸入路徑。
Task Blob 路徑語法 從根資料夾中,取得特定 Blob 的內容。 /<container-name>/<blob-name> 從子資料夾中,取得特定 Blob 的內容。 /<container-name>/<subfolder>/<blob-name> 下列範例顯示可從根資料夾中取得 Blob 內容的動作設定:
下列範例顯示可從子資料夾中取得 Blob 內容的動作設定:
新增您工作流程所需的任何其他動作。
完成後,請儲存您的工作流程。 在設計師工具列上選取儲存。
存取防火牆後方的儲存體帳戶
您可以使用防火牆和防火牆規則限制存取,藉此為 Azure 儲存體帳戶增添一層網路安全保障。 不過,這個設定會對 Azure 和其他需要儲存體帳戶存取權的 Microsoft 服務建立挑戰。 資料中心內的本機通訊會抽象化內部 IP 位址,因此只允許透過 IP 位址的流量可能不足以成功允許跨防火牆進行通訊。 根據您使用的 Azure Blob 儲存體連接器,可以使用下列選項:
若要在使用量邏輯應用程式中使用 Azure Blob 儲存體受控連接器來存取防火牆後方的儲存體帳戶,請參閱下列文件:
若要在標準邏輯應用程式中存取防火牆後方的儲存體帳戶,請檢閱下列文件:
Azure Blob 儲存體內建連接器:透過虛擬網路整合存取儲存體帳戶
Azure Blob 儲存體受控連接器:存取其他區域中的儲存體帳戶
請存取其他區域中的儲存體帳戶
如果您未使用受控身分識別驗證,則邏輯應用程式資源和儲存體帳戶同時存在於相同區域中時,邏輯應用程式工作流程無法直接存取防火牆後方的儲存體帳戶。 因應措施是將您的邏輯應用程式資源放在與儲存體帳戶不同的區域中。 然後,提供區域中受控連接器的輸出 IP 位址的存取權。
注意
此解決方案不適用於 Azure 資料表儲存體連接器和 Azure 佇列儲存體連接器。 若要改為存取資料表儲存體或佇列儲存體,請使用內建 HTTP 觸發程序和動作。
若要將輸出 IP 位址新增至儲存體帳戶防火牆,請遵循下列步驟:
請記下邏輯應用程式資源區域的受控連接器輸出 IP 位址。
在 Azure 入口網站中,尋找並開啟您的儲存體帳戶資源。
在儲存體帳戶導覽功能表上,於 [安全性 + 網路] 下,選取 [網路]。
透過受信任的虛擬網路來存取儲存體帳戶
您的邏輯應用程式和儲存體帳戶存在於相同的區域中。
您可以建立私人端點,以將您的儲存體帳戶放入 Azure 虛擬網路,然後將該虛擬網路新增至受信任的虛擬網路清單。 若要讓邏輯應用程式透過受信任的虛擬網路來存取儲存體帳戶,您需要建立標準邏輯應用程式,而此環境可以連線至虛擬網路中的資源。
您的邏輯應用程式和儲存體帳戶存在於不同的區域中。
在您的儲存體帳戶上建立私人端點以供存取。
透過虛擬網路整合來存取儲存體帳戶
您的邏輯應用程式和儲存體帳戶存在於相同的區域中。
您可以建立私人端點,以將儲存體帳戶放入 Azure 虛擬網路,然後將該虛擬網路新增至受信任的虛擬網路清單。 若要讓您的邏輯應用程式存取儲存體帳戶,您必須使用虛擬網路整合來設定輸出流量,以啟用連線至虛擬網路中的資源。 您接著可以將虛擬網路新增至儲存體帳戶的受信任虛擬網路清單。
您的邏輯應用程式和儲存體帳戶存在於不同的區域中。
在您的儲存體帳戶上建立私人端點以供存取。
存取具有系統受控身分識別之相同區域中的 Blob 儲存體
若要在任何區域中連線至 Azure Blob 儲存體,您可以使用受控身分識別進行驗證。 您可以建立例外狀況,而此例外狀況讓受控身分識別這類 Microsoft 受信任服務可透過防火牆來存取儲存體帳戶。
注意
此解決方案不適用於標準邏輯應用程式。 即使您將系統指派的受控識別用於標準邏輯應用程式,Azure Blob 儲存體受控連接器也無法連線至相同區域中的儲存體帳戶。
若要在邏輯應用程式中使用受控身分識別來存取 Blob 儲存體,請遵循下列步驟:
注意
此解決方案具有下列限制:
若要驗證您的儲存體帳戶連線,您必須設定系統指派的受控身分識別。 使用者指派的受控身分識別將不會運作。
設定儲存體帳戶存取權
若要設定例外狀況和受控身分識別支援,請先設定適當的儲存體帳戶存取權:
在 Azure 入口網站中,尋找並開啟您的儲存體帳戶資源。
在儲存體帳戶導覽功能表上,於 [安全性 + 網路] 下,選取 [網路]。
注意
如果您在嘗試從工作流程連線至儲存體帳戶時收到「403 禁止」錯誤,則存在多個可能的原因。 繼續進行其他步驟之前,請嘗試下列解決方法。 首先,停用 [允許受信任的 Microsoft 服務存取此儲存體帳戶] 設定,並儲存您的變更。 然後,重新啟用設定,然後再次儲存您的變更。
建立邏輯應用程式的角色指派
接下來,在您的邏輯應用程式資源上啟用受控身分識別支援。
下列步驟適用於多租用戶環境中的使用量邏輯應用程式以及單一租用戶環境中的標準邏輯應用程式。
在 Azure 入口網站中,開啟您的邏輯應用程式資源。
在邏輯應用程式資源導覽功能表上,於 [設定] 下,選取 [身分識別]。
在 [系統指派] 窗格上,將 [狀態] 設定為 [開啟],如果尚未啟用,則請選取 [儲存],然後確認您的變更。 在 [權限] 下,選取 [Azure 角色指派]。
在 [Azure 角色指派] 窗格上,選取 [新增角色指派]。
在 [新增角色指派] 窗格上,使用下列值來設定新的角色指派:
屬性 數值 Description 範圍 <resource-scope> 您想要套用角色指派的資源集。 在此範例中,選取 [儲存體]。 訂用帳戶 <Azure-subscription> 您儲存體帳戶的 Azure 訂用帳戶。 資源 <storage-account-name> 您想要從邏輯應用程式工作流程存取的儲存體帳戶名稱。 Role <role-to-assign> 您的案例針對工作流程所需的角色,才能使用資源。 此範例需要 [儲存體 Blob 資料參與者],以允許讀取、寫入和刪除 Blob 容器和日期的存取權。 如需權限詳細資料,請將滑鼠移至下拉式功能表中角色旁邊的資訊圖示上方。 完成時,請選取 [儲存] 以完成建立角色指派。
啟用邏輯應用程式上的受控身分識別支援
接下來,完成下列步驟:
如果您有空白工作流程,則請新增 Azure Blob 儲存體連接器觸發程序。 否則,請新增 Azure Blob 儲存體連接器動作。 請確定您為觸發程序或動作建立新的連線,而不是使用現有連線。
請確定您已將驗證類型設定為使用受控身分識別。
設定觸發程序或動作之後,您可以儲存工作流程,並測試觸發程序或動作。
針對儲存體帳戶存取問題進行疑難排解
[此要求沒有權限執行此作業。]
下列錯誤是邏輯應用程式和儲存體帳戶存在於相同區域時所發生的常見回報問題。 不過,選項可用來解決此限制,如防火牆後方的存取儲存體帳戶一節所述。
{ "status": 403, "message": "This request is not authorized to perform this operation.\\r\\nclientRequestId: a3da2269-7120-44b4-9fe5-ede7a9b0fbb8", "error": { "message": "This request is not authorized to perform this operation." }, "source": "azureblob-ase.azconn-ase.p.azurewebsites.net" }
Application Insights 錯誤
404 和 409 錯誤
如果您的標準工作流程使用將 Blob 新增至儲存體容器的 Azure Blob 內建動作,則您可能會在 Application Insights 中針對失敗的要求收到 404 和 409 錯誤。 預期會發生這些錯誤,因為連接器會先檢查 Blob 檔案是否存在,再新增 Blob。 檔案不存在時,會產生錯誤。 儘管發生這些錯誤,內建動作仍然會成功地新增 Blob。