在 Python 中建立您的第一個耐久函式

Durable Functions 是 Azure Functions延伸模組,可讓您在無伺服器環境中撰寫具狀態函式。 此擴充功能會為您管理狀態、設定檢查點和重新啟動。

在本文中,您會了解如何使用 Visual Studio Code Azure Functions 擴充功能,在本機建立及測試 "hello world" 耐久函式。 此函式會將其他函式的呼叫協調並鏈結在一起。 然後,您可以將函式程式代碼發佈至 Azure。

Azure 中執行耐久函式的螢幕快照。

必要條件

完成本教學課程:

如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶

建立本機專案

在這一節中,您會使用 Visual Studio Code 來建立本機 Azure Functions 專案。

  1. 在 Visual Studio Code 中,按 F1 (或 Ctrl/Cmd+Shift+P)以開啟命令選擇區。 在命令選擇區中,搜尋並選取 Azure Functions: Create New Project...

    [建立函式] 視窗的螢幕快照。

  2. 為您的專案選擇空白資料夾位置,然後選擇 [選取]

  1. 依照提示操作並提供下列資訊:

    提示 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。
  1. 依照提示操作並提供下列資訊:

    提示 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.jsonlocal.settings.json 組態檔。

根資料夾中也會建立requirements.txt檔案。 它會指定執行函式應用程式所需的 Python 套件。

從 PyPI 安裝 azure-functions-durable

當您建立專案時,Azure Functions Visual Studio Code 擴充功能會自動使用您選取的 Python 版本來建立虛擬環境。 接著,您必須在終端機中啟用虛擬環境,並安裝 Azure Functions 和 Durable Functions 所需的一些相依性。

  1. 在編輯器中開啟requirements.txt,並將其內容變更為下列程序代碼:

    azure-functions
    azure-functions-durable
    
  2. 在目前資料夾中開啟編輯器的整合式終端機 (Ctrl+Shift+』)。

  3. 在整合式終端機中,視您的作業系統而定,在目前資料夾中啟用虛擬環境:

    source .venv/bin/activate
    
  4. 在啟用虛擬環境的整合式終端機中,使用 pip 來安裝您定義的套件。

    python -m pip install -r requirements.txt
    

建立您的函式

基本的 Durable Functions 應用程式包含三個函式:

  • Orchestrator 函式:描述協調其他函式的工作流程。
  • 活動函式:由協調器函式呼叫、執行工作,並選擇性地傳回值。
  • 用戶端函式:這是啟動協調器函式的一般 Azure 函式。 此範例會使用 HTTP 觸發的函式。

協調器函式

您將使用範本在您的專案中建立耐久函式程式碼。

  1. 在命令選擇區中,搜尋並選取 Azure Functions: Create Function...

  2. 依照提示操作並提供下列資訊:

    提示 Description
    為您的函式選取範本 Durable Functions 協調器 建立 Durable Functions 協調流程
    提供函式名稱 HelloOrchestrator 耐久函式的名稱

您已新增協調器來協調活動函式。 開啟 HelloOrchestrator/__init__.py 以查看協調器函式。 context.call_activity 的每個呼叫都會叫用名為 Hello 的活動函式。

接下來,您將新增參考的 Hello 活動函式。

活動函式

  1. 在命令選擇區中,搜尋並選取 Azure Functions: Create Function...

  2. 依照提示操作並提供下列資訊:

    提示 Description
    為您的函式選取範本 Durable Functions 活動 建立活動函式
    提供函式名稱 您好 活動函式的名稱

您已新增協調器所叫用的 Hello 活動函式。 開啟 Hello/__init__.py ,以查看它接受名稱做為輸入,並傳回問候語。 活動函式是您執行動作的地方,例如進行資料庫呼叫或執行計算。

最後,您會新增一個啟動協調流程的 HTTP 觸發函式。

用戶端函式 (HTTP 入門)

  1. 在命令選擇區中,搜尋並選取 Azure Functions: Create Function...

  2. 依照提示操作並提供下列資訊:

    提示 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 版需要下列最低版本:

啟用 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-durableBlueprint 類別來註冊藍圖函式,如下所示。 然後,產生的藍圖可以註冊為一般。 如需範例,請參閱我們的 範例

在本機測試函式

Azure Functions Core Tools 可讓您在本機開發電腦上執行 Azure Functions 專案。 如果您尚未安裝此工具,系統會提示您第一次從 Visual Studio Code 啟動函式時安裝這些工具。

  1. 若要測試您的函式,請在 Hello 活動函式程式代碼中設定斷點 (Hello/__init__.py)。 按 F5 或從命令選擇區選取 Debug: Start Debugging 以啟動函式應用程式專案。 Core Tools 的輸出會顯示在 [終端機] 面板中。
  1. 若要測試您的函式,請在活動函式程式代碼中 hello 設定斷點。 按 F5 或從命令選擇區選取 Debug: Start Debugging 以啟動函式應用程式專案。 Core Tools 的輸出會顯示在 [終端機] 面板中。

注意

