次の方法で共有


クイック スタート: Python Durable Functions アプリを作成する

Azure Functions の機能である Durable Functions を使用して、サーバーレス環境でステートフル関数を記述します。 Durable Functions をインストールするには、Visual Studio Code で Azure Functions 拡張機能をインストールします。 この拡張機能は、アプリケーションでの状態、チェックポイント、再起動を管理します。

このクイック スタートでは、Visual Studio Code の Durable Functions 拡張機能を使用して、Azure Functions で "hello world" Durable 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 アカウントをお持ちでない場合は、開始する前に無料アカウントを作成してください。

ローカル プロジェクトを作成する

このセクションでは、Visual Studio Code を使用して、ローカル Azure Functions プロジェクトを作成します。

  1. Visual Studio Code で、F1 (または Ctrl/Cmd + Shift + P キー) を押してコマンド パレットを開きます。 プロンプト (>) で、入力して [Azure Functions: 新しいプロジェクトを作成する] を選択します。

    関数の作成ウィンドウのスクリーンショット。

  2. [参照] を選択します。 [フォルダーの選択] ダイアログで、プロジェクトに使用するフォルダーに移動し、[選択] を選択します。

  3. プロンプトで、次の情報を指定します。

    プロンプト アクション 説明
    関数アプリ プロジェクトの言語を選択してください [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 は、選択されたバージョンを使用して仮想環境を作成します。
    Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) [後で確認する] を選択します。
    Select how you would like to open your project (プロジェクトを開く方法を選択してください) [Open in current window] (現在のウィンドウで開く) を選択します。 選択されたフォルダーで 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 アプリには、次の 3 つの関数があります。

  • オーケストレーター関数: 他の関数を調整するワークフロー。
  • アクティビティ関数: オーケストレーター関数によって呼び出される関数で、作業を実行し、必要に応じて値を返します。
  • クライアント関数 - オーケストレーター関数を開始する、Azure の通常の関数。 この例では、HTTP によってトリガーされる関数を使用しています。

サンプル コード

これらの 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/hello_orchestrator")
@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 つの関数が呼び出され、リスト内の 3 つすべての関数の順序付けられた結果が返されます。
hello オーケストレーション対象の作業を実行するアクティビティ関数。 関数は、引数として渡された市区町村に簡単なあいさつ文を返します。
http_start オーケストレーションのインスタンスを開始し、 の応答を返す、check status

Durable Functions では、Python v2 プログラミング モデル のブループリントもサポートされています。 ブループリントを使用するには、azure-functions-durableBlueprintクラスを使用してブループリント関数を登録します。 結果のブループリントは、通常どおり登録できます。 例として、こちらのサンプルを使用できます。

ストレージ エミュレーターを構成する

Azure Storage のエミュレーターである Azurite を使用して、関数をローカルでテストできます。 local.settings.json で、次の例のように AzureWebJobsStorage の値を UseDevelopmentStorage=true に設定します。

