共用方式為


快速入門:使用 Azure Functions 回應 blob 儲存事件

在這個快速入門中,你會使用 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。

先決條件

  • Node.js 18.x 或更高版本。 請使用 node --version 命令來檢查您的版本。

初始化專案

使用 azd init 指令面板中的指令,從範本建立本地的 Azure Functions 程式碼專案。

  1. 在 Visual Studio Code 中,開啟您要建立專案的資料夾或工作區。

  2. F1 開啟指令面板,搜尋並執行該指令 Azure Developer CLI (azd): Initialize App (init),然後選擇 「選擇範本」。

    初始化目前資料夾或工作區時 azd 可能會有輕微的延遲。

  1. 出現提示時,選擇 選取範本,然後搜尋並選取 Azure Functions C# Event Grid Blob Trigger using Azure Developer CLI

  2. 當終端機中提示時,輸入唯一的環境名稱,例如 blobevents-dotnet

    此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。

  1. 出現提示時,選擇 選取範本,然後搜尋並選取 Azure Functions Python Event Grid Blob Trigger using Azure Developer CLI

  2. 當終端機中提示時,輸入唯一的環境名稱,例如 blobevents-python

    此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。

  1. 出現提示時,選擇 選取範本,然後搜尋並選取 Azure Functions TypeScript Event Grid Blob Trigger using Azure Developer CLI

  2. 出現提示時,請輸入唯一的環境名稱,例如 blobevents-typescript

    此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。

  1. 出現提示時,選擇 選取範本,然後搜尋並選取 Azure Functions Java Event Grid Blob Trigger using Azure Developer CLI

  2. 出現提示時,請輸入唯一的環境名稱,例如 blobevents-java

    此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。

  1. 出現提示時,選擇 選取範本,然後搜尋並選取 Azure Functions PowerShell Event Grid Blob Trigger using Azure Developer CLI

  2. 出現提示時,請輸入唯一的環境名稱,例如 blobevents-powershell

    此命令會從 範本存放庫 提取專案檔,並在目前資料夾或工作區中初始化專案。

azd 中,該環境會為您的應用程式維護一個唯一的部署內容,而您可以定義多個部署內容。 它也是您在 Azure 中建立的資源群組名稱的一部分。

新增 local.settings.json 檔案

函式需要 local.settings.json 檔案來在本地運行時設定主機。

  1. 執行這個指令,前往應用程式資料夾:src

    cd src
    
  1. 在包含此 JSON 資料的 資料夾中,建立名為 src 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. 在包含此 JSON 資料的 資料夾中,建立名為 src 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "java",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. 在包含此 JSON 資料的 資料夾中,建立名為 src 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "node",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. 在包含此 JSON 資料的 資料夾中,建立名為 src 的檔案:

    {
        "IsEncrypted": false,
        "Values": {
            "AzureWebJobsStorage": "UseDevelopmentStorage=true",
            "FUNCTIONS_WORKER_RUNTIME": "powershell",
            "FUNCTIONS_WORKER_RUNTIME_VERSION": "7.2",
            "PDFProcessorSTORAGE": "UseDevelopmentStorage=true"
        }
    }
    
  1. 在包含此 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 模擬器在本機執行程式碼專案。

  1. 如果您還沒有安裝,請 安裝 Azurite

  2. F1。 在命令選項板中,搜尋並執行命令 Azurite: Start 以啟動本機儲存模擬器。

  3. Azure 區域,展開「 Workspace>Attached Storage Account>Local Emulator」,右鍵點擊(Mac 則是 Ctrl-click) Blob 容器,選擇 「建立 Blob Container...」,然後在本地模擬器中建立這兩個 blob 儲存容器:

    • unprocessed-pdf:觸發器監控儲存事件的容器。
    • processed-pdf: 容器,函式將已處理的 blob 作為輸出。
  4. 展開 Blob 容器,右鍵點擊(Mac 上是 Ctrl-click) unprocessed-pdf,選擇 「上傳檔案...」,按下 Enter 接受根目錄,然後從專案資料夾上傳 PDF 檔案 data

本地執行時,你可以利用 REST 來觸發函式,方法是模擬該函式接收到來自事件訂閱的訊息。

在本機執行函式

