JavaScript で最初の Durable Functions を作成する

Durable Functions は、サーバーレス環境でステートフル関数を記述できる Azure Functions の拡張機能です。 この拡張機能は状態、チェックポイント、再起動を管理します。

この記事では、Visual Studio Code Azure Functions 拡張機能を使用して、"hello world" Durable Functions をローカルで作成してテストする方法について説明します。 この関数は、他の関数の呼び出しを調整し、連結します。 その後、関数コードを Azure に発行します。

重要

ページの上部にあるセレクターで Node.js プログラミング モデルを選ぶと、この記事の内容は変わります。 v4 モデルは一般提供されており、JavaScript と TypeScript の開発者にとって、より柔軟で直感的なエクスペリエンスが得られるように設計されています。 v3 と v4 の違いの詳細については、移行ガイドを参照してください。

Edge ウィンドウのスクリーンショット。ウィンドウには、Azure で単純な持続的関数を呼び出した出力が表示されています。

前提条件

このチュートリアルを完了するには、以下が必要です。

  • Azure Functions VS Code 拡張機能 1.10.4 以降をインストールします。
  • Durable Functions には Azure ストレージ アカウントが必要です。 Azure サブスクリプションが必要です。
  • Node.js のバージョン 16.x 以降がインストールされていることを確認します。
  • Node.js のバージョン 18.x 以降がインストールされていることを確認します。

Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。

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

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

  1. Visual Studio Code で、F1 (または Ctrl または Cmd + Shift + P) キーを押して、コマンド パレットを開きます。 コマンド パレットで、Azure Functions: Create New Project... を検索して選択します。

    Visual Studio Code コマンド パレットのスクリーンショット。

  2. プロジェクト用に空のフォルダーの場所を選択し、 [選択] を選択します。

  1. プロンプトに従って、次の情報を入力します。

    Prompt 説明
    Select a language for your function app project (関数アプリ プロジェクトの言語を選択してください) JavaScript ローカル Node.js 関数プロジェクトを作成します。
    JavaScript プログラミング モデルを選択する モデル V3 V3 プログラミング モデルを選択します。
    Select a version (バージョンを選択してください) Azure Functions v4 このオプションが表示されるのは、Core Tools がまだインストールされていない場合だけです。 その場合、アプリの初回実行時に Core Tools がインストールされます。
    Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) 今はしない
    Select how you would like to open your project (プロジェクトを開く方法を選択してください) 現在のウィンドウで開く 選択したフォルダーで VS Code を開き直します。
  1. プロンプトに従って、次の情報を入力します。

    Prompt 説明
    Select a language for your function app project (関数アプリ プロジェクトの言語を選択してください) JavaScript ローカル Node.js 関数プロジェクトを作成します。
    JavaScript プログラミング モデルを選択する モデル V4 V4 プログラミング モデルを選びます。
    Select a version (バージョンを選択してください) Azure Functions v4 このオプションが表示されるのは、Core Tools がまだインストールされていない場合だけです。 その場合、アプリの初回実行時に Core Tools がインストールされます。
    Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) 今はしない
    Select how you would like to open your project (プロジェクトを開く方法を選択してください) 現在のウィンドウで開く 選択したフォルダーで VS Code を開き直します。

Azure Functions Core Tools は、必要に応じて Visual Studio Code によりインストールされます。 また、関数アプリ プロジェクトがフォルダーに作成されます。 このプロジェクトには、host.json および local.settings.json 構成ファイルが含まれています。

ルート フォルダーには、package.json ファイルも作成されます。

Durable Functions npm パッケージをインストールする

Node.js 関数アプリで Durable Functions を使用して作業するには、durable-functions というライブラリを使用します。

