JavaScript で最初の Durable Functions を作成するCreate your first durable function in JavaScript

Durable Functions は、サーバーレス環境でステートフル関数を記述できる Azure Functions の拡張機能です。Durable Functions is an extension of Azure Functions that lets you write stateful functions in a serverless environment. この拡張機能は状態、チェックポイント、再起動を管理します。The extension manages state, checkpoints, and restarts for you.

この記事では、Visual Studio Code Azure Functions 拡張機能を使用して、"hello world" Durable Functions をローカルで作成してテストする方法について説明します。In this article, you learn how to use the Visual Studio Code Azure Functions extension to locally create and test a "hello world" durable function. この関数は、他の関数の呼び出しを調整し、連結します。This function will orchestrate and chain together calls to other functions. その後、関数コードを Azure に発行します。You then publish the function code to Azure.

Azure で Durable Functions を実行する

前提条件Prerequisites

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

  • Visual Studio Code をインストールします。Install Visual Studio Code.

  • 最新の Azure Functions ツールがあることを確認します。Make sure you have the latest Azure Functions tools.

  • Windows コンピューターでは、Azure Storage Emulator がインストールされ、実行されていることを確認します。On a Windows computer, verify you have the Azure Storage Emulator installed and running. Mac または Linux コンピューターでは、実際の Azure ストレージ アカウントを使用する必要があります。On a Mac or Linux computer, you must use an actual Azure storage account.

  • バージョン 8.0 以降の Node.js がインストールされていることを確認します。Make sure that you have version 8.0 or a later version of Node.js installed.

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。If you don't have an Azure subscription, create a free account before you begin.

Azure Functions 拡張機能をインストールするInstall the Azure Function extension

関数を作成してテストし、Azure にデプロイするには、Azure Functions 拡張機能を使用します。The Azure Functions extension is used to create, test, and deploy functions to Azure.

  1. Visual Studio Code で [拡張機能] を開き、azure functions を検索するか、Visual Studio Code でこのリンクを開きますIn Visual Studio Code, open Extensions and search for azure functions, or open this link in Visual Studio Code.

  2. [インストール] を選択して、Visual Studio Code に拡張機能をインストールします。Select Install to install the extension to Visual Studio Code.

    Azure Functions の拡張機能をインストールする

  3. Visual Studio Code を再起動し、アクティビティ バーの Azure アイコンを選択します。Restart Visual Studio Code and select the Azure icon on the Activity bar. サイド バーに Azure Functions 領域が表示されます。You should see an Azure Functions area in the Side Bar.

    サイド バーの Azure Functions 領域

Azure Functions プロジェクトを作成するCreate an Azure Functions project

Visual Studio Code の Azure Functions プロジェクト テンプレートでは、Azure の関数アプリに発行できるプロジェクトを作成します。The Azure Functions project template in Visual Studio Code creates a project that can be published to a function app in Azure. 関数アプリを使用すると、リソースを管理、デプロイ、および共有するための論理ユニットとして関数をグループ化できます。A function app lets you group functions as a logical unit for management, deployment, and sharing of resources.

  1. Visual Studio Code で、Azure ロゴを選択して [Azure:Functions] 領域を表示し、[新しいプロジェクトの作成] アイコンを選択します。In Visual Studio Code, select the Azure logo to display the Azure: Functions area, and then select the Create New Project icon.

    関数アプリ プロジェクトを作成する

  2. プロジェクト ワークスペースの場所を選択し、[選択] をクリックします。Choose a location for your project workspace and choose Select.

    注意

    この記事は、ワークスペースの外部で実行するように設計されています。This article was designed to be completed outside of a workspace. ここでは、ワークスペースに含まれるプロジェクト フォルダーは選択しないでください。In this case, do not select a project folder that is part of a workspace.

  3. 関数アプリ プロジェクトの言語を選択します。Select the language for your function app project. この記事では、JavaScript を使用しています。In this article, JavaScript is used. プロジェクトの言語を選択するChoose project language

  4. メッセージが表示されたら、[Add to workspace](ワークスペースに追加) を選択します。When prompted, choose Add to workspace.

