共用方式為


教學課程:使用事件訂閱在 Blob 容器上觸發 Azure Functions

舊版的 Azure Functions Blob 記憶體觸發程式會輪詢您的記憶體容器是否有變更。 較新版本的 Blob 記憶體擴充功能 (5.x+) 會改用容器上的 Event Grid 事件訂用帳戶。 當訂閱的容器發生變更時,此事件訂用帳戶會立即觸發函式來減少延遲。

本文說明如何建立以 Blob 新增至容器時所引發的事件為基礎執行的函式。 您可以使用 Visual Studio Code 進行本機開發,並在將專案部署至 Azure 之前驗證您的程式代碼。

  • 在新專案中建立以事件為基礎的 Blob 記憶體觸發函式。
  • 使用 Azurite 模擬器在 Visual Studio Code 中本機驗證。
  • 在 Azure 的新記憶體帳戶中建立 Blob 記憶體容器。
  • 在 Flex 取用方案中建立函式應用程式(預覽)。
  • 建立新 Blob 容器的事件訂用帳戶。
  • 在 Azure 中部署和驗證您的函式程式代碼。

本文支援 Azure Functions Node.js程序設計模型的第 4 版。

本文支援適用於 Azure Functions 的 Python 程式設計模型第 2 版。

本文會建立以隔離背景工作模式執行的 C# 應用程式,其支援 .NET 8.0。

重要

本教學課程可讓您使用目前處於預覽狀態的 Flex 取用方案。 Flex Consumption 方案僅支援以事件為基礎的 Blob 記憶體觸發程式版本。 您可以使用函式應用程式的任何其他 主控方案來完成本教學課程

必要條件

注意

適用於 Visual Studio Code 的 Azure 儲存體延伸模組目前為預覽狀態。

建立由 Blob 觸發的函式

當您使用 Visual Studio Code 建立 Blob 記憶體觸發程式函式時,您也會建立新的專案。 您必須編輯函式以取用事件訂用帳戶作為來源,而不是使用一般輪詢的容器。

  1. 在 Visual Studio Code 中開啟您的函數應用程式。

  2. 按 F1 開啟命令選擇區,輸入 Azure Functions: Create Function...,然後選取 [ 建立新專案]。

  3. 針對您的專案工作區,選取目錄位置。 請確定您建立新的資料夾,或為專案工作區選擇空白資料夾。

    請勿選擇已屬於工作區一部分的專案資料夾。

  4. 依照提示提供下列資訊:

    提示 動作
    選取語言 選取 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

升級儲存體擴充功能

若要使用事件方格型 Blob 記憶體觸發程式,您必須至少有 5.x 版的 Azure Functions 記憶體擴充功能。

若要使用必要的擴充功能版本升級專案,請在 [終端機] 視窗中執行下列 dotnet add package 命令:

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 
  1. 開啟host.json項目檔,然後檢閱 extensionBundle 專案。

  2. 如果 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 儲存體 服務。

  1. 如果尚未這麼做,請安裝適用於 Visual Studio CodeAzurite v3 擴充功能。

  2. 確認 local.settings.json 檔案已 "UseDevelopmentStorage=true" 設定為 AzureWebJobsStorage,這會告訴 Core Tools 在本機執行時使用 Azurite,而不是實際的記憶體帳戶連線。

  3. 按 F1 開啟命令選擇區,輸入 Azurite: Start Blob Service,然後按 Enter 鍵,以啟動 Azurite Blob 記憶體服務模擬器。

  4. 選取活動列中的 Azure 圖示,展開 [工作區>連結記憶體帳戶>本機模擬器],以滑鼠右鍵按兩下 [Blob 容器],選取 [建立 Blob 容器...],輸入名稱 samples-workitems,然後按 Enter。

    顯示如何在 Visual Studio Code 中的本機模擬中選取 [建立 Blob 容器] 的螢幕快照。

  5. 展開 [Blob 容器>範例-工作專案],然後選取 [上傳檔案...]。

    顯示如何在 Visual Studio Code 中本機仿真的 samples-workitems 容器中選取 [上傳檔案] 的螢幕快照。

  6. 選擇要上傳至本機模擬容器的檔案。 此檔案稍後會由函式處理,以驗證和偵錯您的函式程序代碼。 文字檔可能最適合使用 Blob 觸發程式範本程式代碼。

