快速入門:建立 Python Durable Functions 應用程式
使用 Durable Functions (Azure Functions 的功能) 在無伺服器環境中撰寫具狀態函式。 您可以在 Visual Studio Code 中安裝 Azure Functions 延伸模組來安裝 Durable Functions。 延伸模組會管理應用程式中的狀態、檢查點和重新啟動。
在本快速入門中,您會使用 Visual Studio Code 中的 Durable Functions 延伸模組,在 Azure Functions 中本機建立及測試「Hello World」Durable Functions 應用程式。 此 Durable Functions 應用程式會協調對其他函式的呼叫並將其鏈結在一起。 接著,您會將函式程式碼發佈至 Azure。 您所使用的工具可以透過 Visual Studio Code 延伸模組取得。
必要條件
若要完成本快速入門,您需要:
Visual Studio Code 已安裝。
已安裝 Visual Studio Code 延伸模組 Azure Functions。
已安裝最新版本的 Azure Functions Core Tools。
HTTP 測試工具,可保護您的數據安全。 如需詳細資訊,請參閱 HTTP 測試工具。
Azure 訂用帳戶。 若要使用 Durable Functions,您必須擁有 Azure 儲存體帳戶。
已安裝 Python 3.7、3.8、3.9 或 3.10 版。
如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶。
建立本機專案
在這一節中,您會使用 Visual Studio Code 來建立本機 Azure Functions 專案。
在 Visual Studio Code 中選取 F1 (或選取 Ctrl/Cmd+Shift+P),以開啟命令選擇區。 在提示 (
>
) 中,輸入然後選取 [Azure Functions:建立新專案]。選取瀏覽。 在 [選取資料夾] 對話框中,移至要用於您專案的資料夾,然後選擇 [選取]。
依照提示提供下列資訊:
提示 動作 描述 為您的函式應用程式專案選取語言 選取 [Python]。 建立本機 Python Functions 專案。 選取版本 選取 [Azure Functions v4]。 您只會在尚未安裝 Core Tools 時看到此選項。 在此情況下,Core Tools 會在您第一次執行應用程式時安裝。 Python 版本 選取 [Python 3.7]、[Python 3.8]、[Python 3.9] 或 [Python 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]、[Python 3.8]、[Python 3.9] 或 [Python 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 應用程式有三個函式:
- 協調器函式:用於協調其他函式的工作流程。
- 活動函式:由協調器函式呼叫的函式,可執行工作並選擇性地傳回值。
- 用戶端函式:可啟動協調器函式的一般 Azure 函式。 此範例會使用 HTTP 觸發的函式。
協調器函式
您會使用範本在您的專案中建立 Durable Functions 應用程式程式碼。
在命令選擇區中,輸入而後選取 [Azure Functions:建立函式]。
依照提示提供下列資訊:
提示 動作 描述 選取函式的範本 選取 [Durable Functions 協調器]。 建立 Durable Functions 應用程式協調流程。 提供函式名稱 選取 [HelloOrchestrator]。 耐久型函式的名稱。
您已新增協調器來協調活動函式。 開啟 HelloOrchestrator/__init__.py 以查看協調器函數。 context.call_activity
的每個呼叫都會叫用名為 Hello
的活動函式。
接下來,您需要新增參考的 Hello
活動函式。
活動函式
在命令選擇區中,輸入而後選取 [Azure Functions:建立函式]。
依照提示提供下列資訊:
提示 動作 描述 選取函式的範本 選取 [Durable Functions 活動]。 建立活動函式。 提供函式名稱 輸入 Hello。 活動函式的名稱。
您已新增協調器所叫用的 Hello
活動函式。 開啟 Hello/__init__.py 以查看其是否接受名稱做為輸入,並傳回問候語。 活動函式是您將執行動作的地方,例如進行資料庫呼叫或執行計算。
最後,您會新增一個啟動協調流程的 HTTP 觸發函式。
用戶端函式 (HTTP 入門)
在命令選擇區中,輸入而後選取 [Azure Functions:建立函式]。
依照提示提供下列資訊:
提示 動作 描述 選取函式的範本 選取 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
若要使用這三種函式類型建立基本的 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 |
描述工作流程的協調器函式。 在此情況下,協調流程會啟動、依序叫用三個函式,然後傳回清單中所有三個函式的排序結果。 |
hello |
活動函式,其會執行已協調的工作。 此函式會將簡單問候語傳回至以引數傳遞的城市。 |
http_start |
HTTP 觸發的函式,該函式會啟動協調流程執行個體,並傳回 check status 回應。 |
注意
Durable Functions 也支援 Python v2 的藍圖。 若要使用藍圖,請使用 azure-functions-durable Blueprint
類別註冊您的藍圖函式。 您可以和以往一樣註冊產生的藍圖。 您可以使用我們的範例作為範例。
在本機測試函式
Azure Functions Core Tools 提供您在本機開發電腦上執行 Azure Functions 專案的功能。 如果未安裝,第一次在 Visual Studio Code 中啟動函式時,系統會提示您安裝這些工具。
若要測試函式,請在
Hello
活動函式程式碼 (在 Hello/__init__.py 中) 中設定中斷點。 選取 F5 或在命令選擇區中選取 [偵錯:開始偵錯],以啟動函式應用程式專案。 Core Tools 的輸出會出現在終端機面板中。注意
如需有關偵錯的詳細資訊,請參閱 Durable Functions 診斷。
若要測試函數,請在
hello
活動函數程式碼中設定中斷點。 選取 F5 或在命令選擇區中選取 [偵錯:開始偵錯],以啟動函式應用程式專案。 Core Tools 的輸出會出現在終端機面板中。注意
如需有關偵錯的詳細資訊,請參閱 Durable Functions 診斷。
Durable Functions 需要 Azure 儲存體帳戶才能執行。 當 Visual Studio Code 提示您選取儲存體帳戶時,請選取 [選取儲存體帳戶]。
出現提示時提供下列資訊,即可在 Azure 中建立新的儲存體帳戶。
提示 動作 描述 選取訂用帳戶 選取您的訂用帳戶名稱。 您的 Azure 訂閱。 選取儲存體帳戶 選取 [建立新儲存體帳戶]。 輸入新儲存體帳戶的名稱 輸入唯一名稱。 要建立的儲存體帳戶的名稱。 選取資源群組 輸入唯一名稱。 要建立之資源群組的名稱。 選取位置 選取 Azure 區域。 選取您附近的區域。 在終端機面板中,複製 HTTP 觸發函式的 URL 端點。
使用瀏覽器或 HTTP 測試工具,將 HTTP POST 要求傳送至 URL 端點。
將最後一個區段取代為協調器函式的名稱 (
HelloOrchestrator
)。 此 URL 應類似於http://localhost:7071/api/orchestrators/HelloOrchestrator
。回應是 HTTP 函式的初始結果。 其可讓您知道長期協調流程已成功啟動。 其尚未顯示協調流程的最終結果。 回應包含一些實用的 URL。 現在,請查詢協調流程的狀態。
複製
statusQueryGetUri
的 URL 值,並將其貼在瀏覽器的網址列中,然後執行要求。 您也可以繼續使用 HTTP 測試工具來發出 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" }
使用瀏覽器或 HTTP 測試工具,將 HTTP POST 要求傳送至 URL 端點。
將最後一個區段取代為協調器函式的名稱 (
HelloOrchestrator
)。 此 URL 應類似於http://localhost:7071/api/orchestrators/HelloOrchestrator
。回應是 HTTP 函式的初始結果。 其可讓您知道長期協調流程已成功啟動。 其尚未顯示協調流程的最終結果。 回應包含一些實用的 URL。 現在,請查詢協調流程的狀態。
複製
statusQueryGetUri
的 URL 值,並將其貼在瀏覽器的網址列中,然後執行要求。 您也可以繼續使用 HTTP 測試工具來發出 GET 要求。此要求會查詢協調流程執行個體的狀態。 您應該會看到執行個體已完成,且其包含耐久型函式的輸出或結果。 其看起來類似此範例:
{ "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 帳戶]。 學生可以選取 [建立 Microsoft Azure 學生版帳戶]。
在瀏覽器中出現提示時,選取您的 [Azure 帳戶],並使用您的 Azure 帳戶認證登入。 如果您建立新的帳戶,可以在帳戶建立之後登入。
成功登入之後,您可以關閉新的瀏覽器視窗。 屬於您 Azure 帳戶的訂用帳戶會顯示在側邊欄中。
在 Azure 中建立函數應用程式
在此區段中,您會在 Azure 訂用帳戶中建立函式應用程式和相關的資源。 根據預設行為,系統會為您做出許多資源建立決策。 若要進一步控制已建立的資源,您必須改為使用進階選項建立函數應用程式。
在 Visual Studio Code 中,選取 F1 以開啟命令選擇區。 在提示 (
>
) 中,輸入然後選取 [Azure Functions:在 Azure 中建立函式應用程式]。依照提示提供下列資訊:
在 [Azure:活動記錄] 面板中,Azure 延伸模組會顯示在 Azure 中建立的個別資源狀態。
建立函式應用程式時,在您的 Azure 訂用帳戶中會建立下列相關資源。 資源會根據您為函式應用程式輸入的名稱來命名。
- 資源群組,這是相關資源的邏輯容器。
- 標準 Azure 儲存體帳戶,其可維護專案的狀態和其他資訊。
- 函數應用程式,其提供執行函式程式碼的環境。 函數應用程式可讓您將函式以邏輯單位分組,方便您在相同的主控方案中管理、部署及共用資源。
- Azure App Service 方案,其定義函式應用程式的基礎主機。
- 連線至函式應用程式的 Application Insights 執行個體,可追蹤函式在應用程式中的使用情況。
建立函式應用程式並套用部署套件之後,即會顯示通知。
提示
根據預設,系統會根據您為函數應用程式輸入的名稱來建立函數應用程式所需的 Azure 資源。 根據預設,資源會以在相同的新資源群組中的函式應用程式來建立。 如果您想要自訂相關聯資源的名稱或重複使用現有的資源,請使用進階建立選項來發佈專案。
將專案部署至 Azure
重要
部署至現有的函數應用程式一律會覆寫該應用程式在 Azure 中的內容。
在命令選擇區中,輸入並選取 [Azure Functions:部署至函式應用程式]。
選取您剛才建立的函數應用程式。 當系統提示您覆寫先前的部署時,請選取 [部署],將函式程式碼部署至新的函數應用程式資源。
部署完成時,選取 [檢視輸出] 以檢視建立和部署結果,包括您所建立的 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 Durable Functions 應用程式已可供使用。
清除資源
如果您不再需要為完成快速入門所建立的資源,若要避免 Azure 訂用帳戶中的相關成本,請刪除資源群組和所有相關資源。