Visual Studio Code によって、新しいワークスペースに関数アプリ プロジェクトが作成されます。Visual Studio Code creates the function app project in a new workspace. このプロジェクトには、host.json および local.settings.json 構成ファイルと、言語固有のプロジェクト ファイルが含まれています。This project contains the host.json and local.settings.json configuration files, plus any language-specific project files. プロジェクト フォルダーに新しい Git リポジトリも取得します。You also get a new Git repository in the project folder.

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

  1. 関数アプリのルート ディレクトリで npm install durable-functions を実行して、durable-functions npm パッケージをインストールします。Install the durable-functions npm package by running npm install durable-functions in the root directory of the function app.

starter 関数を作成するCreate a Starter Function

まず、Durable Functions のオーケストレーションを開始する HTTP トリガー関数を作成します。First, create an HTTP triggered function that starts a durable function orchestration.

  1. [Azure:Functions] で [関数の作成] アイコンを選択します。From Azure: Functions, choose the Create Function icon.

    関数を作成する

  2. 関数アプリ プロジェクトが含まれたフォルダーを選択し、 [HTTP トリガー] 関数テンプレートを選択します。Select the folder with your function app project and select the HTTP trigger function template.

    HTTP トリガー テンプレートを選択する

  3. 関数名として「HttpStart」と入力して Enter キーを押し、 [匿名] 認証を選択します。Type HttpStart for the function name and press Enter, then select Anonymous authentication.

    匿名認証を選択する

    HTTP によってトリガーされる関数のテンプレートを使用して、選択した言語で関数が作成されます。A function is created in your chosen language using the template for an HTTP-triggered function.

  4. index.js を以下の JavaScript に置き換えます。Replace index.js with the below JavaScript:

    const df = require("durable-functions");
    
    module.exports = async function (context, req) {
        const client = df.getClient(context);
        const instanceId = await client.startNew(req.params.functionName, undefined, req.body);
    
        context.log(`Started orchestration with ID = '${instanceId}'.`);
    
        return client.createCheckStatusResponse(context.bindingData.req, instanceId);
    };
    
  5. function.json を以下の JSON に置き換えます。Replace function.json with the below JSON:

    {
      "bindings": [
        {
          "authLevel": "anonymous",
          "name": "req",
          "type": "httpTrigger",
          "direction": "in",
          "route": "orchestrators/{functionName}",
          "methods": ["get", "post"]
        },
        {
          "name": "$return",
          "type": "http",
          "direction": "out"
        },
        {
          "name": "starter",
          "type": "orchestrationClient",
          "direction": "in"
        }
      ]
    }
    

これで Durable Functions へのエントリ ポイントが作成されます。We've now created an entry-point into our Durable Function. オーケストレーターを追加してみましょう。Let's add an orchestrator.

オーケストレーター関数を作成するCreate an Orchestrator Function

次に、オーケストレーターにする別の関数を作成します。Next, you create another function to be the orchestrator. 便宜的に、HTTP トリガー関数テンプレートを使用します。We use the HTTP trigger function template for convenience. 関数コード自体は、オーケストレーター コードに置き換えられます。The function code itself is replaced by the orchestrator code.

  1. 前のセクションの手順を繰り返し、HTTP トリガー テンプレートを使用して 2 つ目の関数を作成します。Repeat the steps from the previous section to create a second function using the HTTP trigger template. 今回は関数に OrchestratorFunction と名前を付けます。This time name the function OrchestratorFunction.

  2. 新しい関数の index.js ファイルを開き、内容を次のコードに置き換えます。Open the index.js file for the new function and replace the contents with the following code:

    const df = require("durable-functions");
    
    module.exports = df.orchestrator(function*(context){
        context.log("Starting chain sample");
        const output = [];
        output.push(yield context.df.callActivity("E1_SayHello", "Tokyo"));
        output.push(yield context.df.callActivity("E1_SayHello", "Seattle"));
        output.push(yield context.df.callActivity("E1_SayHello", "London"));
    
        return output;
    });
    
  3. function.json ファイルを開き、次の JSON ファイルに置き換えます。Open the function.json file and replace it with the following JSON:

    {
      "bindings": [
        {
          "name": "context",
          "type": "orchestrationTrigger",
          "direction": "in"
        }
      ]
    }
    

