共用方式為


快速入門:建立一個Python Durable Functions應用程式

使用 Durable Functions (Azure Functions 的功能),在無伺服器環境中撰寫具狀態函式。 安裝 Durable Functions 的方法是在 Visual Studio Code 中安裝 Azure Functions 擴充功能。 延伸模組會管理應用程式中的狀態、檢查點和重新啟動。

在這個快速入門中,你會使用 Visual Studio Code 中的 Durable Functions 擴充功能,在本地建立並測試一個「hello world」的 Durable Functions 應用程式,在 Azure Functions 中。 Durable Functions 應用程式負責協調並串聯呼叫到其他函式。 然後,你將函式程式碼發佈到 Azure。 你使用的工具可透過 Visual Studio Code 擴充功能使用。

 在 Azure 中執行的 Durable Functions 應用程式的截圖。

附註

此快速入門使用裝飾器型 Python 的 v2 程式設計模型。 此模型提供更簡單的檔案結構,相較於 v1,以程式代碼為主。

先決條件

若要完成本快速入門,您需要:

  • Visual Studio Code已安裝。

  • 安裝了Visual Studio Code擴充功能Azure Functions

  • 安裝了最新版本的 Azure Functions Core Tools

  • HTTP 測試工具,可保護您的資料安全。 如需詳細資訊,請參閱 HTTP 測試工具。

  • 一個 Azure 訂閱,用來部署應用程式到 Azure.

  • 已安裝 Python 版本 3.7、3.8、3.9 或 3.10。

如果你沒有Azure帳號,請在開始前先建立一個free帳號

建立本機專案

在這個區段,你會使用 Visual Studio Code 建立本地的 Azure Functions 專案。

  1. 在 Visual Studio Code 中,選擇 F1(或選擇 Ctrl/Cmd+Shift+P)以開啟指令面板。 在提示(>)時,輸入並選擇 Azure Functions:建立新專案

    [建立函式] 視窗的螢幕擷取畫面。

  2. 選取 [瀏覽]。 在 [選取資料夾] 對話框中,移至要用於您專案的資料夾,然後選擇 [選取]。

  3. 依照提示提供下列資訊:

    Prompt 動作 描述
    為您的函式應用程式專案選取語言 選擇Python 建立一個本地的 Python 函式專案。
    選取版本 選擇 Azure Functions v4 您只會在尚未安裝 Core Tools 時看到此選項。 在此情況下,Core Tools 會在您第一次執行應用程式時安裝。
    Python版本 選擇Python 3.7Python 3.8Python 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 所需的相依關係。

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

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

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

    source .venv/bin/activate
    

然後,在啟動虛擬環境的整合式終端中,使用 pip 來安裝您定義的套件。

python -m pip install -r requirements.txt

附註

您必須安裝 azure-functions-durable v1.2.4 或更新版本。

建立您的函式

最基本的 Durable Functions 應用程式有三個功能:

  • 協調器函式:用於協調其他函式的工作流程。
  • 活動函式:由協調器函式呼叫的函式,可執行工作並選擇性地傳回值。
  • Client function:Azure 中的一個常規函式,啟動編排器函式。 此範例會使用 HTTP 觸發的函式。

範例程式碼

要使用這三種函式類型來建立基本的 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 觸發的函式,該函式會啟動協調流程執行個體,並傳回 回應。

附註

Durable Functions也支援Python v2 程式設計模型blueprints。 要使用藍圖,請使用 azure-functions-durableBlueprintclass 註冊你的藍圖函式。 您可以和以往一樣註冊產生的藍圖。 你可以用我們的 sample 作為範例。

設定記憶體模擬器

你可以用 Azurite,一個 Azure Storage 的模擬器,在本地測試這個功能。 在 local.settings.json中,將 的值設定為 ,如下列範例所示:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "python"
  }
}

要在 Visual Studio Code 安裝並開始執行 Azurite 擴充功能,請在指令面板中輸入 Azurite: Start並選擇 Enter。

你可以為你的 Durable Functions 應用程式使用其他儲存選項。 欲了解更多儲存選項與好處,請參閱 Durable Functions 儲存供應商

在本機測試函式

Azure Functions Core Tools 讓你能在本地開發電腦上執行 Azure Functions 專案。 如果沒有安裝,第一次在 Visual Studio Code 啟動函式時會被提示安裝這些工具。

  1. 若要測試函數,請在 活動函數程式碼中設定中斷點。 選取 F5 或在命令選擇區中選取 [偵錯:開始偵錯],以啟動函式應用程式專案。 Core Tools 的輸出會出現在終端機面板中。

    附註

    欲了解更多除錯資訊,請參見 Durable Functions diagnostics

  2. 在終端機面板中,複製 HTTP 觸發函式的 URL 端點。

    Azure 本地輸出截圖。

  3. 使用瀏覽器或 HTTP 測試工具,將 HTTP POST 要求傳送至 URL 端點。

    將最後一個區段取代為協調器函式的名稱 ()。 此 URL 應類似於 。

    回應是 HTTP 函式的初始結果。 其可讓您知道長期協調流程已成功啟動。 其尚未顯示協調流程的最終結果。 回應包含一些實用的 URL。 現在,請查詢協調流程的狀態。

  4. 複製 的 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"
    }
    
  5. 要停止除錯,請在 Visual Studio Code 中選擇 Shift+F5。

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

