教學課程:使用事件訂閱在 Blob 容器上觸發 Azure Functions
舊版 Azure Functions Blob 儲存體觸發程序會輪詢您的儲存體容器是否有變更。 新版 Blob 儲存體擴充 (5.x+) 則會在容器上使用 Azure 事件方格事件訂閱。 當訂閱的容器發生變更時,此事件訂閱會立即觸發您的函數,以降低延遲。
本文說明如何建立以 Blob 新增至容器時所引發的事件為基礎執行的函式。 請使用 Visual Studio Code 進行本機開發,並在將專案部署至 Azure 前驗證您的程式碼。
- 在新的專案中建立基於事件的 Blob 儲存體觸發函數。
- 使用 Azurite 仿真器在 Visual Studio Code 中進行本機驗證。
- 在 Azure 的新儲存體帳戶中建立 Blob 儲存體容器。
- 在 Flex Consumption 方案 (預覽版) 中建立函數應用程式。
- 建立新 Blob 容器的事件訂閱。
- 在 Azure 中部署和驗證您的函數程式碼。
本文章支援 Azure Functions 的 Node.js 程式設計模型版本 4。
本文章支援 Azure Functions 的 Python 程式設計模型版本 2。
本文章會建立以隔離式背景工作角色模式執行,並支援 .NET 8.0 的 C# 應用程式。
重要
本教學課程使用目前為預覽版的 Flex Consumption 方案。 Flex Consumption 方案僅支援基於事件的 Blob 儲存體觸發程序。 您可以為函數應用程式使用任何其他主控方案完成本教學課程。
必要條件
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
其中一個支援平台上的 Visual Studio Code。
適用於 Visual Studio Code 的 C# 延伸模組。
適用於 Visual Studio Code 的 Azure Functions 擴充功能。
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
Node.js 14.x 或更高版本。 請使用
node --version
命令來檢查您的版本。其中一個支援平台上的 Visual Studio Code。
適用於 Visual Studio Code 的 Azure Functions 延伸模組。 此延伸模組會在您第一次在本機執行函式時,為您安裝 Azure Functions Core Tools。
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
其中一個支援平台上的 Visual Studio Code。
適用於 Visual Studio Code 的 Azure Functions 延伸模組。
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
Azure Functions 支援的 Python 版本。 如需詳細資訊,請參閱如何安裝 Python。
其中一個支援平台上的 Visual Studio Code。
適用於 Visual Studio Code 的 Python 擴充功能。
適用於 Visual Studio Code 的 Azure Functions 延伸模組。
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
Java Development Kit 第 8、11、17 或 21 版 (Linux)。
Apache Maven 3.0 版或更高版本。
其中一個支援平台上的 Visual Studio Code。
適用於 Visual Studio Code 的 Azure Functions 延伸模組。
- Visual Studio Code 的 Azure 儲存體擴充。
注意
適用於 Visual Studio Code 的 Azure 儲存體延伸模組目前為預覽狀態。
建立由 Blob 觸發的函式
當您使用 Visual Studio Code 建立 Blob 儲存體觸發程序函數時,也會建立新的專案。 您必須編輯函數,以取用事件訂閱作為來源,而不是使用一般輪詢的容器。
在 Visual Studio Code 中開啟您的函數應用程式。
按 F1 鍵以開啟命令選擇區,然後輸入
Azure Functions: Create Function...
並選取 [建立新專案]。針對您的專案工作區,選取目錄位置。 請確定您建立新的資料夾,或為專案工作區選擇空白資料夾。
請勿選擇已屬於工作區一部分的專案資料夾。
依照提示提供下列資訊:
提示 動作 選取語言 選取 C#
。選取 .NET 執行階段 選取 .NET 8.0 Isolated LTS
。為專案的第一個函式選取範本 選取 Azure Blob Storage trigger (using Event Grid)
。提供函式名稱 輸入 BlobTriggerEventGrid
。提供命名空間 輸入 My.Functions
。從 "local.settings.json" 選取設定 選取 Create new local app setting
。選取訂用帳戶 選取您的訂用帳戶。 選取儲存體帳戶 於本機存放區使用 Azurite 仿真器。 這是儲存體帳戶內的路徑,亦即觸發程序所要監視的路徑 接受預設值 samples-workitems
。選取您開啟專案的方式 選取 Open in current window
。提示 動作 選取語言 選取 Python
。選取 Python 解譯器來建立虛擬環境 選取您慣用的 Python 解譯器。 如果選項未顯示,請輸入 Python 二進位檔的完整路徑。 為專案的第一個函式選取範本 選取 Azure Blob Storage trigger (using Event Grid)
。提供函式名稱 輸入 BlobTriggerEventGrid
。從 "local.settings.json" 選取設定 選取 Create new local app setting
。選取訂用帳戶 選取您的訂用帳戶。 選取儲存體帳戶 於本機存放區使用 Azurite 仿真器。 這是儲存體帳戶內的路徑,亦即觸發程序所要監視的路徑 接受預設值 samples-workitems
。選取您開啟專案的方式 選取 Open in current window
。提示 動作 選取語言 選取 Java
。選取 JAVA 的版本 選取 [ Java 11
] 或 [Java 8
],這是函式在 Azure 中執行且您已在本機驗證的 Java 版本。提供群組識別碼 選取 com.function
。提供成品識別碼 選取 BlobTriggerEventGrid
。提供版本 選取 1.0-SNAPSHOT
。提供套件名稱 選取 com.function
。提供應用程式名稱 接受以 BlobTriggerEventGrid
開頭的產生名稱。選取 JAVA 專案的建置工具 選取 Maven
。選取您開啟專案的方式 選取 Open in current window
。提示 動作 為您的函式專案選取語言 選取 TypeScript
。選取 TypeScript 程式設計模型 選取 Model V4
。為專案的第一個函式選取範本 選取 Azure Blob Storage trigger (using Event Grid)
。提供函式名稱 輸入 BlobTriggerEventGrid
。從 "local.settings.json" 選取設定 選取 Create new local app setting
。選取訂用帳戶 選取您的訂用帳戶。 選取儲存體帳戶 於本機存放區使用 Azurite 仿真器。 這是儲存體帳戶內的路徑,亦即觸發程序所要監視的路徑 接受預設值 samples-workitems
。選取您開啟專案的方式 選取 Open in current window
。提示 動作 為您的函式專案選取語言 選取 JavaScript
。選取 JavaScript 程式設計模型 選取 Model V4
。為專案的第一個函式選取範本 選取 Azure Blob Storage trigger (using Event Grid)
。提供函式名稱 輸入 BlobTriggerEventGrid
。從 "local.settings.json" 選取設定 選取 Create new local app setting
。選取訂用帳戶 選取您的訂用帳戶。 選取儲存體帳戶 於本機存放區使用 Azurite 仿真器。 這是儲存體帳戶內的路徑,亦即觸發程序所要監視的路徑 接受預設值 samples-workitems
。選取您開啟專案的方式 選取 Open in current window
。提示 動作 為您的函式專案選取語言 選取 PowerShell
。為專案的第一個函式選取範本 選取 Azure Blob Storage trigger (using Event Grid)
。提供函式名稱 輸入 BlobTriggerEventGrid
。從 "local.settings.json" 選取設定 選取 Create new local app setting
。選取訂用帳戶 選取您的訂用帳戶。 選取儲存體帳戶 於本機存放區使用 Azurite 仿真器。 這是儲存體帳戶內的路徑,亦即觸發程序所要監視的路徑 接受預設值 samples-workitems
。選取您開啟專案的方式 選取 Open in current window
。
升級儲存體擴充功能
若要使用基於 Azure 事件方格的 Blob 儲存體觸發程序,您至少需要 Azure Functions 儲存體擴充 5.x 版本。
若要使用必要的擴充版本來升級專案,請在終端機視窗中執行 dotnet add package
命令:
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs
開啟 host.json 專案檔,並檢閱
extensionBundle
元素。如果
extensionBundle.version
未達3.3.0
,請使用此版本取代extensionBundle
元素:"extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[4.0.0, 5.0.0)" }
準備本機存放區模擬
Visual Studio Code 會使用 Azurite 在本機執行時模擬 Azure 儲存體服務。 您可以使用 Azurite 在本機開發和測試期間模擬 Azure Blob 儲存體服務。
如果尚未完成,請安裝適用於 Visual Studio Code 的Azurite v3 擴充。
驗證 local.settings.json 檔案已針對
AzureWebJobsStorage
設定"UseDevelopmentStorage=true"
,這會指示 Core Tools 在本機執行時使用 Azurite,而不是實際的儲存體帳戶連線。按 F1 鍵開啟命令選擇區,鍵入
Azurite: Start Blob Service
,然後按 Enter 鍵,以啟動 Azurite Blob 儲存體服務仿真器。選取活動列中的 Azure 圖示,展開 [工作區]>[已連結的儲存體帳戶]>[本機仿真器],以滑鼠右鍵按一下 [Blob 容器],選取 [建立 Blob 容器...],輸入名稱
samples-workitems
,然後按 Enter 鍵。展開 [Blob 容器]>[samples-workitems],然後選取 [上傳檔案...]。
選擇要上傳至本機模擬容器的檔案。 此檔案稍後會由函數處理,以驗證和偵錯您的函數程式碼。 文字檔可能最適合 Blob 觸發程序範本程式碼。
在本機執行函式
模擬的儲存體中有檔案之後,您就可以執行函數,來模擬 Azure 事件方格訂閱所引發的事件。 傳遞至觸發程序的事件資訊取決於您新增至本機容器的檔案。
設定任何中斷點,然後按 F5 以啟動您的專案進行本機偵錯。 Azure Functions Core Tools 應該在您的終端機視窗中執行。
回到 Azure 區域,展開 [工作區]>[本機專案]>[函數],以滑鼠右鍵按一下 [函數],然後選取 [立即執行函數...]。
在要求本文對話框中,鍵入
samples-workitems/<TEST_FILE_NAME>
,將<TEST_FILE_NAME>
取代為您在本機儲存體模擬器中上傳的檔案名稱。按 Enter 鍵,以執行此命令。 您提供的值是 Blob 在本機模擬器中的路徑。 此字串會傳遞至要求承載中的觸發程序,模擬當事件訂閱呼叫函數以報告有 Blob 新增至容器時的承載。
檢閱此函數執行的輸出。 您應該會在輸出中看到檔案名稱及已記錄的內容。 如果有設定任何中斷點,您可能需要繼續執行。
現在您已在本機成功驗證函式程式碼,接下來就可以將專案發佈至 Azure 中的新函式應用程式。
準備 Azure 儲存體帳戶
Azure 儲存體的事件訂閱需要一般用途 v2 儲存體帳戶。 您可以使用適用於 Visual Studio Code 的 Azure 儲存體擴充建立此儲存體帳戶。
在 Visual Studio Code 中,再按一次 F1 鍵以開啟命令選擇區,並輸入
Azure Storage: Create Storage Account...
。 當出現提示時,請提供這項資訊:提示 動作 輸入新儲存體帳戶的名稱 提供全域唯一名稱。 儲存體帳戶名稱長度必須有 3 至 24 個字元,且只能包含小寫字母和數字。 為了方便識別,請在資源群組和函數應用程式名稱使用相同名稱。 選取新資源的位置 若要獲得較佳的效能,請選擇您附近的區域。 擴充功能會使用您提供的名稱,建立一般用途 v2 儲存體帳戶。 包含儲存體帳戶的資源群組也會使用相同的名稱。 基於 Azure 事件方格的 Blob 儲存體需要一般用途 v2 儲存體帳戶。
再按一下 F1 鍵,在命令選擇區中輸入
Azure Storage: Create Blob Container...
。 當出現提示時,請提供這項資訊:提示 動作 選取資源 選取您建立的一般用途的 v2 儲存體帳戶。 輸入新 Blob 容器的名稱 輸入 samples-workitems
,也就是程式碼專案中參考的容器名稱。
您的函數應用程式也需要儲存體帳戶才能執行。 為了簡單起見,本教學課程於您的 Blob 觸發程序和函數應用程式使用相同的儲存體帳戶。 不過,在實際執行環境中,您可以使用不同的儲存體帳戶搭配您的函數應用程式。 如需詳細資訊,請參閱 Azure Functions 的儲存體考量。
建立函數應用程式
透過這些步驟在 Flex Consumption 方案中建立函數應用程式。 當您的應用程式託管於 Flex Consumption 方案時,Blob 儲存體觸發程序必須使用事件訂閱。
在命令選擇區中,輸入 Azure Functions:在 Azure 中建立函式應用程式...(進階)。
按照提示提供下列資訊:
提示 選取項目 為新函式應用程式輸入全域唯一名稱。 輸入可識別您函數應用程式的全域唯一名稱,然後選取 Enter 鍵。 函式應用程式名稱的有效字元為 a-z
、0-9
和-
。選取主控方案。 選擇 [彈性取用 (預覽)]。 選取執行階段堆疊。 選擇您在本機上執行的語言堆疊和版本。 選取新資源的資源群組。 選擇您在其中建立儲存體帳戶的現有資源群組。 選取新資源的位置。 在支援的區域中選擇位置,此位置應靠近您或靠近函式可存取的其他服務。 不支援的區域不會顯示。 如需詳細資訊,請參閱檢視目前支援的區域。 選取儲存體帳戶。 選擇所建立儲存體帳戶的名稱。 選取應用程式的 Application Insights 資源。 選擇 [建立新的 Application Insights 資源],並在系統提示時提供用來儲存函式執行階段資料的執行個體名稱。 建立函數應用程式之後,即會顯示通知。 在此通知中選取 [檢視輸出],即可檢視建立結果,包括您所建立的 Azure 資源。
部署函式程式碼
重要
部署至現有的函數應用程式一律會覆寫該應用程式在 Azure 中的內容。
在命令選擇區中輸入 Azure Functions: Deploy to Function App,然後加以選取。
選取您剛才建立的函數應用程式。 當系統提示您覆寫先前的部署時,請選取 [部署],將函式程式碼部署至新的函數應用程式資源。
部署完成時,選取 [檢視輸出] 以檢視建立和部署結果,包括您所建立的 Azure 資源。 如果您錯過通知,請選取右下角的鈴鐺圖示,以再次查看。
更新應用程式設定
由於 local.settings.json
檔案需要的應用程式設定不會自動發佈,因此您必須將設定上傳至您的函數應用程式中,函數才能在 Azure 中正確執行。
在命令選擇區中輸入
Azure Functions: Download Remote Settings...
,然後在 [選取資源] 提示中選擇您的函數應程式名稱。當系統提示您
AzureWebJobsStorage
設定已經存在時,請選取 [是] 以使用來自 Azure 的實際儲存體帳戶連接字串覆寫本機仿真器設定。在
local.settings.json
檔案中,將本機仿真器設定取代為用於AzureWebJobsStorage
的相同連接字串。移除 Flex Consumption 方案不支援的
FUNCTIONS_WORKER_RUNTIME
項目。在命令選擇區中輸入
Azure Functions: Upload Local Settings...
,然後在 [選取資源] 提示中選擇您的函數應程式名稱。
現在,Functions 主機和觸發程序都共用相同的儲存體帳戶。
建置端點 URL
若要建立事件訂閱,您必須向 Azure 事件方格提供特定端點的 URL,以報告 Blob 儲存體事件。 此 Blob 擴充 URL 由下列部分組成:
部分 | 範例 |
---|---|
基礎函數應用程式 URL | https://<FUNCTION_APP_NAME>.azurewebsites.net |
Blob 特定路徑 | /runtime/webhooks/blobs |
函數查詢字串 | ?functionName=Host.Functions.BlobTriggerEventGrid |
Blob 擴充存取金鑰 | &code=<BLOB_EXTENSION_KEY> |
Blob 擴充存取金鑰的目的,是讓其他人更難存取您的 Blob 擴充端點。 若要確定您的 Blob 擴充存取金鑰:
在 Visual Studio Code 的 [活動] 列中,選取 Azure 圖示。 在 [資源] 中,依序展開您的訂閱和函式應用程式,以滑鼠右鍵按一下您建立的函式應用程式,然後選取 [在入口網站中開啟]。
在左側功能表中的 [函式] 底下,選取 [應用程式金鑰]。
在 [系統金鑰] 底下,選取名為 blobs_extension 的金鑰,然後複製金鑰值。
將此值包含在新端點的 URL 查詢字串中。
根據下列範例建立 Blob 儲存體觸發程序的新端點 URL:
https://<FUNCTION_APP_NAME>.azurewebsites.net/runtime/webhooks/blobs?functionName=Host.Functions.BlobTriggerEventGrid&code=<BLOB_EXTENSION_KEY>
在此範例中,以函式應用程式的名稱取代
<FUNCTION_APP_NAME>
,並以您從入口網站取得的值取代<BLOB_EXTENSION_KEY>
。 如果您的函數使用不同名稱,您也必須將functionName
查詢字串值變更為您的函數名稱。
您現在可以使用此端點 URL 建立事件訂閱。
建立事件訂閱
由 Azure 事件方格提供的事件訂閱,會根據訂閱的 Blob 容器變更引發事件。 此事件接著會傳送至您函數的 Blob 擴充端點。 建立事件訂閱之後,就無法更新端點 URL。
在 Visual Studio Code 的 [活動] 列中,選取 Azure 圖示。 在 [資源] 中,依序展開您的訂閱和儲存體帳戶,以滑鼠右鍵按一下您稍早建立的儲存體帳戶,然後選取 [在入口網站中開啟]。
登入 Azure 入口網站 並記下儲存體帳戶的資源群組。 將其他資源建立在同一個群組中,可以在完成時更輕鬆地清理資源。
從左側功能表中選取 [事件] 選項。
在 [事件] 視窗中,選取 [+ 事件訂閱] 按鈕,並將下表中的值提供給 [基本] 索引標籤:
設定 建議的值 名描述 名稱 myBlobEventSub 識別事件訂閱的名稱。 您可以使用名稱快速尋找事件訂閱。 事件結構描述 事件格線結構描述 使用事件的預設結構描述。 系統主題名稱 samples-workitems-blobs 代表容器的主題名稱。 此主題會隨著第一個訂閱建立,將用於未來的事件訂閱。 篩選至事件類型 已建立 Blob 端點類型 Webhook Blob 儲存體觸發程序會使用 Webhook 端點。 端點 您的 Azure URL 端點 使用您所建置且其中包含金鑰值的 URL 端點。 選取 [確認選取] 以驗證端點 URL。
選取 [建立] 以建立事件訂閱。
將檔案上傳至容器
您可以使用 Visual Studio Code,將檔案從您的電腦上傳至 Blob 儲存體容器。
在 Visual Studio Code 中按 F1 鍵開啟命令選擇區,然後鍵入
Azure Storage: Upload Files...
。在 [開啟] 對話方塊中選擇檔案,文字檔尤佳,然後選取 [上傳]。
提示中會提供下列資訊:
設定 建議的值 描述 輸入此上傳的目的地目錄 預設值 直接接受預設值 /
,即容器根目錄。選取資源 儲存體帳戶名稱 選擇您在上一個步驟中建立的儲存體帳戶名稱。 選取資源類型 Blob 容器 您正在上傳至 Blob 容器。 選取 Blob 容器 samples-workitems 此值是您在上一個步驟中建立的容器名稱。
瀏覽您的本機檔案系統以尋找要上傳的檔案,然後選取 [上傳] 按鈕以上傳檔案。
在 Azure 中驗證函式
將檔案上傳至 samples-workitems 容器後,函數應該就會被觸發。 您可以在 Azure 入口網站上檢查下列內容來驗證:
在您的儲存體帳戶中,前往 [事件]頁面,選取 [事件訂閱],應該會看到已傳遞一個事件。 事件在圖表上可能會有五分鐘的顯示延遲。
回到入口網站中的函數應用程式頁面,在 [函數] 下尋找您的函數,然後選取 [叫用與更多]。 應該會看到從成功的函數執行寫入的追蹤。
清除資源
當您繼續進行下一個步驟並將 Azure 儲存體佇列繫結新增至您的函式時,您必須保留所有資源,以您所完成的工作為基礎。
否則,您可以使用下列步驟來刪除函式應用程式及其相關資源,以避免產生任何額外的成本。
在 Visual Studio Code 中,按 F1 開啟命令選擇區。 在命令選擇區中,搜尋並選取
Azure: Open in portal
。選擇您的函數應用程式,並按下 Enter。 函式應用程式頁面會在 Azure 入口網站中開啟。
在 [概觀] 索引標籤中,選取 [資源群組] 旁的具名連結。
在 [資源群組] 分頁上,檢閱所含資源的清單,並確認這些是您想要刪除的項目。
選取 [刪除資源群組],並遵循指示。
刪除需要幾分鐘的時間。 完成時,通知會出現幾秒鐘的時間。 您也可以選取分頁頂端的鈴鐺圖示以檢視通知。
若要深入了解 Functions 成本,請參閱估計使用量方案成本。