在本機執行函式

透過模擬記憶體中的檔案,您可以執行函式來模擬事件方格訂用帳戶所引發的事件。 傳遞至觸發程式的事件信息取決於您新增至本機容器的檔案。

  1. 設定任何斷點,然後按 F5 啟動您的項目進行本機偵錯。 Azure Functions Core Tools 應該在您的終端機視窗中執行。

  2. 回到 Azure 區域,展開 [工作區>本機專案>式],以滑鼠右鍵按兩下函式,然後選取 [立即執行函式...]。

    顯示如何從 Visual Studio Code 本機專案工作區中的函式選取 [立即執行函式] 按鈕的螢幕快照。

  3. 在 [要求本文] 對話框中,輸入 samples-workitems/<TEST_FILE_NAME>,將 取代 <TEST_FILE_NAME> 為您在本機記憶體模擬器中上傳的檔名。

  4. 按 Enter 鍵以執行函式。 您提供的值是本機模擬器中 Blob 的路徑。 此字串會傳遞至要求承載中的觸發程式,以模擬事件訂用帳戶呼叫函式以報告要新增至容器的 Blob 時裝載。

  5. 檢閱此函式執行的輸出。 您應該會在輸出中看到檔案的名稱及其記錄的內容。 如果您設定任何斷點,您可能需要繼續執行。

現在您已在本機成功驗證函式程式碼,接下來就可以將專案發佈至 Azure 中的新函式應用程式。

準備 Azure 儲存體 帳戶

Azure 儲存體 的事件訂用帳戶需要一般用途 v2 儲存器帳戶。 您可以使用適用於 Visual Studio Code 的 Azure 儲存體 擴充功能來建立此儲存器帳戶。

  1. 在 Visual Studio Code 中,再次按 F1 以開啟命令選擇區並輸入 Azure Storage: Create Storage Account...。 出現提示時提供這項資訊:

    提示 動作
    輸入新儲存體帳戶的名稱 提供全域唯一名稱。 儲存體帳戶名稱長度必須有 3 至 24 個字元,且只能包含小寫字母和數字。 為了更容易識別,我們會針對資源群組和函式應用程式名稱使用相同的名稱。
    選取新資源的位置 若要獲得較佳的效能,請選擇您附近的區域

    擴充功能會使用您提供的名稱,建立一般用途 v2 儲存體帳戶。 包含儲存體帳戶的資源群組也會使用相同的名稱。 事件方格型 Blob 記憶體觸發程式需要一般用途 v2 儲存器帳戶。

  2. 再次按 F1,並在命令選擇區中輸入 Azure Storage: Create Blob Container...。 出現提示時提供這項資訊:

    提示 動作
    選取資源 選取您所建立的一般用途 v2 儲存體帳戶。
    輸入新 Blob 容器的名稱 輸入 samples-workitems,也就是程式碼專案中參考的容器名稱。

您的函式應用程式也需要記憶體帳戶才能執行。 為了簡單起見,本教學課程會針對 Blob 觸發程式和函式應用程式使用相同的記憶體帳戶。 不過,在實際執行環境中,您可以使用不同的儲存體帳戶搭配您的函數應用程式。 如需詳細資訊,請參閱 Azure Functions 的儲存體考量

建立函數應用程式

