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拡張機能を使用して使用できます。
重要
ページの上部にあるセレクターで Node.js プログラミング モデルを選ぶと、この記事の内容は変わります。 v4 モデルは一般提供されており、JavaScript と TypeScript の開発者が、より柔軟で直感的なエクスペリエンスが得られるように設計されています。 v3 と v4 の違いの詳細については、移行ガイドを参照してください。
前提条件
このクイック スタートを完了するには、次のものが必要です。
- Visual Studio Codeがインストールされています。
- Visual Studio Code拡張機能 Azure Functionsがインストールされています。
- Visual Studio Code拡張機能 Azure Functions バージョン 1.10.4 以降がインストールされています。
- 最新バージョンの Azure Functions Core Tools がインストールされています。
- Azure Functions Core Tools バージョン 4.0.5382 以降がインストールされています。
データをセキュリティで保護された状態に保つ HTTP テスト ツール。 詳細については、「HTTP テスト ツール」を参照してください。
Azure サブスクリプション。 Durable Functionsを使用するには、Azure Storage アカウントが必要です。
- Node.js バージョン 16.x 以降がインストールされている。
- Node.js バージョン 18.x 以降がインストールされている。
Azure アカウントがない場合は、開始する前に free アカウントを作成します。
ローカル プロジェクトを作成する
このセクションでは、Visual Studio Codeを使用してローカル Azure Functions プロジェクトを作成します。
Visual Studio Codeで F1 キーを押します (または Ctrl/Cmd + Shift + P キーを押して) コマンド パレットを開きます。 プロンプト (
>) で、「Azure Functions: 新しいプロジェクトの作成を入力して選択します。
を選択し、を参照します。 [フォルダーの選択] ダイアログで、プロジェクトに使用するフォルダーに移動し、[選択] を選択します。
プロンプトで、次の情報を指定します。
Prompt アクション 説明 関数アプリ プロジェクトの言語を選択してください [ JavaScript] を選択します。 ローカル Node.js 関数プロジェクトを作成します。 JavaScript プログラミング モデルを選択する Model V3 を選択します。 v3 プログラミング モデルを設定します。 バージョンを選択してください Azure Functions v4 を選択します。 このオプションは、Core Tools がまだインストールされていない場合にのみ表示されます。 その場合、アプリの初回実行時に Core Tools がインストールされます。 プロジェクトの最初の関数のテンプレートを選択します [今はスキップ] を選択します。 プロジェクトを開く方法を選択してください [Open in current window] (現在のウィンドウで開く) を選択します。 選択したフォルダー内のVisual Studio Codeを開きます。
プロンプトで、次の情報を指定します。
Prompt アクション 説明 関数アプリ プロジェクトの言語を選択してください [ JavaScript] を選択します。 ローカル Node.js 関数プロジェクトを作成します。 JavaScript プログラミング モデルを選択する [モデル V4] を選択します。 v4 プログラミング モデルを選びます。 バージョンを選択してください Azure Functions v4 を選択します。 このオプションは、Core Tools がまだインストールされていない場合にのみ表示されます。 その場合、アプリの初回実行時に Core Tools がインストールされます。 プロジェクトの最初の関数のテンプレートを選択します [今はスキップ] を選択します。 プロジェクトを開く方法を選択してください [Open in current window] (現在のウィンドウで開く) を選択します。 選択したフォルダー内のVisual Studio Codeを開きます。
Visual Studio Code は、プロジェクトの作成に必要な場合に Azure Functions Core Tools をインストールします。 また、関数アプリ プロジェクトがフォルダーに作成されます。 このプロジェクトには、host.json および local.settings.json 構成ファイルが含まれています。
また、ルート フォルダーには、package.json ファイルも作成されます。
Durable Functions npm パッケージをインストールする
Node.js 関数アプリでDurable Functionsを操作するには、durable-functions というライブラリを使用します。
v4 プログラミング モデルを使用するには、durable-functions ライブラリの v3.x バージョンをインストールします。
- View メニューを使用するか、Ctrl + Shift + ' キーを押してVisual Studio Codeで新しいターミナルを開きます。
- 関数アプリのルート ディレクトリで を実行して、永続関数 npm パッケージをインストールします。
- 関数アプリのルート ディレクトリで を実行して、永続関数 npm パッケージ プレビュー バージョンをインストールします。
関数を作成する
最も基本的なDurable Functions アプリには、次の 3 つの機能があります。
- オーケストレーター関数: 他の関数のオーケストレーションを行うワークフロー。
- アクティビティ関数: オーケストレーター関数によって呼び出される関数で、作業を実行し、必要に応じて値を返します。
- Client 関数: オーケストレーター関数を開始するAzureの標準関数。 この例では、HTTP によってトリガーされる関数を使用しています。
オーケストレーター関数
テンプレートを使用して、プロジェクトにDurable Functionsアプリ コードを作成します。
コマンド パレットで、「Azure Functions: 関数の作成を入力して選択します。
プロンプトで、次の情報を指定します。
Prompt アクション 説明 関数のテンプレートを選択します [Durable Functions オーケストレーター を選択します。 Durable Functions アプリオーケストレーションを作成します。 永続ストレージの種類を選択してください Azure Storage (既定値) を選択>。 Durable Functions アプリに使用するストレージ バックエンドを選択します。 関数に名前を指定します 「HelloOrchestrator」と入力します。 Durable Function の名前。
ここでは、アクティビティ関数を調整するオーケストレーターを追加しました。 HelloOrchestrator/index.js を開いて、オーケストレーター関数を確認します。 を呼び出すたびに、 という名前のアクティビティ関数が呼び出されます。
次に、参照先の アクティビティ関数を追加します。
アクティビティ関数
コマンド パレットで、「Azure Functions: 関数の作成を入力して選択します。
プロンプトで、次の情報を指定します。
Prompt アクション 説明 関数のテンプレートを選択します Durable Functions activity を選択します。 アクティビティ関数を作成します。 関数に名前を指定します 「Hello」と入力します。 Durable Function の名前。
オーケストレーターによって呼び出される アクティビティ関数を追加しました。 Hello/index.js を開いて、名前を入力として受け取り、あいさつを返すことがわかります。 アクティビティ関数は、データベース呼び出しの実行や非決定的な計算の実行など、ワークフローで "実際の作業" を実行する場所です。
最後に、オーケストレーションを開始する、HTTP によってトリガーされる関数を追加します。
クライアント関数 (HTTP スターター)
コマンド パレットで、「Azure Functions: 関数の作成を入力して選択します。
プロンプトで、次の情報を指定します。
Prompt アクション 説明 関数のテンプレートを選択します Durable Functions HTTP スターターを選択します。 HTTP スターター関数を作成します。 関数に名前を指定します 「DurableFunctionsHttpStart」と入力します。 アクティビティ関数の名前。 承認レベル [ 匿名] を選択します。 デモの目的で、この値を使用すると、認証を使用せずに関数を呼び出すことができます
オーケストレーションを開始する、HTTP によってトリガーされる関数を追加しました。 DurableFunctionsHttpStart/index.js を開いて、 を使用して新しいオーケストレーションが開始されていることを確認します。 次に、 を使用して HTTP 応答が返されます。その応答には、新しいオーケストレーションを監視および管理するために使用できる URL が含まれています。
これで、ローカルで実行してAzureにデプロイできるDurable Functions アプリが作成されました。
v4 プログラミング モデルの利点の 1 つは、関数を記述する場所の柔軟性です。 v4 モデルでは、1 つのテンプレートを使用して、プロジェクト内の 1 つのファイルで 3 つの関数すべてを作成できます。
コマンド パレットで、「Azure Functions: 関数の作成を入力して選択します。
プロンプトで、次の情報を指定します。
Prompt アクション 説明 関数のテンプレートを選択します [Durable Functions オーケストレーター を選択します。 Durable Functions アプリ オーケストレーション、アクティビティ関数、および永続的なクライアント スターター関数を含むファイルを作成します。 永続ストレージの種類を選択してください Azure Storage (既定値) を選択>。 Durable Functions アプリに使用するストレージ バックエンドを設定します。 関数に名前を指定します 「hello」と入力します。 永続関数の名前。
src/functions/hello.js を開き、作成した関数を表示します。
アクティビティ関数を調整する という名前のオーケストレーターを作成しました。 を呼び出すたびに、 という名前のアクティビティ関数が呼び出されます。
また、オーケストレーターによって呼び出される アクティビティ関数を追加しました。 同じファイルで、名前を入力として受け取り、あいさつ文を返すことがわかります。 アクティビティ関数は、データベース呼び出しの実行や非決定的な計算の実行など、ワークフローで "実際の作業" を実行する場所です。
最後に、オーケストレーションを開始する HTTP によってトリガーされる関数も追加しました。 同じファイルで、 を使用して新しいオーケストレーションを開始していることがわかります。 次に、 を使用して HTTP 応答が返されます。その応答には、新しいオーケストレーションを監視および管理するために使用できる URL が含まれています。
これで、ローカルで実行してAzureにデプロイできるDurable Functions アプリが作成されました。
関数をローカルでテストする
Azure Functions Core Tools を使用すると、ローカル開発コンピューターでAzure Functions プロジェクトを実行できます。 Visual Studio Codeで初めて関数を起動するときに、これらのツールをインストールするように求められます。
関数をテストするには、 アクティビティ関数のコード (Hello/index.js 内) にブレークポイントを設定します。 F5 キーを押すか、コマンド パレットで [デバッグ: デバッグの開始] を選択して、関数アプリ プロジェクトを開始します。 Core Tools の出力がターミナル パネルに表示されます。
注
デバッグの詳細については、「Durable Functions diagnostics」を参照してください。
関数をテストするには、 アクティビティ関数のコード (src/functions/hello.js 内) にブレークポイントを設定します。 F5 キーを押すか、コマンド パレットで [デバッグ: デバッグの開始] を選択して、関数アプリ プロジェクトを開始します。 Core Tools の出力がターミナル パネルに表示されます。
注
デバッグの詳細については、「Durable Functions diagnostics」を参照してください。
Durable Functionsを実行するには、Azure Storage アカウントが必要です。 Visual Studio Codeがストレージ アカウントの選択を求めたら、ストレージ アカウントの選択を選択します。
プロンプトで、次の情報を入力して、Azureで新しいストレージ アカウントを作成します。
Prompt 値 説明 サブスクリプションの選択 <お使いのサブスクリプションの名前> Azure サブスクリプションを選択する Select a storage account (ストレージ アカウントを選択する) 新しいストレージ アカウントの作成 Enter the name of the new storage account (新しいストレージ アカウントの名前を入力する) <一意の名前> 作成するストレージ アカウントの名前 リソース グループの選択 <一意の名前> 作成するリソース グループの名前 場所を選択します。 リージョン 近くのリージョンを選択します ターミナル パネルで、HTTP によってトリガーされる関数の URL エンドポイントをコピーします。
ブラウザーまたは HTTP テスト ツールを使用して URL エンドポイントに HTTP POST 要求を送信します。
最後のセグメントをオーケストレーター関数の名前 () に置き換えます。 この URL は のようになります。
応答は、HTTP 関数の最初の結果です。 これによって、持続的オーケストレーションが正常に開始されたことがわかります。 オーケストレーションの最終的な結果はまだ表示されません。 応答には、いくつかの便利な URL が含まれています。 ここでは、オーケストレーションの状態のクエリを実行します。
ブラウザーまたは HTTP テスト ツールを使用して URL エンドポイントに HTTP POST 要求を送信します。
最後のセグメントをオーケストレーター関数の名前 () に置き換えます。 この URL は のようになります。
応答は、HTTP 関数の最初の結果です。 これによって、持続的オーケストレーションが正常に開始されたことがわかります。 オーケストレーションの最終的な結果はまだ表示されません。 応答には、いくつかの便利な URL が含まれています。 ここでは、オーケストレーションの状態のクエリを実行します。
の URL 値をコピーし、それをブラウザーのアドレス バーに貼り付け、要求を実行します。 または、HTTP テスト ツールを引き続き使用して GET 要求を発行することもできます。
この要求によって、オーケストレーション インスタンスの状態が照会されます。 次の例のように、インスタンスが完了し、Durable Functions アプリの出力または結果が含まれていることを確認できます。
{ "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" }
の URL 値をコピーし、それをブラウザーのアドレス バーに貼り付け、要求を実行します。 HTTP テスト ツールを引き続き使用して GET 要求を発行することもできます。
この要求によって、オーケストレーション インスタンスの状態が照会されます。 次の例のように、インスタンスが完了し、Durable Functions アプリの出力または結果が含まれていることを確認できます。
{ "name": "helloOrchestrator", "instanceId": "6ba3f77933b1461ea1a3828c013c9d56", "runtimeStatus": "Completed", "input": "", "customStatus": null, "output": [ "Hello, Tokyo", "Hello, Seattle", "Hello, Cairo" ], "createdTime": "2023-02-13T23:02:21Z", "lastUpdatedTime": "2023-02-13T23:02:25Z" }
- 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で関数をテストする
注
v4 Node.js プログラミング モデルを使用するには、Azure Functions ランタイムのバージョン 4.25 以上でアプリが実行されていることを確認します。
出力パネルで HTTP トリガーの URL をコピーします。 HTTP によってトリガーされる関数を呼び出す URL は、次の形式であることが必要です。
https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
出力パネルで HTTP トリガーの URL をコピーします。 HTTP によってトリガーされる関数を呼び出す URL は、次の形式であることが必要です。
https://<functionappname>.azurewebsites.net/api/orchestrators/helloOrchestrator
- HTTP 要求のこの新しい URL をブラウザーのアドレス バーに貼り付けます。 発行されたアプリを使用すると、ローカルでテストした場合と同じ状態の応答を受け取ることができるはずです。
Visual Studio Codeで作成して発行した JavaScript Durable Functions アプリを使用する準備ができました。
リソースをクリーンアップする
クイック スタートを完了するために作成したリソースが不要になった場合は、Azure サブスクリプションの関連コストを回避するために、リソース グループおよびすべての関連リソースを削除します。
関連コンテンツ
- common Durable Functions アプリ パターンについて説明します。