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拡張機能を使用して使用できます。
注
このクイックスタートでは、Python 用のデコレーター ベースの
前提条件
このクイック スタートを完了するには、次のものが必要です。
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 プロジェクトを作成します。
Visual Studio Codeで F1 キーを押します (または Ctrl/Cmd + Shift + P キーを押して) コマンド パレットを開きます。 プロンプト (
>) で、「Azure Functions: 新しいプロジェクトの作成を入力して選択します。[関数の作成] ウィンドウのスクリーンショット。
を選択し、を参照します。 [フォルダーの選択] ダイアログで、プロジェクトに使用するフォルダーに移動し、[選択] を選択します。
プロンプトで、次の情報を指定します。
Prompt アクション 説明 関数アプリ プロジェクトの言語を選択してください 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は、選択したバージョンを使用して仮想環境を作成します。 プロジェクトの最初の関数のテンプレートを選択します [今はスキップ] を選択します。 プロジェクトを開く方法を選択してください [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に必要な依存関係をいくつかインストールする必要があります。
エディターで requirements.txt を開き、内容を次のコードのように変更します。
azure-functions azure-functions-durable現在のフォルダーで、エディターの統合ターミナルを開きます (Ctrl + Shift + ` キー)。
統合ターミナルで、ご使用のオペレーティング システムに応じて、現在のフォルダーの仮想環境をアクティブにします。
- リナックス
- macOS
- Windows
source .venv/bin/activate
続いて、仮想環境がアクティブになっている統合ターミナルで pip を使用して、定義したパッケージをインストールします。
python -m pip install -r requirements.txt
注
azure-functions-durable v1.2.4 以降をインストールする必要があります。
関数を作成する
最も基本的なDurable Functions アプリには、次の 3 つの機能があります。
- オーケストレーター関数: 他の関数のオーケストレーションを行うワークフロー。
- アクティビティ関数: オーケストレーター関数によって呼び出される関数で、作業を実行し、必要に応じて値を返します。
- Client 関数: オーケストレーター関数を開始する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/{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 つの関数が呼び出され、リスト内の 3 つすべての関数の順序付けられた結果が返されます。 |
hello |
オーケストレーション対象の作業を実行するアクティビティ関数。 関数は、引数として渡された市区町村に簡単なあいさつ文を返します。 |
http_start |
オーケストレーションのインスタンスを開始し、 の応答を返す、。 |
注
Durable Functionsでは、v2 プログラミング モデル blueprintsPythonもサポートされています。 ブループリントを使用するには、azure-functions-durableBlueprintclass を使用してブループリント関数を登録します。 結果のブループリントは、通常どおり登録できます。 例として、sample を使用できます。
ストレージ エミュレーターを構成する
Azure Storageのエミュレーターである Azurite を使用して、関数をローカルでテストできます。 local.settings.json で、次の例のように の値を に設定します。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python"
}
}
Visual Studio Codeで Azurite 拡張機能のインストールと実行を開始するには、コマンド パレットで「
Durable Functions アプリには、その他のストレージ オプションを使用できます。 ストレージ オプションと利点の詳細については、「Durable Functions ストレージ プロバイダー」を参照してください。
関数をローカルでテストする
Azure Functions Core Tools を使用すると、ローカル開発コンピューターでAzure Functions プロジェクトを実行できます。 インストールされていない場合は、Visual Studio Codeで初めて関数を起動するときに、これらのツールをインストールするように求められます。
関数をテストするには、 アクティビティ関数コードにブレークポイントを設定します。 F5 キーを押すか、コマンド パレットで [デバッグ: デバッグの開始] を選択して、関数アプリ プロジェクトを開始します。 Core Tools の出力がターミナル パネルに表示されます。
注
デバッグの詳細については、「Durable Functions diagnostics」を参照してください。
ターミナル パネルで、HTTP によってトリガーされる関数の URL エンドポイントをコピーします。
Azure のローカル出力のスクリーンショット ブラウザーまたは HTTP テスト ツールを使用して URL エンドポイントに HTTP POST 要求を送信します。
最後のセグメントをオーケストレーター関数の名前 () に置き換えます。 この URL は のようになります。
応答は、HTTP 関数の最初の結果です。 これによって、持続的オーケストレーションが正常に開始されたことがわかります。 オーケストレーションの最終的な結果はまだ表示されません。 応答には、いくつかの便利な URL が含まれています。 ここでは、オーケストレーションの状態のクエリを実行します。
の 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" }デバッグを停止するには、Visual Studio Codeで Shift + F5 キーを押します。
関数がローカル コンピューターで正しく実行されていることを確認したら、プロジェクトをAzureに発行します。
Azureにサインインする
Azureリソースを作成したり、アプリを発行したりする前に、Azureにサインインする必要があります。
まだサインインしていない場合は、Activity バーで、Azure アイコンを選択します。 次に、Resources で Sign in to Azure を選択します。
Visual Studio Code の Azure ウィンドウへのサインイン画面のスクリーンショット 既にサインインしていて、既存のサブスクリプションを確認できる場合は、次のセクションに進みます。 Azure アカウントをまだお持ちでない場合は、Azure アカウントの作成 を選択>。 学生は[学生アカウントのAzureを作成するを選択できます。
ブラウザーでメッセージが表示されたら、Azure アカウントを選択し、Azure アカウントの資格情報を使用してサインインします。 新しいアカウントを作成した場合は、アカウントの作成後にサインインできます。
正常にサインインしたら、新しいブラウザー ウィンドウを閉じることができます。 Azure アカウントに属しているサブスクリプションがサイド バーに表示されます。
Azureで関数アプリを作成する
このセクションでは、Flex 従量課金プランで、Azure サブスクリプションの関連リソースと共に関数アプリを作成します。 リソース作成に関する決定の多くは、既定の動作に基づいて自動的に行われます。 作成されたリソースをより細かく制御するには、代わりに高度なオプションを使って関数アプリを作成する必要があります。
Visual Studio Codeで F1 キーを押してコマンド パレットを開きます。 プロンプト (
>) で、「Azure Functions: Create Function App in Azure」と入力して選択します。プロンプトで、次の情報を指定します。
Prompt アクション サブスクリプションを選択してください 使用するAzure サブスクリプションを選択します。 [リソース] に表示されるサブスクリプションが 1 つだけのときは、このプロンプトは表示されません。 新しい関数アプリ名を入力する URL パスで有効なグローバルに一意の名前を入力します。 入力した名前は、Azure Functionsで一意であることを確認するために検証されます。 Select a location for new resources (新しいリソースの場所を選択してください) Azureリージョンを選択します。 パフォーマンスを向上させるために、お近くのリージョンを選択してください。 Flex 従量課金プランでサポートされているリージョンのみが表示されます。 ランタイム スタックを選択してください 現在ローカルで実行している言語バージョンを選択してください。 リソース認証の種類を選択する 既定のホスト ストレージ アカウントに接続するための最も安全なオプションであるマネージド ID を選択します。 Azure: アクティビティ ログ パネルで、Azure拡張機能に、Azureで作成された個々のリソースの状態が表示されます。
関数アプリが作成されると、Azure サブスクリプションに次の関連リソースが作成されます。 リソースの名前は、関数アプリに入力した名前に基づいて決まります。
- リソース グループ。関連リソースの論理コンテナーです。
- 関数アプリ。関数コードを実行するための環境となります。 関数アプリを使用すると、同じホスティング プランに含まれるリソースの管理、デプロイ、共有を容易にするための論理ユニットとして関数をグループ化できます。
- Azure App Service プラン。関数アプリの基になるホストを定義します。
- 標準Azure Storage アカウント。関数アプリに関する状態やその他の情報を維持するために Functions ホストによって使用されます。
- 関数アプリに接続された Application Insights インスタンス。アプリ内の関数の使用を追跡します。
- 新しい既定のホスト ストレージ アカウントの ストレージ BLOB データ共同作成者 ロールに追加されるユーザー割り当てマネージド ID。
関数アプリが作成され、展開パッケージが適用されると、通知が表示されます。
ヒント
既定では、関数アプリに必要なAzure リソースは、関数アプリに入力した名前に基づいて作成されます。 既定では、関数アプリによって、同じ新しいリソース グループにリソースが作成されます。 関連付けられているリソースの名前をカスタマイズする、または既存のリソースを再利用する必要がある場合は、高度な作成オプションを使用してプロジェクトを発行します。
プロジェクトを Azure に配置する
重要
既存の関数アプリにデプロイすると、常にAzure内のアプリの内容が上書きされます。
コマンド パレットで、「Azure Functions: Function App にデプロイするを入力して選択します。
作成したばかりの関数アプリを選択します。 前のデプロイの上書きを求められたら、[デプロイ] を選択して、関数コードを新しい関数アプリ リソースにデプロイします。
デプロイが完了したら、View Output を選択して、作成したAzure リソースを含む作成とデプロイの結果を表示します。 通知を見逃した場合は、右下隅にあるベル アイコンを選択して、再度確認します。
[出力の表示] ウィンドウのスクリーンショット。
Azureで関数をテストする
出力パネルから HTTP トリガーの URL をコピーします。 HTTP によってトリガーされる関数を呼び出す URL は、次の形式である必要があります:
https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestratorHTTP 要求のこの新しい URL をブラウザーのアドレス バーに貼り付けます。 発行されたアプリを使用すると、ローカルでテストした場合と同じ状態の応答を受け取ることができるはずです。
Visual Studio Codeを使用して作成して発行したPython Durable Functions アプリを使用する準備ができました。
リソースをクリーンアップする
クイック スタートを完了するために作成したリソースが不要になった場合は、Azure サブスクリプションの関連コストを回避するために、リソース グループおよびすべての関連リソースを削除します。
関連コンテンツ
- common Durable Functions アプリ パターンについて説明します。
- 単体テストについて