使用這些步驟在 Flex 取用方案中建立函式應用程式。 當您的應用程式裝載於 Flex 取用方案時,Blob 記憶體觸發程式必須使用事件訂用帳戶。

  1. 在命令選擇區中,輸入 Azure Functions:在 Azure 中建立函式應用程式...(進階)

  2. 按照提示提供下列資訊:

    提示 選取項目
    為新函式應用程式輸入全域唯一名稱。 輸入可識別您函數應用程式的全域唯一名稱,然後選取 Enter 鍵。 函式應用程式名稱的有效字元為 a-z0-9-
    選取主控方案。 選擇 [彈性取用 (預覽)]
    選取執行階段堆疊。 選擇您在本機執行的語言堆疊和版本。
    選取新資源的資源群組。 選擇您建立記憶體帳戶的現有資源群組。
    選取新資源的位置。 在支援的區域中選擇位置,此位置應靠近您或靠近函式可存取的其他服務。 不支援的區域不會顯示。 如需詳細資訊,請參閱檢視目前支援的區域
    選取儲存體帳戶。 選擇您建立的記憶體帳戶名稱。
    選取應用程式的 Application Insights 資源。 選擇 [建立新的 Application Insights 資源],並在系統提示時提供用來儲存函式執行階段資料的執行個體名稱。

    建立函式應用程式之後會出現通知。 選取 此通知中的 [檢視輸出 ] 以檢視建立結果,包括您所建立的 Azure 資源。

部署函式程序代碼

重要

部署至現有的函數應用程式一律會覆寫該應用程式在 Azure 中的內容。

  1. 在命令選擇區中,搜尋並執行 命令 Azure Functions: Deploy to Function App...

  2. 選取您剛才建立的函式應用程式。 當系統提示您覆寫先前的部署時,請選取 [部署],將函式程式碼部署至新的函數應用程式資源。

  3. 部署完成時,選取 [檢視輸出] 即可檢視建立和部署結果,包括您所建立的 Azure 資源。 如果您錯過通知,請選取右下角的鈴鐺圖示,以再次查看。

    [檢視輸出] 視窗的螢幕擷取畫面。

更新應用程式設定

由於檔案中的必要應用程式設定 local.settings.json 不會自動發佈,因此您必須將它們上傳至函式應用程式,讓您的函式在 Azure 中正確執行。

  1. 在命令板中,輸入 Azure Functions: Download Remote Settings...,然後在 [選取資源 提示字元] 中選擇函式應用程式的名稱。

  2. 當系統提示您已存在設定時AzureWebJobsStorage,請選取 [] 以從 Azure 連接字串 的實際記憶體帳戶覆寫本機模擬器設定。

  3. 在檔案中local.settings.json,將本機模擬器設定取代為AzureWebJobsStorage所使用的相同 連接字串。

  4. FUNCTIONS_WORKER_RUNTIME拿掉彈性取用方案不支援的專案。

  5. 在命令板中,輸入 Azure Functions: Upload Local Settings...,然後在 [選取資源 提示字元] 中選擇函式應用程式的名稱。

現在 Functions 主機和觸發程式都共用相同的記憶體帳戶。

建置端點 URL