V4 プログラミング モデルを使用するには、プレビュー v3.x バージョンの durable-functions をインストールする必要があります。

  1. [表示] メニューまたは Ctrl + Shift + ` キーを使用して、VS Code で新しいターミナルを開きます。
  1. 関数アプリのルート ディレクトリで npm install durable-functions を実行して、durable-functions npm パッケージをインストールします。
  1. 関数アプリのルート ディレクトリで npm install durable-functions@preview を実行して、durable-functions npm パッケージのプレビュー バージョンをインストールします。

関数を作成する

最も基本的な Durable Functions アプリには、3 つの関数が含まれています。

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

オーケストレーター関数

テンプレートを使用してプロジェクト内に永続関数のコードを作成します。

  1. コマンド パレットで、Azure Functions: Create Function... を検索して選択します。

  2. プロンプトに従って、次の情報を入力します。

    Prompt 説明
    Select a template for your function (関数のテンプレートを選択してください) Durable Functions オーケストレーター Durable Functions オーケストレーションを作成します
    永続ストレージの種類を選択します。 Azure Storage (既定値) Durable Functions に使用するストレージ バックエンドを選択します。
    Provide a function name (関数名を指定してください) HelloOrchestrator 持続的な関数の名前

アクティビティ関数を調整するオーケストレーターを追加しました。 HelloOrchestrator/index.js を開いて、オーケストレーター関数を確認します。 context.df.callActivity を呼び出すたびに、Hello という名前のアクティビティ関数が呼び出されます。

次に、参照先の Hello アクティビティ関数を追加します。

アクティビティ関数

  1. コマンド パレットで、Azure Functions: Create Function... を検索して選択します。

  2. プロンプトに従って、次の情報を入力します。

    Prompt 説明
    Select a template for your function (関数のテンプレートを選択してください) Durable Functions のアクティビティ アクティビティ関数を作成する
    Provide a function name (関数名を指定してください) こんにちは アクティビティ関数の名前

オーケストレーターによって呼び出される Hello アクティビティ関数を追加しました。 Hello/index.js を開いて、それが入力として名前を受け取り、あいさつを返すことを確認します。 アクティビティ関数は、ワークフローで "実際の作業" を実行する場所です。たとえば、データベース呼び出しを行ったり、決定論的でない計算を実行したりする作業です。

最後に、オーケストレーションを開始する、HTTP によってトリガーされる関数を追加します。

クライアント関数 (HTTP スターター)

  1. コマンド パレットで、Azure Functions: Create Function... を検索して選択します。

  2. プロンプトに従って、次の情報を入力します。

    Prompt 説明
    Select a template for your function (関数のテンプレートを選択してください) Durable Functions HTTP スターター HTTP スターター関数を作成する
    Provide a function name (関数名を指定してください) DurableFunctionsHttpStart アクティビティ関数の名前
    承認レベル Anonymous デモの目的で、認証を使用せずに関数を呼び出すことができるようにします。

オーケストレーションを開始する、HTTP によってトリガーされる関数を追加しました。 DurableFunctionsHttpStart/index.js を開いて、client.startNew を使用して新しいオーケストレーションが開始されていることを確認します。 次に、client.createCheckStatusResponse を使用して HTTP 応答が返されます。その応答には、新しいオーケストレーションを監視および管理するために使用できる URL が含まれています。

これで、ローカルで実行して Azure にデプロイできる Durable Functions アプリが作成されました。

V4 プログラミング モデルの利点の 1 つは、関数を記述する場所の柔軟性です。 V4 モデルでは、1 つのテンプレートを使用して、プロジェクト内の 1 つのファイルで 3 つの関数すべてを作成できます。

  1. コマンド パレットで、Azure Functions: Create Function... を検索して選択します。

  2. プロンプトに従って、次の情報を入力します。

    Prompt 説明
    Select a template for your function (関数のテンプレートを選択してください) Durable Functions オーケストレーター Durable Functions オーケストレーション、アクティビティ関数、Durable Client スターター関数を含むファイルを作成します。
    永続ストレージの種類を選択します Azure Storage (既定値) Durable Functions に使用するストレージ バックエンドを選択します。
    Provide a function name (関数名を指定してください) hello 永続関数に使用される名前

src/functions/hello.js を開き、作成した関数を表示します。

アクティビティ関数を調整する helloOrchestrator という名前のオーケストレーターを作成しました。 context.df.callActivity を呼び出すたびに、hello という名前のアクティビティ関数が呼び出されます。

また、オーケストレーターによって呼び出される hello アクティビティ関数を追加しました。 同じファイルで、これが入力として名前を受け取って、あいさつを返していることが分かります。 アクティビティ関数は、ワークフローで "実際の作業" を実行する場所です。たとえば、データベース呼び出しを行ったり、決定論的でない計算を実行したりする作業です。

最後に、オーケストレーションを開始する、HTTP によってトリガーされる関数も追加しました。 同じファイルで、client.startNew を使用して新しいオーケストレーションを開始していることがわかります。 次に、client.createCheckStatusResponse を使用して HTTP 応答が返されます。その応答には、新しいオーケストレーションを監視および管理するために使用できる URL が含まれています。

これで、ローカルで実行して Azure にデプロイできる Durable Functions アプリが作成されました。

関数をローカルでテストする

Azure Functions Core Tools を使用すると、ローカルの開発用コンピューター上で Azure Functions プロジェクトを実行できます。 Visual Studio Code から初めて関数を起動すると、これらのツールをインストールするよう求めるメッセージが表示されます。

  1. 関数をテストするには、Hello アクティビティ関数のコード (Hello/index.js) にブレークポイントを設定します。 F5 キーを押すか、コマンド パレットから Debug: Start Debugging を選択して、関数アプリ プロジェクトを開始します。 Core Tools からの出力がターミナル パネルに表示されます。
  1. 関数をテストするには、hello アクティビティ関数のコード (src/functions/hello.js) にブレークポイントを設定します。 F5 キーを押すか、コマンド パレットから Debug: Start Debugging を選択して、関数アプリ プロジェクトを開始します。 Core Tools からの出力がターミナル パネルに表示されます。

Note

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

  1. Durable Functions を実行するには Azure ストレージ アカウントが必要です。 VS Code でストレージ アカウント選択のプロンプトが表示されたら、 [ストレージ アカウントの選択] を選択します。

    Visual Studio Code のアラート ウィンドウのスクリーンショット。ウィンドウに

  2. プロンプトに従って次の情報を入力し、Azure で新しいストレージ アカウントを作成します。

    Prompt 説明
    サブスクリプションの選択 <お使いのサブスクリプションの名前> Azure サブスクリプションを選択します。
    Select a storage account (ストレージ アカウントを選択する) 新しいストレージ アカウントの作成
    Enter the name of the new storage account (新しいストレージ アカウントの名前を入力する) <一意の名前> 作成するストレージ アカウントの名前
    リソース グループの選択 <一意の名前> 作成するリソース グループの名前
    場所を選択します。 リージョン 近くのリージョンを選択します
  3. ターミナル パネルで、HTTP によってトリガーされる関数の URL エンドポイントをコピーします。

    Visual Studio Code ターミナル パネルのスクリーンショット。ターミナルには、Durable Functions アプリをローカルで実行した出力が表示されています。

  1. ブラウザーもしくは、Postman または cURL のようなツールを使用して、HTTP POST 要求を URL エンドポイントに送信します。 最後のセグメントをオーケストレーター関数の名前 (HelloOrchestrator) に置き換えます。 この URL は http://localhost:7071/api/orchestrators/HelloOrchestrator のようになります。
  1. ブラウザーもしくは、Postman または cURL のようなツールを使用して、HTTP POST 要求を URL エンドポイントに送信します。 最後のセグメントをオーケストレーター関数の名前 (helloOrchestrator) に置き換えます。 この URL は http://localhost:7071/api/orchestrators/helloOrchestrator のようになります。

応答は、永続的なオーケストレーションが正常に開始されたことを示す HTTP 関数の最初の結果です。 これはまだオーケストレーションの最終的な結果ではありません。 応答には、いくつかの便利な URL が含まれています。 ここでは、オーケストレーションの状態を照会してみましょう。

  1. statusQueryGetUri の URL 値をコピーし、ブラウザーのアドレス バーに貼り付け、要求を実行します。 また、引き続き 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": "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"
    }
    
  2. デバッグを停止するには、VS Code で Shift キーを押しながら F5 キーを押します。

関数がローカル コンピューター上で正常に動作することを確認したら、プロジェクトを Azure に発行します。

Azure へのサインイン

Azure リソースを作成したり、アプリを発行したりする前に、Azure にサインインする必要があります。

  1. まだサインインしていない場合は、[アクティビティ] バーの Azure アイコンを選択します。 次に、[リソース] 領域で [Azure にサインイン...] を選択します。

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

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

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

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

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

このセクションでは、Azure サブスクリプションに関数アプリと関連リソースを作成します。

  1. アクティビティ バーの Azure アイコンを選択します。 次に、[リソース] 領域の + アイコンを選択し、[Azure に関数アプリを作成] オプションを選択します。

    Azure サブスクリプションでリソースを作成する

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

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

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

    Azure リソース作成のログ

  3. 作成が完了すると、次の Azure リソースがサブスクリプションに作成されます。 リソースは、関数アプリの名前に基づいて命名されます。

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

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

    ヒント

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

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

重要

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

  1. Azure アクティビティの [リソース] 領域で、先ほど作成した関数アプリ リソースを見つけて、リソースを右クリックし、[関数アプリにデプロイ] を選択します。

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

  3. デプロイの完了後、[View Output] (出力の表示) を選択すると、作成済みの Azure リソースなど、作成とデプロイの結果が表示されます。 通知を見逃した場合は、右下隅にあるベル アイコンを選択して、再度確認します。

    [出力の表示] ウィンドウのスクリーンショット。

Azure で関数をテストする

Note

V4 ノード プログラミング モデルを使うには、アプリが Azure Functions Runtime のバージョン 4.25 以降で実行されていることを確認してください。

  1. 出力パネルから HTTP トリガーの URL をコピーします。 HTTP によってトリガーされる関数を呼び出す URL は、次の形式である必要があります: https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
  1. 出力パネルから HTTP トリガーの URL をコピーします。 HTTP によってトリガーされる関数を呼び出す URL は、次の形式である必要があります: https://<functionappname>.azurewebsites.net/api/orchestrators/helloOrchestrator
  1. HTTP 要求のこの新しい URL をブラウザーのアドレス バーに貼り付けます。 以前の発行済みアプリの使用時と同じ状態応答を受け取るはずです。

次のステップ

Visual Studio Code を使用して、JavaScript の Durable Functions アプリを作成して発行しました。