Visual Studio Code 與 Azure Functions 核心工具 整合,可讓您使用 Azurite 模擬器在本機開發電腦上執行此專案。 PDFProcessorSTORAGE環境變數定義儲存帳號連線,當本地執行時,該連線也會設定為 "UseDevelopmentStorage=true" local.settings.json 檔案中。

  1. 請從 src 專案資料夾中的終端機或命令提示字元執行此指令:

    func start
    
    mvn clean package
    mvn azure-functions:run
    
    npm install
    func start  
    
    npm install
    npm start  
    

    當函式主機啟動時,會將觸發器的名稱和觸發類型寫入終端機輸出。 在 Functions 中,專案根目錄包含 host.json 檔案。

  2. Core Tools 仍在 終端 執行時,打開專案中的 test.http 檔案,選擇 發送要求,透過向 Blob 事件 Webhook 發送測試 Blob 事件來觸發ProcessBlobUpload函數。

    此步驟模擬在本機執行時,從事件訂閱接收事件的過程,您應該會在記錄中看到要求以及已處理檔案的資訊。 如果你沒有使用 REST 客戶端,必須使用另一個安全的 REST 工具來呼叫帶有 payload 的 test.http端點。

  3. 在 Workspace 的 blob 容器區域,展開 processed-pdf,並確認函式已處理 PDF 檔案,並以 processed- 前綴進行複製。

  4. 當您完成時,請在終端機視窗中按 Ctrl+C 以停止 func.exe 主機程序。

檢閱程式碼 (選用)

你可以在 ProcessBlobUpload.cs專案檔案中查看定義事件網格 blob 觸發器的程式碼。 該函數示範如何:

  • 使用BlobTriggerSource = BlobTriggerSource.EventGrid進行近即時處理
  • 繫結到來源 blob 的 BlobClient 和目的地的 BlobContainerClient
  • 處理 blob 內容並透過串流複製到另一個容器

你可以在 function_app.py 專案檔案中查看定義事件網格 blob 觸發器的程式碼。 該函數示範如何:

  • 使用@app.blob_triggersource="EventGrid"進行近即時處理
  • 使用 參數 InputStream 存取 blob 內容
  • 使用 Azure Storage SDK 將處理中的檔案複製到目的地容器

你可以在 processBlobUpload.ts 專案檔案中查看定義事件網格 blob 觸發器的程式碼。 該函數示範如何:

  • 使用app.storageBlob()source: 'EventGrid'進行近即時處理
  • 使用 Node.js Azure Storage SDK 存取 blob 內容
  • 非同步處理並複製檔案到目的地容器

你可以在 ProcessBlobUpload.java 專案檔案中查看定義事件格子 blob 觸發器的程式碼。 該函數示範如何:

  • 使用@BlobTriggersource = "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 的新函式應用程式。

  1. 在 Visual Studio Code 中,按 F1 以開啟命令選擇區。 搜尋並執行該指令 Azure Developer CLI (azd): Sign In with Azure Developer CLI,然後用你的 Azure 帳號登入。

  2. 在專案根目錄中,按 F1 開啟指令面板。 搜尋並執行 Azure Developer CLI (azd): Provision and Deploy (up) 指令來建立所需的 Azure 資源並部署你的程式碼。

  3. 當「終端機」視窗中出現提示時,請提供以下必要的部署引數:

    Prompt Description
    選取要使用的 Azure 訂用帳戶 選擇你想建立資源的訂閱方式。
    環境名稱 用來維護應用程式唯一部署內容的環境。
    Azure 位置 要在其中建立包含新 Azure 資源之資源群組所在的 Azure 區域。 只會顯示目前支援彈性使用量方案的區域。

    azd up 指令會利用你對這些提示的回應,搭配 Bicep 設定檔,依照最新最佳實務建立並設定這些必需的 Azure 資源:

    • 彈性使用量方案和函數應用程式
    • Azure 儲存帳戶與 Blob 容器
    • 應用洞察(推薦)
    • 存取帳戶的原則和角色
    • Azure 事件方格訂閱適用於 Blob 事件
    • 透過使用受管理身份(而非儲存的連接字串)實現服務對服務的連線

    指令成功完成後,你的應用程式會在 Azure 上運行,並已設定事件訂閱,以便在 Blob 加入 unprocessed-pdf 容器時觸發你的函式。

  4. 在輸出中記下AZURE_STORAGE_ACCOUNT_NAMEAZURE_FUNCTION_APP_NAME。 這些名稱分別是你的儲存帳號和 Azure 功能應用程式的專用名稱。

驗證已部署的功能

  1. 在 Visual Studio Code 中,按下 F1。 在指令面板中,搜尋並執行指令 Azure Storage: Upload Files...。 接受根目錄,並像之前一樣從專案資料夾上傳一個或多個 PDF 檔案 data

  2. 當被要求時,從AZURE_STORAGE_ACCOUNT_NAME中選擇你新儲存帳號的名稱。 選擇 Blob Containers>unprocessed-pdf

  3. F1。 在指令面板中,搜尋並執行指令 Azure Storage: Open in Explorer。 選擇相同的儲存帳號 >Blob Containers>processed-pdf,然後在 新視窗開啟

  4. 在資源管理器中,確認你上傳的 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 刪除您的資源群組,而不需要您確認。

此命令不會影響您的本機程式碼專案。