ここでは、アクティビティ関数を調整するオーケストレーターを追加しました。We've added an orchestrator to coordinate activity functions. 次は参照アクティビティ関数を追加してみましょう。Let's now add the referenced activity function.

アクティビティ関数を作成するCreate an Activity Function

  1. 前のセクションの手順を繰り返し、HTTP トリガー テンプレートを使用して 3 つ目の関数を作成します。Repeat the steps from the previous sections to create a third function using the HTTP trigger template. ただし、今回は関数に E1_SayHello と名前を付けます。But this time name the function E1_SayHello.

  2. 新しい関数の index.js ファイルを開き、内容を次のコードに置き換えます。Open the index.js file for the new function and replace the contents with the following code:

    module.exports = async function(context) {
        return `Hello ${context.bindings.name}!`;
    };
    
  3. function.json を以下の JSON に置き換えます。Replace function.json with the below JSON:

    {
      "bindings": [
        {
          "name": "name",
          "type": "activityTrigger",
          "direction": "in"
        }
      ]
    }
    

これで、オーケストレーションを開始し、アクティビティ関数を連結するために必要なすべてのコンポーネントが追加されます。We've now added all components needed to start off an orchestration and chain together activity functions.

関数をローカルでテストするTest the function locally

Azure Functions Core Tools を使用すると、ローカルの開発用コンピューター上で Azure Functions プロジェクトを実行できます。Azure Functions Core Tools lets you run an Azure Functions project on your local development computer. Visual Studio Code から初めて関数を起動すると、これらのツールをインストールするよう求めるメッセージが表示されます。You're prompted to install these tools the first time you start a function from Visual Studio Code.

  1. Windows コンピューターでは、Azure Storage Emulator を起動し、local.settings.json の AzureWebJobsStorage プロパティが UseDevelopmentStorage=true に設定されていることを確認します。On a Windows computer, start the Azure Storage Emulator and make sure that the AzureWebJobsStorage property of local.settings.json is set to UseDevelopmentStorage=true.

    Storage Emulator 5.8 では、local.settings.json の AzureWebJobsSecretStorageType プロパティが files に設定されていることを確認します。For Storage Emulator 5.8 make sure that the AzureWebJobsSecretStorageType property of local.settings.json is set to files. Mac または Linux コンピューターでは、既存の Azure ストレージ アカウントの接続文字列に AzureWebJobsStorage プロパティを設定する必要があります。On a Mac or Linux computer, you must set the AzureWebJobsStorage property to the connection string of an existing Azure storage account. ストレージ アカウントの作成については、この記事で後述します。You create a storage account later in this article.

  2. 関数をテストするには、関数コードにブレークポイントを設定し、F5 キーを押して関数アプリ プロジェクトを開始します。To test your function, set a breakpoint in the function code and press F5 to start the function app project. Core Tools からの出力がターミナル パネルに表示されます。Output from Core Tools is displayed in the Terminal panel. Durable Functions を初めて使用する場合は、Durable Functions 拡張機能がインストールされるので、ビルドに数秒かかる場合があります。If this is your first time using Durable Functions, the Durable Functions extension is installed and the build might take a few seconds.

    注意

    JavaScript Durable Functions では、バージョン 1.7.0 以降の Microsoft.Azure.WebJobs.Extensions.DurableTask 拡張機能が必要です。JavaScript Durable Functions require version 1.7.0 or greater of the Microsoft.Azure.WebJobs.Extensions.DurableTask extension. Azure Functions アプリのルート フォルダーから次のコマンドを実行して、Durable Functions 拡張機能 func extensions install -p Microsoft.Azure.WebJobs.Extensions.DurableTask -v 1.7.0 をインストールしますRun the following command from the root folder of your Azure Functions app to install the Durable Functions extension func extensions install -p Microsoft.Azure.WebJobs.Extensions.DurableTask -v 1.7.0

  3. ターミナル パネルで、HTTP によってトリガーされる関数の URL エンドポイントをコピーします。In the Terminal panel, copy the URL endpoint of your HTTP-triggered function.

    Azure のローカル出力

  4. {functionName}OrchestratorFunction で置き換えReplace {functionName} with OrchestratorFunction.

  5. Postman または cURL のようなツールを使用して、HTTP POST 要求を URL エンドポイントに送信します。Using a tool like Postman or cURL, send a HTTP POST request to the URL endpoint.

    応答は、永続的なオーケストレーションが正常に開始されたことを示す HTTP 関数の最初の結果です。The response is the initial result from the HTTP function letting us know the durable orchestration has started successfully. これはまだオーケストレーションの最終的な結果ではありません。It is not yet the end result of the orchestration. 応答には、いくつかの便利な URL が含まれています。The response includes a few useful URLs. ここでは、オーケストレーションの状態を照会してみましょう。For now, let's query the status of the orchestration.

  6. statusQueryGetUri の URL 値をコピーし、ブラウザーのアドレス バーに貼り付け、要求を実行します。Copy the URL value for statusQueryGetUri and paste it in the browser's address bar and execute the request. また、引き続き Postman を使用して GET 要求を発行することもできます。Alternatively you can also continue to use Postman to issue the GET request.

    この要求によって、オーケストレーション インスタンスの状態が照会されます。The request will query the orchestration instance for the status. インスタンスが完了したことを示し、持続的な関数の出力または結果を含む、最終的な応答を受け取ります。You should get an eventual response which shows us the instance has completed, and includes the outputs or results of the durable function. 次のように表示されます。It looks like:

    {
        "instanceId": "d495cb0ac10d4e13b22729c37e335190",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": null,
        "output": [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ],
        "createdTime": "2018-11-08T07:07:40Z",
        "lastUpdatedTime": "2018-11-08T07:07:52Z"
    }
    
  7. デバッグを停止するには、VS Code で Shift キーを押しながら F5 キーを押します。To stop debugging, press Shift + F5 in VS Code.