若要建立事件訂用帳戶,您必須提供事件方格,並提供特定端點的 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 延伸模組存取金鑰:

  1. 在 Visual Studio Code 的 [活動] 列中,選取 Azure 圖示。 在 [資源] 中,依序展開您的訂閱和函式應用程式,以滑鼠右鍵按一下您建立的函式應用程式,然後選取 [在入口網站中開啟]

  2. 在左側功能表中的 [函式] 底下,選取 [應用程式金鑰]

  3. 在 [系統金鑰] 底下,選取名為 blobs_extension 的金鑰,然後複製金鑰

    您會在新端點 URL 的查詢字串中包含此值。

  4. 根據下列範例建立 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。

  1. 在 Visual Studio Code 的 [活動] 列中,選取 Azure 圖示。 在 [資源] 中,依序展開您的訂閱和儲存體帳戶,以滑鼠右鍵按一下您稍早建立的儲存體帳戶,然後選取 [在入口網站中開啟]

  2. 登入 Azure 入口網站 並記下儲存體帳戶的資源群組。 您會在相同的群組中建立其他資源,讓您在完成時更容易清除資源。

  3. 從左側功能表中選取 [事件] 選項。

    新增記憶體帳戶事件

  4. 在 [事件] 視窗中,選取 [+ 事件訂閱] 按鈕,並將下表中的值提供給 [基本] 索引標籤:

    設定 建議的值 名描述
    名稱 myBlobEventSub 識別事件訂閱的名稱。 您可以使用名稱快速尋找事件訂閱。
    事件結構描述 事件格線結構描述 使用事件的預設結構描述。
    系統主題名稱 samples-workitems-blobs 代表容器的主題名稱。 此主題會隨著第一個訂閱建立,將用於未來的事件訂閱。
    篩選至事件類型 已建立 Blob
    端點類型 Webhook Blob 儲存體觸發程序會使用 Webhook 端點。
    端點 您的 Azure URL 端點 使用您所建置且其中包含金鑰值的 URL 端點。
  5. 選取 [確認選取] 以驗證端點 URL。

  6. 選取 [建立] 以建立事件訂閱。

將檔案上傳至容器

您可以使用 Visual Studio Code,將檔案從您的電腦上傳至 Blob 儲存體容器。

  1. 在 Visual Studio Code 中,按 F1 開啟命令選擇區並輸入 Azure Storage: Upload Files...

  2. 在 [ 開啟 ] 對話框中,選擇檔案,最好是文本文件,然後選取 [ 上傳 ]。

  3. 提示中會提供下列資訊:

    設定 建議的值 描述
    輸入此上傳的目的地目錄 預設值 直接接受預設值 /,即容器根目錄。
    選取資源 儲存體帳戶名稱 選擇您在上一個步驟中建立的儲存體帳戶名稱。
    選取資源類型 Blob 容器 您正在上傳至 Blob 容器。
    選取 Blob 容器 samples-workitems 此值是您在上一個步驟中建立的容器名稱。

瀏覽本機檔系統以尋找要上傳的檔案,然後選取 [上傳 ] 按鈕以上傳檔案。

在 Azure 中驗證函式

既然您已將檔案上傳至 samples-workitems 容器,應該觸發函式。 您可以在 Azure 入口網站 上檢查下列項目來確認:

  1. 在您的記憶體帳戶中,移至 [事件 ] 頁面,選取 [事件訂閱],您應該會看到已傳遞事件。 事件可能會在圖表上顯示五分鐘的延遲。

  2. 回到入口網站中的函式應用程式頁面,在 [函式] 下尋找您的函式,然後選取 [叫用等等]。 您應該會看到從成功函式執行所撰寫的追蹤。

清除資源

當您繼續進行下一個步驟並將 Azure 儲存體佇列繫結新增至您的函式時,您必須保留所有資源,以您所完成的工作為基礎。

否則,您可以使用下列步驟來刪除函式應用程式及其相關資源,以避免產生任何額外的成本。

  1. 在 Visual Studio Code 中,按 F1 開啟命令選擇區。 在命令選擇區中,搜尋並選取 Azure: Open in portal

  2. 選擇您的函數應用程式,並按下 Enter。 函式應用程式頁面會在 Azure 入口網站中開啟。

  3. 在 [概觀] 索引標籤中,選取 [資源群組] 旁的具名連結。

    從函式應用程式頁面選取要刪除的資源群組螢幕快照。

  4. 在 [資源群組] 分頁上,檢閱所含資源的清單,並確認這些是您想要刪除的項目。

  5. 選取 [刪除資源群組],並遵循指示。

    刪除需要幾分鐘的時間。 完成時,通知會出現幾秒鐘的時間。 您也可以選取分頁頂端的鈴鐺圖示以檢視通知。

若要深入了解 Functions 成本,請參閱估計使用量方案成本

下一步