教學課程:以 Azure Blob 儲存體 作為輸入的 Python 函式
在本教學課程中,您將瞭解如何完成下列工作,以 儲存體 Blob 設定 Python 函式作為輸入:
- 使用 Visual Studio Code 建立 Python 函式專案。
- 變更程式代碼以新增記憶體 Blob 輸入函式系結。
- 使用 Visual Studio Code 在本機執行函式。
- 使用 Azure CLI 建立 Azure Function 與 儲存體 Blob 與 Service 連線 or 之間的連線。
- 使用 Visual Studio 部署函式。
本教學課程中函式專案元件的概觀:
項目元件 | Selection / Solution |
---|---|
來源服務 | Azure Function |
目標服務 | Azure 儲存體 Blob |
函式系結 | HTTP 觸發程式,儲存體 Blob 作為輸入 |
本機項目驗證類型 | 連接字串 |
雲端函式驗證類型 | 系統指派的受控識別 |
必要條件
- 在其中一個支援的平臺上安裝 Visual Studio Code。
- Azure CLI。 您可以在 Azure Cloud Shell 中使用,或將其安裝在本機。
- Azure 儲存體 帳戶和 儲存體 Blob。 如果您沒有 Azure 儲存體 帳戶,請建立帳戶。
- 本指南假設您知道 Functions 開發人員指南中呈現的概念,以及如何連線到 Functions 中的服務。
建立 Python 函式專案
請遵循教學 課程來建立本機 Azure Functions 專案,並在提示中提供下列資訊:
提示 | 選取項目 |
---|---|
選取語言 | 選擇 Python 。 (v1 程式設計語言模型) |
選取 Python 解釋器以建立虛擬環境 | 選擇您慣用的 Python 解釋器。 如果未顯示選項,請輸入 Python 二進位檔的完整路徑。 |
選取專案第一個函式的範本 | 選擇 HTTP trigger 。 |
提供函式名稱 | 輸入 BlobStorageInputFunc 。 |
授權等級 | 選擇 Anonymous ,可讓任何人呼叫您的函式端點。 |
您已使用 HTTP 觸發程式建立 Python 函式專案。
新增 Blob 儲存體 輸入系結
系結屬性定義於指定函式的 function.json 檔案中。 若要建立系結,請以滑鼠右鍵按兩下函式資料夾中的檔案, 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 會擷取其本機項目連線 連接字串。 |
若要檢查已成功新增系結,
- 開啟檔案
BlobStorageInputFunc/function.json
,檢查 與type: blob
direction: in
的新系結是否已新增至此檔案。 - 開啟檔案
local.settings.json
,檢查包含儲存體帳戶的新機碼/值組<your-storage-account-name>_STORAGE: <your-storage-account-connection-string>
連接字串已新增至此檔案。
新增系結之後,請在這裡將 取代 BlobStorageInputFunc/__init__.py
為 Python 檔案,更新您的函式程式碼以取用系結。
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 輸入。
- 如果系統提示您連線到儲存體,請選取您在建立 Azure 函式資源時所使用的儲存體帳戶。 它適用于 Azure 函式執行時間的內部使用,而且不一定與您用於輸入的函式相同。
- 若要在本機啟動函式,請按
<kbd>
F5</kbd>
,或選取左側活動列中的 [執行] 和 [偵 錯] 圖示。 - 若要確認函式可以讀取 Blob,請以滑鼠右鍵按一下
Exucute Function Now...
Visual Studio Code WORKSPACE 中的函式,並檢查函式回應。 回應訊息應包含 Blob 檔案中的內容。
使用服務連線or 建立連線
您剛執行專案,並在本機驗證函式,而本機專案會使用連接字串連線到儲存體 Blob。
現在您將瞭解如何設定 Azure 函式與Azure Blob 儲存體之間的連線,讓函式可以在部署至雲端之後讀取 Blob。 在雲端環境中,我們會示範如何使用系統指派的受控識別進行驗證。
function.json
開啟本機專案中的connection
檔案,將 中的bindings
屬性值變更為MyBlobInputConnection
。- 執行下列 Azure CLI 命令,以建立 Azure 函式與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}/resourceG roups/{source_resource_group}/providers/Microsoft.Web/sites/{site}
--target-id
格式:/subscriptions/{subscription}/resourceGroups/{target_resource_group}/providers/Microsoft.Storage/storageAccounts/{account}/blobServices/default
您已使用 Service 連線or 與系統指派的受控識別,在 Azure Function 與 Azure Blob 儲存體 之間建立連線。
服務連線or MyBlobInputConnection__serviceUri
在函式系結執行時間用來連線到儲存體的函式應用程式設定中設定變數,讓函式可以從 Blob 儲存體讀取資料。 您可以深入瞭解 Service 連線or 如何協助 Azure Functions 連線至服務 。
將函式部署至 Azure
現在您可以將函式部署至 Azure,並確認儲存體 Blob 輸入系結可運作。
- 請遵循教學課程 ,將您的函式部署至 Azure。
- 若要確認函式可以讀取 Blob,請以滑鼠右鍵按一下
Exucute Function Now...
Visual Studio Code RESOURCES 檢視中的函式,並檢查函式回應。 回應訊息應包含 Blob 檔案中的內容。
疑難排解
如果儲存體主機有任何相關錯誤,例如 No such host is known (<acount-name>.blob.core.windows.net:443)
,您必須檢查您用來連線到Azure 儲存體連接字串是否包含 Blob 端點。 如果沒有,請移至Azure 入口網站中的Azure 儲存體,從 Access keys
刀鋒視窗複製連接字串,並取代值。
如果您在本機啟動專案時發生錯誤,請檢查 local.settings.json
檔案。
如果您將函式部署至雲端時發生錯誤(在此情況下,函式部署通常會在 上 Syncing triggers
失敗),請檢查函式的應用程式設定。
清除資源
如果您不打算繼續使用此專案,請刪除您稍早建立的函式應用程式資源。
下一步
請閱讀下列文章,以深入瞭解服務連線或概念,以及如何協助 Azure Functions 連線到其他雲端服務。