在這個快速入門中,你會使用 Visual Studio Code 來建立一個能回應 Blob Storage 容器事件的應用程式。 在用模擬器在本地測試程式碼後,你會部署到一個新的無伺服器函式應用程式,該應用程式在 Azure Functions 的 Flex Consumption 計畫中運行。
本專案使用 Azure Developer CLI (azd) 擴充功能搭配 Visual Studio Code,簡化專案程式碼的初始化與驗證,並將程式碼部署至 Azure。 此部署遵循目前安全且可調整的 Azure Functions 部署最佳做法。
本文章支援 Azure Functions 的 Node.js 程式設計模型版本 4。
本文章支援 Azure Functions 的 Python 程式設計模型版本 2。
先決條件
具有有效訂閱的 Azure 帳戶。 免費建立帳戶。
其中一個支援的平台上有 Visual Studio Code。
適用於 Visual Studio Code 的 Azure Functions 擴充功能。 此延伸模組需要 Azure Functions 核心工具。 當此工具在本機無法使用時,延伸模組會嘗試使用套件型安裝程式來安裝它。 您也可以從命令選項板執行
Azure Functions: Install or Update Azure Functions Core Tools來安裝或更新核心工具套件。 如果您沒有在本機電腦上安裝 npm 或 Homebrew,您必須改為手動安裝或更新 Core Tools。
適用於 Visual Studio Code 的 C# 擴充功能 (英文)。
Java 開發套件,版本 8、11、17 或 21(Linux)。
Apache Maven 3.0 版或更高版本。
-
Node.js 18.x 或更高版本。 請使用
node --version命令來檢查您的版本。
Azure Functions 支援的 Python 版本。 如需詳細資訊,請參閱如何安裝 Python。
適用於 Visual Studio Code 的 Python 擴充功能。
- 適用於 Visual Studio Code 的 Azure 開發人員 CLI 延伸模組 。
REST 客戶端擴充功能或你用來安全執行 HTTP 請求的等效 REST 工具。
初始化專案
使用 azd init 指令面板中的指令,從範本建立本地的 Azure Functions 程式碼專案。
在 Visual Studio Code 中,開啟您要建立專案的資料夾或工作區。
按 F1 開啟指令面板,搜尋並執行該指令
Azure Developer CLI (azd): Initialize App (init),然後選擇 「選擇範本」。初始化目前資料夾或工作區時
azd可能會有輕微的延遲。
出現提示時,選擇 選取範本,然後搜尋並選取
Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI。當終端機中提示時,輸入唯一的環境名稱,例如
blobevents-dotnet。此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。
出現提示時,選擇 選取範本,然後搜尋並選取
Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI。當終端機中提示時,輸入唯一的環境名稱,例如
blobevents-python。此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。
出現提示時,選擇 選取範本,然後搜尋並選取
Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI。出現提示時,請輸入唯一的環境名稱,例如
blobevents-typescript。此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。
出現提示時,選擇 選取範本,然後搜尋並選取
Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI。出現提示時,請輸入唯一的環境名稱,例如
blobevents-java。此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。
出現提示時,選擇 選取範本,然後搜尋並選取
Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI。出現提示時,請輸入唯一的環境名稱,例如
blobevents-powershell。此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。
在 azd 中,該環境會為您的應用程式維護一個唯一的部署內容,而您可以定義多個部署內容。 它也是您在 Azure 中建立的資源群組名稱的一部分。
新增 local.settings.json 檔案
函式需要 local.settings.json 檔案來在本地運行時設定主機。
執行這個指令,前往應用程式資料夾:
srccd src
在包含此 JSON 資料的 資料夾中,建立名為
src的檔案:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "PDFProcessorSTORAGE": "UseDevelopmentStorage=true" } }
在包含此 JSON 資料的 資料夾中,建立名為
src的檔案:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "java", "PDFProcessorSTORAGE": "UseDevelopmentStorage=true" } }
在包含此 JSON 資料的 資料夾中,建立名為
src的檔案:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "node", "PDFProcessorSTORAGE": "UseDevelopmentStorage=true" } }
在包含此 JSON 資料的 資料夾中,建立名為
src的檔案:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2", "PDFProcessorSTORAGE": "UseDevelopmentStorage=true" } }
在包含此 JSON 資料的 資料夾中,建立名為
src的檔案:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "python", "PDFProcessorSTORAGE": "UseDevelopmentStorage=true" } }
建立並啟用虛擬環境
在 src 資料夾中,執行這些指令以建立並啟用一個名為 .venv 的虛擬環境:
python3 -m venv .venv
source .venv/bin/activate
如果 Python 沒有在你的 Linux 發行版安裝 venv 套件,請執行以下指令:
sudo apt-get install python3-venv
設定本地儲存模擬器
在建立和使用 Azure 資源之前,使用 Azurite 模擬器在本機執行程式碼專案。
如果您還沒有安裝,請 安裝 Azurite。
按 F1。 在命令選項板中,搜尋並執行命令
Azurite: Start以啟動本機儲存模擬器。在 Azure 區域,展開「 Workspace>Attached Storage Account>Local Emulator」,右鍵點擊(Mac 則是 Ctrl-click) Blob 容器,選擇 「建立 Blob Container...」,然後在本地模擬器中建立這兩個 blob 儲存容器:
-
unprocessed-pdf:觸發器監控儲存事件的容器。 -
processed-pdf: 容器,函式將已處理的 blob 作為輸出。
-
展開 Blob 容器,右鍵點擊(Mac 上是 Ctrl-click) unprocessed-pdf,選擇 「上傳檔案...」,按下 Enter 接受根目錄,然後從專案資料夾上傳 PDF 檔案
data。
本地執行時,你可以利用 REST 來觸發函式,方法是模擬該函式接收到來自事件訂閱的訊息。
在本機執行函式
Visual Studio Code 與 Azure Functions 核心工具 整合,可讓您使用 Azurite 模擬器在本機開發電腦上執行此專案。
PDFProcessorSTORAGE環境變數定義儲存帳號連線,當本地執行時,該連線也會設定為 "UseDevelopmentStorage=true" local.settings.json 檔案中。
請從
src專案資料夾中的終端機或命令提示字元執行此指令:func startmvn clean package mvn azure-functions:runnpm install func startnpm install npm start當函式主機啟動時,會將觸發器的名稱和觸發類型寫入終端機輸出。 在 Functions 中,專案根目錄包含 host.json 檔案。
Core Tools 仍在 終端 執行時,打開專案中的
test.http檔案,選擇 發送要求,透過向 Blob 事件 Webhook 發送測試 Blob 事件來觸發ProcessBlobUpload函數。此步驟模擬在本機執行時,從事件訂閱接收事件的過程,您應該會在記錄中看到要求以及已處理檔案的資訊。 如果你沒有使用 REST 客戶端,必須使用另一個安全的 REST 工具來呼叫帶有 payload 的
test.http端點。在 Workspace 的 blob 容器區域,展開 processed-pdf,並確認函式已處理 PDF 檔案,並以
processed-前綴進行複製。當您完成時,請在終端機視窗中按 Ctrl+C 以停止
func.exe主機程序。
檢閱程式碼 (選用)
你可以在 ProcessBlobUpload.cs專案檔案中查看定義事件網格 blob 觸發器的程式碼。 該函數示範如何:
- 使用
BlobTrigger和Source = BlobTriggerSource.EventGrid進行近即時處理 - 繫結到來源 blob 的
BlobClient和目的地的BlobContainerClient - 處理 blob 內容並透過串流複製到另一個容器
你可以在 function_app.py 專案檔案中查看定義事件網格 blob 觸發器的程式碼。 該函數示範如何:
- 使用
@app.blob_trigger和source="EventGrid"進行近即時處理 - 使用 參數
InputStream存取 blob 內容 - 使用 Azure Storage SDK 將處理中的檔案複製到目的地容器
你可以在 processBlobUpload.ts 專案檔案中查看定義事件網格 blob 觸發器的程式碼。 該函數示範如何:
- 使用
app.storageBlob()和source: 'EventGrid'進行近即時處理 - 使用 Node.js Azure Storage SDK 存取 blob 內容
- 非同步處理並複製檔案到目的地容器
你可以在 ProcessBlobUpload.java 專案檔案中查看定義事件格子 blob 觸發器的程式碼。 該函數示範如何:
- 使用
@BlobTrigger和source = "EventGrid"進行近即時處理 - 使用
BlobInputStream參數存取 blob 內容 - 使用 Azure Storage SDK for Java 將處理中的檔案複製到目的地容器
你可以在 ProcessBlobUpload/run.ps1 專案檔案 中查看定義事件網格 blob 觸發器的程式碼,以及對應 的function.json。 該函數示範如何:
- 以 function.json 中的
"source": "EventGrid"設定 blob 觸發程序器以實現近即時處理 - 使用 PowerShell Azure Storage Cmdlet 存取 Blob 內容
- 使用 Azure PowerShell 模組處理並複製檔案到目的地容器
在本機檢閱並驗證函式程式碼之後,就可以將專案發佈至 Azure。
建立 Azure 資源並部署
使用此 azd up 指令在 Flex Consumption 計畫中建立函式應用程式,並建立包括事件訂閱在內的其他必要 Azure 資源。 基礎架構準備好後, azd 也會將專案程式碼部署到 Azure 的新函式應用程式。
在 Visual Studio Code 中,按 F1 以開啟命令選擇區。 搜尋並執行該指令
Azure Developer CLI (azd): Sign In with Azure Developer CLI,然後用你的 Azure 帳號登入。在專案根目錄中,按 F1 開啟指令面板。 搜尋並執行
Azure Developer CLI (azd): Provision and Deploy (up)指令來建立所需的 Azure 資源並部署你的程式碼。當「終端機」視窗中出現提示時,請提供以下必要的部署引數:
Prompt Description 選取要使用的 Azure 訂用帳戶 選擇你想建立資源的訂閱方式。 環境名稱 用來維護應用程式唯一部署內容的環境。 Azure 位置 要在其中建立包含新 Azure 資源之資源群組所在的 Azure 區域。 只會顯示目前支援彈性使用量方案的區域。 該
azd up指令會利用你對這些提示的回應,搭配 Bicep 設定檔,依照最新最佳實務建立並設定這些必需的 Azure 資源:- 彈性使用量方案和函數應用程式
- Azure 儲存帳戶與 Blob 容器
- 應用洞察(推薦)
- 存取帳戶的原則和角色
- Azure 事件方格訂閱適用於 Blob 事件
- 透過使用受管理身份(而非儲存的連接字串)實現服務對服務的連線
指令成功完成後,你的應用程式會在 Azure 上運行,並已設定事件訂閱,以便在 Blob 加入
unprocessed-pdf容器時觸發你的函式。在輸出中記下
AZURE_STORAGE_ACCOUNT_NAME和AZURE_FUNCTION_APP_NAME。 這些名稱分別是你的儲存帳號和 Azure 功能應用程式的專用名稱。
驗證已部署的功能
在 Visual Studio Code 中,按下 F1。 在指令面板中,搜尋並執行指令
Azure Storage: Upload Files...。 接受根目錄,並像之前一樣從專案資料夾上傳一個或多個 PDF 檔案data。當被要求時,從
AZURE_STORAGE_ACCOUNT_NAME中選擇你新儲存帳號的名稱。 選擇 Blob Containers>unprocessed-pdf。按 F1。 在指令面板中,搜尋並執行指令
Azure Storage: Open in Explorer。 選擇相同的儲存帳號 >Blob Containers>processed-pdf,然後在 新視窗開啟。在資源管理器中,確認你上傳的 PDF 檔案是否已被你的函式處理。 輸出會寫入具有
processed-pdf前綴的processed-容器。
Event Grid 的 blob 觸發器會在上傳後幾秒內處理檔案。 此速度展現了此方法相較於傳統輪詢式 Blob 觸發程序的近即時功能。
重新部署程式碼
執行 azd up 這個指令可以讓你根據需要多次配置 Azure 資源,並將程式碼更新部署到你的函式應用程式。
備註
最新的部署套件一律會覆寫已部署的程式碼檔案。
您對 azd 提示的初始回應,以及 azd 所產生的任何環境變數都會儲存在本機的具名環境中。 使用 azd env get-values 命令來檢閱您環境中建立 Azure 資源時所使用的所有變數。
清理資源
當你完成函式應用程式和相關資源的操作後,使用這個指令從 Azure 刪除函式應用程式及其相關資源。 此舉有助於避免額外費用:
azd down --no-prompt
備註
--no-prompt 選項會指示 azd 刪除您的資源群組,而不需要您確認。
此命令不會影響您的本機程式碼專案。