関数がローカル コンピューター上で正常に動作することを確認したら、プロジェクトを Azure に発行します。After you've verified that the function runs correctly on your local computer, it's time to publish the project to Azure.

Azure へのサインインSign in to Azure

アプリを発行するには、Azure にサインインしておく必要があります。Before you can publish your app, you must sign in to Azure.

  1. [Azure: Functions] 領域で、 [Azure にサインイン...] を選択します。アカウントがない場合は、無料の Azure アカウントを作成することができます。In the Azure: Functions area, choose Sign in to Azure.... If you don't already have one, you can Create a free Azure account.

    ブラウザーでの関数 localhost の応答

  2. メッセージが表示されたら、 [Copy & Open](コピー & 開く) を選択するか、表示されたコードをコピーし、ブラウザーで https://aka.ms/devicelogin を開きます。When prompted, select Copy & Open, or copy the displayed code and open https://aka.ms/devicelogin in your browser.

  3. [デバイスのログイン] ページにコピーしたコードを貼り付け、Visual Studio Code のサインインを確認して、 [続行] を選択します。Paste the copied code in the Device Login page, verify the sign in for Visual Studio Code, then select Continue.

  4. Azure アカウントの資格情報を使用してサインインを完了します。Complete the sign in using your Azure account credentials. 正常にサインインしたら、ブラウザーを閉じてかまいません。After you have successfully signed in, you can close the browser.

Azure にプロジェクトを発行するPublish the project to Azure

Visual Studio Code を使用すると、関数プロジェクトを Azure に直接発行できます。Visual Studio Code lets you publish your functions project directly to Azure. このプロセスでは、Azure サブスクリプションに関数アプリと関連リソースを作成します。In the process, you create a function app and related resources in your Azure subscription. 関数アプリは、関数の実行コンテキストを提供します。The function app provides an execution context for your functions. プロジェクトがパッケージ化され、Azure サブスクリプション内の新しい関数アプリにデプロイされます。The project is packaged and deployed to the new function app in your Azure subscription.

この記事では、新しい関数アプリを作成することを想定しています。This article assumes that you are creating a new function app.

重要

