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 Core Tools があることを確認します。Make sure you have the latest version of the Azure Functions Core 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 Functions extension

Azure Functions 拡張機能を使用すると、関数を作成してテストし、Azure にデプロイすることができます。You can use the Azure Functions extension to create and test functions and deploy them to Azure.

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

  2. [インストール] を選択して、Visual Studio Code に拡張機能をインストールします。Select Install to install the extension for 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 領域

関数を使用して Functions プロジェクトを作成するCreate your Functions project with a function

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 で、F1 キーを押してコマンド パレットを開きます。In Visual Studio Code, press F1 to open the command palette. コマンド パレットで、Azure Functions: Create new project... を検索して選択します。In the command palette, search for and select Azure Functions: Create new project....

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

    注意

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

  3. プロンプトに従って、次の情報を入力します。Following the prompts, provide the following information:

    PromptPrompt Value 説明Description
    Select a language for your function app project (関数アプリ プロジェクトの言語を選択してください)Select a language for your function app project C# または JavaScriptC# or JavaScript この記事は C# と JavaScript をサポートしています。This article supports C# and JavaScript. Python についてはこの Python の記事を、PowerShell についてはこの PowerShell の記事を参照してください。For Python, see this Python article, and for PowerShell, see this PowerShell article.
    Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください)Select a template for your project's first function HTTP トリガーHTTP trigger 新しい関数アプリで HTTP トリガー関数を作成します。Create an HTTP triggered function in the new function app.
    Provide a function name (関数名を指定してください)Provide a function name HttpTriggerHttpTrigger Enter キーを押して既定の名前を使用します。Press Enter to use the default name.
    Provide a namespace (名前空間を指定してください)Provide a namespace My.FunctionsMy.Functions (C# のみ) C# クラス ライブラリには名前空間が必要です。(C# only) C# class libraries must have a namespace.
    承認レベルAuthorization level FunctionFunction 関数の HTTP エンドポイントを呼び出すには関数キーが必要です。Requires a function key to call the function's HTTP endpoint.
    Select how you would like to open your project (プロジェクトを開く方法を選択してください)Select how you would like to open your project Add to workspace (ワークスペースに追加)Add to workspace 現在のワークスペースに関数アプリを作成します。Creates the function app in the current 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.

関数アプリ プロジェクトの HttpTrigger フォルダーにも、新しい HTTP トリガー関数が作成されます。A new HTTP triggered function is also created in the HttpTrigger folder of the function app project.

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.

関数を作成するCreating your functions

ここでは、Durable Functions を使い始めるために必要な 3 つの関数、つまり HTTP スターター、オーケストレーター、およびアクティビティ関数を作成します。We'll now create the three functions you need to get started with Durable Functions: an HTTP starter, an orchestrator, and an activity function. HTTP スターターによって対象のソリューション全体が開始され、オーケストレーターによってさまざまなアクティビティ関数に作業がディスパッチされます。The HTTP starter will initiate your entire solution, and the orchestrator will dispatch work to various activity functions.

HTTP スターターHTTP starter

まず、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. 自分の関数アプリ プロジェクトが含まれたフォルダーを選択し、 [Durable Functions HTTP スターター] 関数テンプレートを選択します。Select the folder with your function app project and select the Durable Functions HTTP Starter function template.

    HTTP スターター テンプレートを選択する

  3. 名前を既定値の DurableFunctionsHttpStart のままにして ** Enter キーを押し、 [匿名] 認証を選択します。Leave the default name as DurableFunctionsHttpStart and press ****Enter**, then select Anonymous authentication.

    匿名認証を選択する

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

オーケストレーターOrchestrator

ここでは、アクティビティ関数を調整するオーケストレーターを作成します。Now, we'll create an orchestrator to coordinate activity functions.

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

    関数を作成する

  2. 自分の関数アプリ プロジェクトが含まれたフォルダーを選択し、 [Durable Functions オーケストレーター] 関数テンプレートを選択します。Select the folder with your function app project and select the Durable Functions orchestrator function template. 名前は既定値の "DurableFunctionsOrchestrator" のままにしますLeave the name as the default "DurableFunctionsOrchestrator"

    オーケストレーター テンプレートを選択する

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

アクティビティActivity

ここで、実際にソリューションの作業を実行するアクティビティ関数を作成します。Now, we'll create an activity function to actually carry out the work of the solution.

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

    関数を作成する

  2. 自分の関数アプリ プロジェクトが含まれたフォルダーを選択し、 [Durable Functions のアクティビティ] 関数テンプレートを選択します。Select the folder with your function app project and select the Durable Functions activity function template. 名前は既定値の "Hello" のままにします。Leave the name as the default "Hello".

    アクティビティ テンプレートを選択する

これで、オーケストレーションを開始し、アクティビティ関数を連結するために必要なすべてのコンポーネントが追加されます。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.jsonAzureWebJobsStorage プロパティが 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}DurableFunctionsOrchestrator で置き換えReplace {functionName} with DurableFunctionsOrchestrator.

  5. Postman または cURL のようなツールを使用して、HTTP POST 要求を URL エンドポイントに送信します。Using a tool like Postman or cURL, send an 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.

既定で、Visual Studio Code では関数アプリの作成に必要なすべての Azure リソースが作成されます。By default, Visual Studio Code creates all of the Azure resources required to create your function app. これらのリソースの名前は、選択した関数アプリの名前に基づきます。The names of these resources are based on the function app name you choose. 作成したリソースを完全に管理する必要がある場合は、代わりに高度なオプションを使用して発行することができます。If you need to have full control of the created resources, you can instead publish using advanced options.

このセクションでは、Azure で新しい関数アプリを作成することを想定しています。This section assumes that you are creating a new function app in Azure.

重要

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

  1. Visual Studio Code で F1 を押して、コマンド パレットを開きます。In Visual Studio Code, press F1 to open the command palette. コマンド パレットで、Azure Functions: Deploy to function app... を検索して選択します。In the command palette, search for and select Azure Functions: Deploy to 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 -.

    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.

  5. [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.