登入 Azure

在建立 Azure 資源或發佈應用程式之前,您必須先登入 Azure。

  1. 如果你還沒登入,請在活動欄選擇Azure圖示。 然後在 Resources 下,選擇 登入 Azure

    Visual Studio Code 中 Azure 登入視窗的截圖。

    如果您已登入,而且可以看到現有的訂閱,請移至下一節。 如果你還沒有Azure帳號,請選擇建立Azure帳號。 學生可選擇為學生建立Azure帳號

  2. 當瀏覽器提示時,選擇你的 Azure 帳號,並用你的 Azure 帳號憑證登入。 如果您建立新的帳戶,可以在帳戶建立之後登入。

  3. 成功登入之後,您可以關閉新的瀏覽器視窗。 屬於你 Azure 帳號的訂閱內容會顯示在側邊欄。

在 Azure 中建立函式應用程式

在這個區塊中,你可以在 Flex Consumption 方案中建立一個函式應用程式,並在你的 Azure 訂閱中建立相關資源。 根據預設行為,系統會為您做出許多資源建立決策。 若要進一步控制已建立的資源,您必須改為使用進階選項建立函數應用程式。

  1. 在 Visual Studio Code 中,選擇 F1 開啟指令面板。 在提示(>)時,輸入並選擇 Azure Functions:在 Azure 建立功能應用程式。

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

    Prompt 動作
    選取訂用帳戶 選擇要使用的 Azure 訂閱。 當您只有一個訂用帳戶顯示在 [資源] 底下時,此提示就不會出現。
    輸入新的函式應用程式名稱 輸入 URL 路徑中有效的全域唯一名稱。 你輸入的名稱會經過驗證,以確保它在 Azure Functions 中是唯一的。
    選取新資源的位置 選擇 Azure 區域。 如需更好的效能,請選取您附近的 [區域]。 只會顯示 Flex 取用方案支援的區域。
    選取執行階段堆疊 選取您目前在本機執行的語言版本。
    選取資源驗證類型 選取 [受控識別],這是連線到 預設主機記憶體帳戶的最安全選項。

    Azure: 活動日誌面板中,Azure擴充功能顯示Azure中建立的個別資源狀態。

    截圖顯示Azure資源創建日誌。

  3. 當函式應用程式建立時,以下相關資源會在你的 Azure 訂閱中建立。 這些資源會根據您為函數應用程式輸入的名稱來命名。

    • 資源群組,這是相關資源的邏輯容器。
    • 函式應用程式,可提供用來執行函式程式碼的環境。 函式應用程式可讓您將多個函式群組為邏輯單位,以方便您管理、部署,並在相同主控方案中共用資源。
    • 一個 Azure App Service 計畫,定義你函式應用的底層主機。
    • 一個標準的 Azure Storage 帳號,由 Functions 主機用來維護你的函式應用程式的狀態及其他資訊。
    • 連線至函數應用程式的 Application Insights 執行個體,其會追蹤您函數在應用程式中的使用情況。
    • 已新增至新預設主機儲存體帳戶中儲存體 Blob 資料參與者角色的使用者指派的受控識別。

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

    秘訣

    預設情況下,你的函式應用程式所需的 Azure 資源是根據你輸入的功能式應用程式名稱來建立的。 根據預設,資源是透過相同新資源群組中的函數應用程式來建立的。 如果您想要自訂相關聯資源的名稱或重複使用現有的資源,請使用進階建立選項來發佈專案。

將專案部署到 Azure

重要事項

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

  1. 在指令面板中,輸入並選取 Azure Functions: 部署到 Function 應用程式

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

  3. 部署完成後,選擇 View Output 以查看建立與部署結果,包括你所建立的Azure資源。 如果您錯過通知,請選取右下角的鈴鐺圖示,以再次查看。

    [檢視輸出] 視窗的螢幕擷取畫面。

測試您在 Azure 中的功能

  1. 從輸出面板中複製 HTTP 觸發程序的 URL。 呼叫 HTTP 觸發函式的 URL 必須採用下列格式:

    https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator

  2. 將 HTTP 要求的新 URL 貼到瀏覽器的網址列。 當您使用已發佈的應用程式時,您可以預期會取得在本機測試時取得的相同狀態回應。

你用 Visual Studio Code 創建並發佈的 Python Durable Functions 應用程式已經準備好使用了。

清除資源

如果你不再需要你建立的資源來完成快速入門,為了避免Azure訂閱中相關的成本,請刪除資源群組及所有相關資源。