如需偵錯的詳細資訊,請參閱 Durable Functions 診斷

  1. Durable Functions 需要 Azure 記憶體帳戶才能執行。 當 Visual Studio Code 提示您選取記憶體帳戶時,請選取 [ 選取記憶體帳戶]。

    如何建立記憶體帳戶的螢幕快照。

  2. 請遵循提示,並提供下列資訊,在 Azure 中建立新的記憶體帳戶:

    提示 Description
    選取訂閱 您的訂用帳戶名稱 選取您的 Azure 訂用帳戶
    選取儲存體帳戶 建立新的儲存體帳戶
    輸入新儲存體帳戶的名稱 唯一名稱 要建立的儲存體帳戶名稱
    選取資源群組 唯一名稱 要建立的資源群組名稱
    選取位置 region 選取鄰近您的區域
  3. 終端機面板中,複製 HTTP 觸發函式的 URL 端點。

    Azure 本機輸出的螢幕快照。

  1. 使用瀏覽器或 PostmancURL 之類的工具,將 HTTP 要求傳送至 URL 端點。 將最後一個區段取代為協調器函式的名稱 (HelloOrchestrator)。 URL 必須類似 http://localhost:7071/api/orchestrators/HelloOrchestrator

    回應是 HTTP 函式的初始結果,讓您知道耐久協調流程已成功啟動。 這還不是協調流程的最終結果。 回應包含一些實用的 URL。 讓現在我們查詢協調流程的狀態。

  1. 使用瀏覽器或 PostmancURL 之類的工具,將 HTTP 要求傳送至 URL 端點。 將最後一個區段取代為協調器函式的名稱 (hello_orchestrator)。 URL 必須類似 http://localhost:7071/api/orchestrators/hello_orchestrator

    回應是 HTTP 函式的初始結果,讓您知道耐久協調流程已成功啟動。 這還不是協調流程的最終結果。 回應包含一些實用的 URL。 讓現在我們查詢協調流程的狀態。

  1. 複製的 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"
}
  1. 若要停止偵錯,請在 Visual Studio Code 中按 Shift+F5

確認函式在本機電腦上正確執行之後,就可以將專案發佈到 Azure。

登入 Azure

您必須先登入 Azure,才能建立 Azure 資源或發布應用程式。

  1. 如果您尚未登入,請選擇 [活動] 列中的 Azure 圖示。 然後在 [資源] 區域中,選擇 [登入 Azure...]

    VS Code 中登入 Azure 視窗的螢幕快照。

    如果您已登入,而且可以看到現有的訂閱,請移至下一節。 如果您尚未擁有 Azure 帳戶,請選擇 [建立 Azure 帳戶...]。學生可以選擇 [建立 Azure 學生版帳戶...]

  2. 當在瀏覽器中收到提示時,請使用您的 Azure 帳戶認證選擇 Azure 帳戶並登入。 如果您建立新的帳戶,可以在帳戶建立之後登入。

  3. 成功登入之後,即可關閉新的瀏覽器視窗。 屬於您 Azure 帳戶的訂用帳戶會顯示在提要欄位中。

在 Azure 中建立函式應用程式

在此區段中,您會在 Azure 訂用帳戶中建立函式應用程式和相關的資源。

  1. 選擇 [活動] 列中的 Azure 圖示。 然後在 [資源] 區域中,選取 + 圖示並選擇 [在 Azure 中建立函數應用程式] 選項。

    在 Azure 訂閱中建立資源群組

  2. 提示中會提供下列資訊:

    提示 選取項目
    選取訂用帳戶 選擇要使用的訂用帳戶。 當您只有一個訂閱顯示在 [資源] 底下時,就不會看到此提示。
    輸入函數應用程式的全域唯一名稱 輸入在 URL 路徑中有效的名稱。 您鍵入的名稱會經過驗證,確定其在 Azure Functions 中是唯一。
    選取執行階段堆疊 選擇您在本機上執行的語言版本。
    選取新資源的位置 若要獲得較佳的效能,請選擇您附近的區域

    該延伸模組會在 [Azure: 活動記錄] 面板顯示正在 Azure 建立的個別資源狀態。

    建立 Azure 資源的記錄

  3. 建立完成時,您的訂閱中會建立下列 Azure 資源。 資源會根據您的函數應用程式名稱命名:

    • 資源群組,這是相關資源的邏輯容器。
    • 標準 Azure 儲存體帳戶,其可維護專案的狀態和其他資訊。
    • 函數應用程式,其提供執行函式程式碼的環境。 函數應用程式可讓您將函式以邏輯單位分組,方便您在相同的主控方案中管理、部署及共用資源。
    • App Service 方案,其定義函數應用程式的基礎主機。
    • 連線至函數應用程式的 Application Insights 執行個體,可追蹤應用程式中函式的使用量。

    建立函式應用程式並套用部署套件之後,即會顯示通知。

    提示

    根據預設,系統會依照您提供的函數應用程式名稱建立函數應用程式所需的 Azure 資源, 並且預設會建立在與函數應用程式相同的新資源群組中。 如果您想自訂這些資源的名稱或重複使用現有的資源,必須改為使用進階建立選項發佈專案

將專案部署至 Azure

重要

部署至現有的函數應用程式一律會覆寫該應用程式在 Azure 中的內容。

  1. 在 Azure 活動的 [資源] 區域中,找出您剛才建立的函數應用程式資源,以滑鼠右鍵按一下該資源,然後選取 [部署至函數應用程式...]

  2. 當系統提示您覆寫先前的部署時,請選取 [部署],將函式程式碼部署至新的函數應用程式資源。

  3. 部署完成時,選取 [檢視輸出] 即可檢視建立和部署結果,包括您所建立的 Azure 資源。 如果您錯過通知,請選取右下角的鈴鐺圖示,以再次查看。

    [檢視輸出] 視窗的螢幕快照。

在 Azure 中測試您的函式

  1. 從 [輸出] 面板中複製 HTTP 觸發程序的 URL。 呼叫 HTTP 觸發函式的 URL 必須以此格式: https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
  1. 從 [輸出] 面板中複製 HTTP 觸發程序的 URL。 呼叫 HTTP 觸發函式的 URL 必須以此格式: https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
  1. 在瀏覽器的網址列中貼上 HTTP 要求的這個新 URL。 使用已發佈的應用程式時,您必須取得與之前相同的狀態回應。

下一步

您已使用 Visual Studio Code 來建立及發布 Python 耐久函式應用程式。