共用方式為


教學課程:以 Azure Blob 儲存體作為輸入的 Python 函式

在本教學課程中,您將瞭解如何完成下列工作,以 Azure Blob 記憶體設定 Python 函式作為輸入:

  • 使用 Visual Studio Code 建立 Python 函式專案。
  • 變更程式碼以新增儲存體 Blob 輸入函式繫結。
  • 使用 Visual Studio Code 在本機執行函式。
  • 使用 Azure CLI 建立 Azure Function 與具有服務連接器的儲存體 Blob 之間的連線。
  • 使用 Visual Studio 部署函式。

本教學課程中函式專案元件的概觀:

專案元件 選取項目 / 解決方案
來源服務 Azure 函式
目標服務 Azure 儲存體 Blob
函式繫結 HTTP 觸發程序,儲存體 Blob 作為輸入
本機專案驗證類型 連接字串
雲端函式驗證類型 系統指派的受控識別

警告

Microsoft 建議您使用最安全的可用驗證流程。 這個程序描述的驗證流程需要在應用程式中具備極高的信任度,且伴隨著其他流程並未面臨的風險。 請僅在其他較安全的流程 (例如受控身分識別) 皆不具可行性的情況下,才使用這個流程。

必要條件

建立 Python 函式專案

請遵循教學課程來建立本機 Azure Functions 專案,並在提示中提供下列資訊:

提示 選取項目
選取語言 選擇 Python。 (v1 程式設計語言模型)
選取 Python 解譯器來建立虛擬環境 選擇您慣用的 Python 解譯器。 如果選項未顯示,請輸入 Python 二進位檔的完整路徑。
為專案的第一個函式選取範本 選擇 HTTP trigger
提供函式名稱 輸入 BlobStorageInputFunc
授權等級 選擇 Anonymous,讓任何人都能呼叫您的函式端點。 

您已使用 HTTP 觸發程序建立 Python 函式專案。

新增 Azure Blob 儲存體輸入繫結

繫結屬性定義於 function.json 檔案的特定函式中。 若要建立繫結,請以滑鼠右鍵按一下 (在 macOS 上則按一下 Ctrl+) 函式資料夾中的 function.json 檔案,然後選擇 [新增繫結...]。 遵循提示來針對新繫結定義下列繫結屬性:

提示 Description
選取繫結方向 in 此繫結為輸入繫結。
選取具有下列方向的繫結 Azure Blob Storage 繫結為 Azure 儲存體 Blob 繫結。
用以在程式碼中識別此繫結的名稱 inputBlob 識別您的程式碼中參考之繫結參數的名稱。
要從中讀取 Blob 的儲存體帳戶路徑 testcontainer/test.txt 您的函式讀取為輸入的 Blob 路徑。 準備名為 test.txt 的檔案,並將 Hello, World! 作為檔案內容。 建立名為 testcontainer 的容器,並將檔案上傳至該容器。
"local.setting.json" 選取設定 Create new local app settings 選取函式讀取為輸入的儲存體帳戶。 Visual Studio Code 會擷取其本機專案連線的連接字串。

若要檢查是否已成功新增繫結,

  1. 開啟 BlobStorageInputFunc/function.json 檔案,確認已將具有 type: blobdirection: in 的新繫結新增至此檔案。
  2. 開啟 local.settings.json 檔案,檢查包含儲存體帳戶連接字串的新機碼值組 <your-storage-account-name>_STORAGE: <your-storage-account-connection-string> 是否已新增至此檔案。

新增繫結之後,請在這裡以 Python 檔案取代 BlobStorageInputFunc/__init__.py,即可更新您的函式程式碼以取用繫結。

import logging
import azure.functions as func

def main(req: func.HttpRequest, inputBlob: bytes) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    return func.HttpResponse('The triggered function executed successfully. And read blob content: {}'.format(inputBlob))

在本機執行函式

請遵循教學課程以在本機執行函式,並確認 Blob 輸入。

  1. 如果系統提示您連線到儲存體,請選取您在建立 Azure Function 資源時所使用的儲存體帳戶。 它適用於 Azure Function 執行階段內部使用,而且不一定與您用於輸入的函式相同。
  2. 若要在本機啟動函式,請按 [F5]<kbd></kbd> 或選取左側 [活動] 列中的 [執行並偵錯] 圖示。
  3. 若要確認函式可以讀取 Blob,請在 Visual Studio Code WORKSPACE 中的函式上以滑鼠右鍵按一下 [Execute Function Now...],然後檢查函式回應。 回應訊息應包含 Blob 檔案中的內容。

使用服務連接器建立連線

您剛執行專案,並在本機驗證函式,而本機專案會使用連接字串連線到您的儲存體 Blob。

現在您將了解如何設定 Azure Function 與 Azure Blob 儲存體之間的連線,以便您的函式在部署至雲端之後,可以讀取 Blob。 在雲端環境中,我們會示範如何使用系統指派的受控識別進行驗證。

  1. 開啟本機專案中的 function.json 檔案,將 bindings 中的 connection 屬性值變更為 MyBlobInputConnection
  2. 執行下列 Azure CLI 命令,以建立 Azure Function 與 Azure 儲存體帳戶之間的連線。
az functionapp connection create storage-blob --source-id "<your-function-resource-id>" --target-id "<your-storage-blob-resource-id>" --system-identity --customized-keys AZURE_STORAGEBLOB_RESOURCEENDPOINT=MyBlobInputConnection__serviceUri
  • --source-id 格式:/subscriptions/{subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.Web/sites/{site}
  • --target-id 格式: /subscriptions/{subscription}/resourceGroups/{target_resource_group}/providers/Microsoft.Storage/storageAccounts/{account}/blobServices/default

您已使用服務連接器建立 Azure Function 與 Azure Blob 記憶體之間的連線,並具有系統指派的受控識別。

服務連接器會在函式繫結執行階段用來連線到儲存體的函式應用程式設定中設定 MyBlobInputConnection__serviceUri 變數,以讓函式可以從 Blob 儲存體讀取資料。 您可以深入了解 服務連接器如何協助 Azure Functions 連線至服務

將函式部署至 Azure

您現在可以將函式部署至 Azure,並確認儲存體 Blob 輸入繫結可運作。

  1. 請遵循此教學課程 以將您的函式部署至 Azure。
  2. 若要確認函式可以讀取 Blob,請在 Visual Studio Code RESOURCES 中的函式上以滑鼠右鍵按一下 [Execute Function Now...],然後檢查函式回應。 回應訊息應包含 Blob 檔案中的內容。

疑難排解

如果儲存體主機有任何相關錯誤,例如 No such host is known (<account-name>.blob.core.windows.net:443),請檢查您用來連線到 Azure 儲存體的連接字串是否包含 Blob 端點。 如果沒有,請移至 Azure 入口網站中的 Azure 儲存體,從 Access keys 刀鋒視窗複製連接字串,並取代值。

如果您在本機啟動專案時發生此錯誤,請檢查 local.settings.json 檔案。

如果您將函式部署至雲端時發生此錯誤 (在此情況下,Azure Function 部署通常會在 Syncing triggers 上失敗),請檢查函式的應用程式設定。

清除資源

如果您不打算繼續使用此專案,請刪除您稍早建立的函數應用程式資源。

  1. 在 Azure 入口網站中,開啟 [函數應用程式] 資源,然後選取 [刪除]
  2. 輸入應用程式名稱,然後選取 [刪除] 以確認。

下一步

請閱讀下列文章,以深入了解服務連接器概念,以及其如何協助 Azure Functions 連線到雲端服務。