既存の関数アプリに発行すると、Azure のそのアプリのコンテンツが上書きされます。Publishing to an existing function app overwrites the content of that app in Azure.

  1. [Azure: Functions] 領域で、[Deploy to Function App](Function App にデプロイ) アイコンを選択します。In the Azure: Functions area, select the Deploy to Function App icon.

    Function App の設定

  2. サインインしていない場合、Azure にサインインするよう求められます。If not signed-in, you are prompted to Sign in to Azure. 無料の Azure アカウントを作成することもできます。You can also Create a free Azure account. ブラウザーから正常にサインインしたら、Visual Studio Code に戻ります。After successful sign in from the browser, go back to Visual Studio Code.

  3. 複数のサブスクリプションがある場合、関数アプリ用の [サブスクリプションを選択] してから、 [+ Create New Function App in Azure](+ Azure で新しい Function App を作成) を選択します。If you have multiple subscriptions, Select a subscription for the function app, then choose + Create New Function App in Azure.

  4. 関数アプリを識別するグローバルに一意の名前を入力し、Enter キーを押します。Type a globally unique name that identifies your function app and press Enter. 関数アプリ名の有効な文字は、a-z0-9- です。Valid characters for a function app name are a-z, 0-9, and -.

  5. [+ 新しいリソース グループの作成] を選択し、myResourceGroup のようなリソース グループ名を入力して、Enter キーを押します。Choose + Create New Resource Group, type a resource group name, like myResourceGroup, and press enter. 既存のリソース グループを使用することもできます。You can also use an existing resource group.

  6. [+ 新しいストレージ アカウントの作成] を選択し、関数アプリで使用する新しいストレージ アカウントのグローバルに一意の名前を入力して、Enter キーを押します。Choose + Create New Storage Account, type a globally unique name of the new storage account used by your function app and press Enter. ストレージ アカウント名の長さは 3 ~ 24 文字で、数字と小文字のみを使用できます。Storage account names must be between 3 and 24 characters in length and may contain numbers and lowercase letters only. 既存のアカウントを使用することもできます。You can also use an existing account.

  7. 最寄りのリージョンまたは関数がアクセスする他のサービスの近くのリージョン内の場所を選択します。Choose a location in a region near you or near other services your functions access.

    Enter キーを押すと、次の Azure リソースがサブスクリプションに作成されます。When you press Enter, the following Azure resources are created in your subscription:

    • リソース グループ :作成された Azure リソースがすべて含まれます。Resource group: Contains all of the created Azure resources. 名前は関数アプリの名前に基づきます。The name is based on your function app name.
    • ストレージ アカウント :関数アプリの名前に基づいた一意の名前で、Standard Storage アカウントが作成されます。Storage account: A standard Storage account is created with a unique name that is based on your function app name.
    • ホスティング プラン :サーバーレス関数アプリをホストするために、従量課金プランが米国西部リージョンに作成されます。Hosting plan: A consumption plan is created in the West US region to host your serverless function app.
    • 関数アプリ:プロジェクトはこの新しい関数アプリにデプロイされ、そこで実行されます。Function app: Your project is deployed to and runs in this new function app.

    関数アプリが作成され、展開パッケージが適用されると、通知が表示されます。A notification is displayed after your function app is created and the deployment package is applied. この通知の [View Output](出力の表示) を選択すると、作成済みの Azure リソースなど、作成とデプロイの結果が表示されます。Select View Output in this notification to view the creation and deployment results, including the Azure resources that you created.

  8. [Azure: Functions] 領域に戻り、サブスクリプションの下にある新しい関数アプリを展開します。Back in the Azure: Functions area, expand the new function app under your subscription. [Functions] を展開し、 [HttpTrigger] を右クリックして [Copy function URL](関数 URL のコピー) を選択します。Expand Functions, right-click HttpTrigger, and then choose Copy function URL.

    新しい HTTP トリガーの関数 URL をコピーします

Azure で関数をテストするTest your function in Azure

  1. 出力パネルから HTTP トリガーの URL をコピーします。Copy the URL of the HTTP trigger from the Output panel. HTTP によってトリガーされる関数を呼び出す URL は、次の形式である必要があります。The URL that calls your HTTP-triggered function should be in the following format:

     http://<functionappname>.azurewebsites.net/orchestrators/<functionname>
    
  2. HTTP 要求のこの新しい URL をブラウザーのアドレス バーに貼り付けます。Paste this new URL for the HTTP request into your browser's address bar. 以前の発行済みアプリの使用時と同じ状態応答を受け取るはずです。You should get the same status response as before when using the published app.

次の手順Next steps

Visual Studio Code を使用して、JavaScript の Durable Functions アプリを作成して発行しました。You have used Visual Studio Code to create and publish a JavaScript durable function app.