{
  "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. 関数をテストするには、hello アクティビティ関数コードにブレークポイントを設定します。 F5 キーを押すか、コマンド パレットで [デバッグ: デバッグの開始] を選択して、関数アプリ プロジェクトを開始します。 Core Tools の出力がターミナル パネルに表示されます。

    デバッグの詳細については、Durable Functions の診断に関する記事を参照してください。

  2. ターミナル パネルで、HTTP によってトリガーされる関数の URL エンドポイントをコピーします。

    Azure ローカル出力のスクリーンショット。

  3. ブラウザーまたは HTTP テスト ツールを使用して URL エンドポイントに HTTP POST 要求を送信します。

    最後のセグメントをオーケストレーター関数の名前 (hello_orchestrator) に置き換えます。 この URL は http://localhost:7071/api/orchestrators/hello_orchestrator のようになります。

    応答は、HTTP 関数の最初の結果です。 これによって、持続的オーケストレーションが正常に開始されたことがわかります。 オーケストレーションの最終的な結果はまだ表示されません。 応答には、いくつかの便利な URL が含まれています。 ここでは、オーケストレーションの状態のクエリを実行します。

  4. statusQueryGetUri の URL 値をコピーし、それをブラウザーのアドレス バーに貼り付け、要求を実行します。 HTTP テスト ツールを引き続き使用して GET 要求を発行することもできます。

    この要求によって、オーケストレーション インスタンスの状態が照会されます。 これでインスタンスが完了し、Durable Function の出力または結果が含まれていることがわかります。 これは、次の例のようになります。

    {
        "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 アイコンを選択します。 その後、[リソース][Azure にサインイン] を選択します。

    Visual Studio Code の [Azure にサインイン] ウィンドウのスクリーンショット。

    既にサインインしていて、既存のサブスクリプションを確認できる場合は、次のセクションに進みます。 Azure アカウントをお持ちでない場合は、[Azure アカウントの作成] を選択します。 学生は、[Microsoft Azure for Students アカウントの作成] を選択できます。

  2. ブラウザーでプロンプトが表示されたら、ご利用の Azure アカウントを選択し、その Azure アカウントの資格情報を使用してサインインします。 新しいアカウントを作成した場合は、アカウントの作成後にサインインできます。

  3. 正常にサインインしたら、新しいブラウザー ウィンドウを閉じてかまいません。 ご利用の Azure アカウントに属しているサブスクリプションがサイド バーに表示されます。

Azure に関数アプリを作成する

このセクションでは、Azure サブスクリプションに関数アプリと関連リソースを作成します。 リソース作成に関する決定の多くは、既定の動作に基づいて自動的に行われます。 作成されたリソースをより細かく制御するには、代わりに高度なオプションを使って関数アプリを作成する必要があります。

  1. Visual Studio Code で、F1 キーを選択してコマンド パレットを開きます。 プロンプト (>) で、入力して [Azure Functions: Azure で関数アプリを作成する] を選択します。

  2. プロンプトで、次の情報を指定します。

    プロンプト アクション
    サブスクリプションを選択してください 使用する Azure サブスクリプションを選択します。 [リソース] に表示されるサブスクリプションが 1 つだけのときは、このプロンプトは表示されません。
    関数アプリのグローバルに一意の名前を入力してください URL パスに有効な名前を入力します。 入力した名前は、Azure Functions 内での一意性を確保するために検証されます。
    ランタイム スタックを選択してください 現在ローカルで実行している言語バージョンを選択してください。
    Select a ___location for new resources (新しいリソースの場所を選択してください) Azure のリージョンを選択します。 パフォーマンスを向上させるために、お近くのリージョンを選択してください。

    Azure に作成されている個々のリソースの状態が、Azure の拡張機能によって [Azure: アクティビティ ログ] パネルに表示されます。

    Azure リソース作成のログを示すスクリーンショット。

  3. 関数アプリが作成されると、次の関連リソースがご利用の Azure サブスクリプションに作成されます。 リソースの名前は、関数アプリに入力した名前に基づいて決まります。

    • リソース グループ。関連リソースの論理コンテナーです。
    • Standard Azure ストレージ アカウント。プロジェクトについての状態とその他の情報を保持します。
    • 関数アプリ。関数コードを実行するための環境となります。 関数アプリを使用すると、同じホスティング プランに含まれるリソースの管理、デプロイ、共有を容易にするための論理ユニットとして関数をグループ化できます。
    • Azure App Service プラン。関数アプリの基になるホストを定義します。
    • 関数アプリに接続された Application Insights インスタンス。アプリ内の関数の使用を追跡します。

    関数アプリが作成され、展開パッケージが適用されると、通知が表示されます。

    ヒント

    既定では、関数アプリに必要な Azure リソースが、入力した関数アプリの名前に基づいて作成されます。 既定では、関数アプリによって、同じ新しいリソース グループにリソースが作成されます。 関連付けられているリソースの名前をカスタマイズしたり、既存リソースを再利用したりしたい場合は、高度な作成オプションを使用してプロジェクトを発行します

Azure にプロジェクトをデプロイする

重要

既存の関数アプリにデプロイすると、Azure にあるそのアプリの内容が常に上書きされます。

  1. コマンド パレットで、入力して [Azure Functions: 関数アプリにデプロイする] を選択します。

  2. 作成したばかりの関数アプリを選びます。 前のデプロイの上書きを求められたら、[デプロイ] を選択して、関数コードを新しい関数アプリ リソースにデプロイします。

  3. デプロイの完了後、[出力の表示] を選択すると、作成済みの 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 サブスクリプションで関連コストが発生するのを避けるため、リソース グループは削除し、関連するすべてのリソースも削除してください。