在 Python 中建立您的第一個耐久函式
Durable Functions 是 Azure Functions 的延伸模組,可讓您在無伺服器環境中撰寫具狀態函式。 此擴充功能會為您管理狀態、設定檢查點和重新啟動。
在本文中,您會了解如何使用 Visual Studio Code Azure Functions 擴充功能,在本機建立及測試 "hello world" 耐久函式。 此函式會將其他函式的呼叫協調並鏈結在一起。 然後,您可以將函式程式代碼發佈至 Azure。
必要條件
完成本教學課程:
安裝 Azure Functions Visual Studio Code 擴充功能。
請確定您有最新版的 Azure Functions Core Tools。
Durable Functions 需要 Azure 儲存體帳戶。 您需要訂閱 Azure。
請確定您已安裝 3.7、3.8、3.9 或 3.10 版 的 Python 。
如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶。
建立本機專案
在這一節中,您會使用 Visual Studio Code 來建立本機 Azure Functions 專案。
在 Visual Studio Code 中,按 F1 (或 Ctrl/Cmd+Shift+P)以開啟命令選擇區。 在命令選擇區中,搜尋並選取
Azure Functions: Create New Project...
。為您的專案選擇空白資料夾位置,然後選擇 [選取]。
依照提示操作並提供下列資訊:
提示 值 Description 為您的函式應用程式專案選取語言 Python 建立本機 Python Functions 專案。 選取版本 Azure Functions v4 您只會在尚未安裝 Core Tools 時看到此選項。 在此情況下,Core Tools 會在您第一次執行應用程式時安裝。 Python 版本 Python 3.7、3.8、3.9 或 3.10 Visual Studio Code 會使用您選取的版本來建立虛擬環境。 為您專案的第一個函式選取範本 暫時跳過 選取您要如何開啟專案 在目前視窗中開啟 重新開啟您所選取資料夾中的 Visual Studio Code。
依照提示操作並提供下列資訊:
提示 值 Description 選取語言 Python (程序設計模型 V2) 使用 V2 程式設計模型建立本機 Python Functions 專案。 選取版本 Azure Functions v4 您只會在尚未安裝 Core Tools 時看到此選項。 在此情況下,Core Tools 會在您第一次執行應用程式時安裝。 Python 版本 Python 3.7、3.8、3.9 或 3.10 Visual Studio Code 會使用您選取的版本來建立虛擬環境。 選取您要如何開啟專案 在目前視窗中開啟 重新開啟您所選取資料夾中的 Visual Studio Code。
Visual Studio Code 會視需要安裝 Azure Functions Core Tools。 其也會在資料夾中建立函式應用程式專案。 此專案包含 host.json 和 local.settings.json 組態檔。
根資料夾中也會建立requirements.txt檔案。 它會指定執行函式應用程式所需的 Python 套件。
從 PyPI 安裝 azure-functions-durable
當您建立專案時,Azure Functions Visual Studio Code 擴充功能會自動使用您選取的 Python 版本來建立虛擬環境。 接著,您必須在終端機中啟用虛擬環境,並安裝 Azure Functions 和 Durable Functions 所需的一些相依性。
在編輯器中開啟requirements.txt,並將其內容變更為下列程序代碼:
azure-functions azure-functions-durable
在目前資料夾中開啟編輯器的整合式終端機 (Ctrl+Shift+』)。
在整合式終端機中,視您的作業系統而定,在目前資料夾中啟用虛擬環境:
在啟用虛擬環境的整合式終端機中,使用 pip 來安裝您定義的套件。
python -m pip install -r requirements.txt
建立您的函式
基本的 Durable Functions 應用程式包含三個函式:
- Orchestrator 函式:描述協調其他函式的工作流程。
- 活動函式:由協調器函式呼叫、執行工作,並選擇性地傳回值。
- 用戶端函式:這是啟動協調器函式的一般 Azure 函式。 此範例會使用 HTTP 觸發的函式。
協調器函式
您將使用範本在您的專案中建立耐久函式程式碼。
在命令選擇區中,搜尋並選取
Azure Functions: Create Function...
。依照提示操作並提供下列資訊:
提示 值 Description 為您的函式選取範本 Durable Functions 協調器 建立 Durable Functions 協調流程 提供函式名稱 HelloOrchestrator 耐久函式的名稱
您已新增協調器來協調活動函式。 開啟 HelloOrchestrator/__init__.py 以查看協調器函式。 context.call_activity
的每個呼叫都會叫用名為 Hello
的活動函式。
接下來,您將新增參考的 Hello
活動函式。
活動函式
在命令選擇區中,搜尋並選取
Azure Functions: Create Function...
。依照提示操作並提供下列資訊:
提示 值 Description 為您的函式選取範本 Durable Functions 活動 建立活動函式 提供函式名稱 您好 活動函式的名稱
您已新增協調器所叫用的 Hello
活動函式。 開啟 Hello/__init__.py ,以查看它接受名稱做為輸入,並傳回問候語。 活動函式是您執行動作的地方,例如進行資料庫呼叫或執行計算。
最後,您會新增一個啟動協調流程的 HTTP 觸發函式。
用戶端函式 (HTTP 入門)
在命令選擇區中,搜尋並選取
Azure Functions: Create Function...
。依照提示操作並提供下列資訊:
提示 值 Description 為您的函式選取範本 Durable Functions HTTP 入門版 建立 HTTP 入門函式 提供函式名稱 DurableFunctionsHttpStart 用戶端函式的名稱 授權等級 匿名 基於示範目的,我們允許在沒有驗證的情況下呼叫函式
您已新增可啟動協調流程的 HTTP 觸發函式。 開啟 DurableFunctionsHttpStart/__init__.py ,以查看它用來 client.start_new
啟動新的協調流程。 然後,該函式會使用 client.create_check_status_response
傳回 HTTP 回應,其中包含可用於監視和管理新協調流程的 URL。
您現在有一個可在本機執行並部署至 Azure 的 Durable Functions 應用程式。
需求
Python 程序設計模型第 2 版需要下列最低版本:
- Azure Functions 執行階段 v4.16+
- Azure Functions Core Tools v4.0.5095+ (如果在本機執行)
- azure-functions-durable v1.2.4+
啟用 v2 程式設計模型
執行 v2 程式設計模型需要下列應用程式設定:
- 名稱:
AzureWebJobsFeatureFlags
- 值:
EnableWorkerIndexing
如果您使用 Azure Functions Core Tools 在本機執行,則應將此設定新增至 local.settings.json
檔案。 如果您是在 Azure 中執行,請使用您選擇的工具執行下列步驟:
分別將 <FUNCTION_APP_NAME>
和 <RESOURCE_GROUP_NAME>
取代為您的函數應用程式名稱和資源群組名稱。
az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing
若要使用這些 3 種函式類型建立基本的 Durable Functions 應用程式,請將 的內容 function_app.py
取代為下列 Python 程式代碼。
import azure.functions as func
import azure.durable_functions as df
myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)
# An HTTP-Triggered Function with a Durable Functions Client binding
@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def http_start(req: func.HttpRequest, client):
function_name = req.route_params.get('functionName')
instance_id = await client.start_new(function_name)
response = client.create_check_status_response(req, instance_id)
return response
# Orchestrator
@myApp.orchestration_trigger(context_name="context")
def hello_orchestrator(context):
result1 = yield context.call_activity("hello", "Seattle")
result2 = yield context.call_activity("hello", "Tokyo")
result3 = yield context.call_activity("hello", "London")
return [result1, result2, result3]
# Activity
@myApp.activity_trigger(input_name="city")
def hello(city: str):
return f"Hello {city}"
如需範例中每個函式及其用途的說明,請檢閱下表。
方法 | 描述 |
---|---|
hello_orchestrator |
協調器函式,描述工作流程。 在此情況下,協調流程會啟動、依序叫用三個函式,並傳回清單中所有 3 個函式的已排序結果。 |
hello |
活動函式,其會執行正在協調的工作。 函式會傳回以自變數傳遞之城市的簡單問候語。 |
http_start |
HTTP 觸發的函式,會啟動協調流程的實例,並傳回檢查狀態回應。 |
注意
Durable Functions 也支援 Python V2 的 藍圖。 若要使用這些函式,您必須使用 azure-functions-durable
Blueprint
類別來註冊藍圖函式,如下所示。 然後,產生的藍圖可以註冊為一般。 如需範例,請參閱我們的 範例 。
在本機測試函式
Azure Functions Core Tools 可讓您在本機開發電腦上執行 Azure Functions 專案。 如果您尚未安裝此工具,系統會提示您第一次從 Visual Studio Code 啟動函式時安裝這些工具。
- 若要測試您的函式,請在
Hello
活動函式程式代碼中設定斷點 (Hello/__init__.py)。 按 F5 或從命令選擇區選取Debug: Start Debugging
以啟動函式應用程式專案。 Core Tools 的輸出會顯示在 [終端機] 面板中。
- 若要測試您的函式,請在活動函式程式代碼中
hello
設定斷點。 按 F5 或從命令選擇區選取Debug: Start Debugging
以啟動函式應用程式專案。 Core Tools 的輸出會顯示在 [終端機] 面板中。
注意
如需偵錯的詳細資訊,請參閱 Durable Functions 診斷。
Durable Functions 需要 Azure 記憶體帳戶才能執行。 當 Visual Studio Code 提示您選取記憶體帳戶時,請選取 [ 選取記憶體帳戶]。
請遵循提示,並提供下列資訊,在 Azure 中建立新的記憶體帳戶:
提示 值 Description 選取訂閱 您的訂用帳戶名稱 選取您的 Azure 訂用帳戶 選取儲存體帳戶 建立新的儲存體帳戶 輸入新儲存體帳戶的名稱 唯一名稱 要建立的儲存體帳戶名稱 選取資源群組 唯一名稱 要建立的資源群組名稱 選取位置 region 選取鄰近您的區域 在終端機面板中,複製 HTTP 觸發函式的 URL 端點。
複製的 URL 值
statusQueryGetUri
,將其貼到瀏覽器的網址列中,然後執行要求。 或者,您也可以繼續使用 Postman 發出 GET 要求。此要求會查詢協調流程執行個體的狀態。 您必須取得最終回應,此回應會顯示實例已完成,並包含耐久函式的輸出或結果。 如下所示:
{
"name": "HelloOrchestrator",
"instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
"runtimeStatus": "Completed",
"input": null,
"customStatus": null,
"output": [
"Hello Tokyo!",
"Hello Seattle!",
"Hello London!"
],
"createdTime": "2020-03-18T21:54:49Z",
"lastUpdatedTime": "2020-03-18T21:54:54Z"
}
{
"name": "hello_orchestrator",
"instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
"runtimeStatus": "Completed",
"input": null,
"customStatus": null,
"output": [
"Hello Tokyo!",
"Hello Seattle!",
"Hello London!"
],
"createdTime": "2020-03-18T21:54:49Z",
"lastUpdatedTime": "2020-03-18T21:54:54Z"
}
- 若要停止偵錯,請在 Visual Studio Code 中按 Shift+F5 。
確認函式在本機電腦上正確執行之後,就可以將專案發佈到 Azure。
登入 Azure
您必須先登入 Azure,才能建立 Azure 資源或發布應用程式。
如果您尚未登入,請選擇 [活動] 列中的 Azure 圖示。 然後在 [資源] 區域中,選擇 [登入 Azure...]。
如果您已登入,而且可以看到現有的訂閱,請移至下一節。 如果您尚未擁有 Azure 帳戶,請選擇 [建立 Azure 帳戶...]。學生可以選擇 [建立 Azure 學生版帳戶...]。
當在瀏覽器中收到提示時,請使用您的 Azure 帳戶認證選擇 Azure 帳戶並登入。 如果您建立新的帳戶,可以在帳戶建立之後登入。
成功登入之後,即可關閉新的瀏覽器視窗。 屬於您 Azure 帳戶的訂用帳戶會顯示在提要欄位中。
在 Azure 中建立函式應用程式
在此區段中,您會在 Azure 訂用帳戶中建立函式應用程式和相關的資源。
選擇 [活動] 列中的 Azure 圖示。 然後在 [資源] 區域中,選取 + 圖示並選擇 [在 Azure 中建立函數應用程式] 選項。
提示中會提供下列資訊:
提示 選取項目 選取訂用帳戶 選擇要使用的訂用帳戶。 當您只有一個訂閱顯示在 [資源] 底下時,就不會看到此提示。 輸入函數應用程式的全域唯一名稱 輸入在 URL 路徑中有效的名稱。 您鍵入的名稱會經過驗證,確定其在 Azure Functions 中是唯一。 選取執行階段堆疊 選擇您在本機上執行的語言版本。 選取新資源的位置 若要獲得較佳的效能,請選擇您附近的區域。 該延伸模組會在 [Azure: 活動記錄] 面板顯示正在 Azure 建立的個別資源狀態。
建立完成時,您的訂閱中會建立下列 Azure 資源。 資源會根據您的函數應用程式名稱命名:
- 資源群組,這是相關資源的邏輯容器。
- 標準 Azure 儲存體帳戶,其可維護專案的狀態和其他資訊。
- 函數應用程式,其提供執行函式程式碼的環境。 函數應用程式可讓您將函式以邏輯單位分組,方便您在相同的主控方案中管理、部署及共用資源。
- App Service 方案,其定義函數應用程式的基礎主機。
- 連線至函數應用程式的 Application Insights 執行個體,可追蹤應用程式中函式的使用量。
建立函式應用程式並套用部署套件之後,即會顯示通知。
提示
根據預設,系統會依照您提供的函數應用程式名稱建立函數應用程式所需的 Azure 資源, 並且預設會建立在與函數應用程式相同的新資源群組中。 如果您想自訂這些資源的名稱或重複使用現有的資源,必須改為使用進階建立選項發佈專案。
將專案部署至 Azure
重要
部署至現有的函數應用程式一律會覆寫該應用程式在 Azure 中的內容。
在 Azure 活動的 [資源] 區域中,找出您剛才建立的函數應用程式資源,以滑鼠右鍵按一下該資源,然後選取 [部署至函數應用程式...]。
當系統提示您覆寫先前的部署時,請選取 [部署],將函式程式碼部署至新的函數應用程式資源。
部署完成時,選取 [檢視輸出] 即可檢視建立和部署結果,包括您所建立的 Azure 資源。 如果您錯過通知,請選取右下角的鈴鐺圖示,以再次查看。
在 Azure 中測試您的函式
- 從 [輸出] 面板中複製 HTTP 觸發程序的 URL。 呼叫 HTTP 觸發函式的 URL 必須以此格式:
https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
- 從 [輸出] 面板中複製 HTTP 觸發程序的 URL。 呼叫 HTTP 觸發函式的 URL 必須以此格式:
https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
- 在瀏覽器的網址列中貼上 HTTP 要求的這個新 URL。 使用已發佈的應用程式時,您必須取得與之前相同的狀態回應。
下一步
您已使用 Visual Studio Code 來建立及發布 Python 耐久函式應用程式。