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.

注意

これは Durable Functions 1.x に関するチュートリアルです。This is a tutorial for Durable Functions 1.x. Durable Functions 2.x を使用する場合は、Durable Functions のバージョンに関するドキュメントを参照してください。To use Durable Functions 2.x, see the Durable Functions versions documentation.

この記事では、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. インストール後、アクティビティ バーの Azure アイコンを選択します。After installation, select the Azure icon on the Activity bar. サイド バーに Azure Functions 領域が表示されます。You should see an Azure Functions area in the Side Bar.

    サイド バーの Azure Functions 領域

ローカル プロジェクトを作成するCreate your local project

このセクションでは、Visual Studio Code を使用して、ローカル Azure Functions プロジェクトを作成します。In this section, you use Visual Studio Code to create a local Azure Functions project.

  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 for your desired language:

    PromptPrompt ValueValue 説明Description
    Select a language for your function app project (関数アプリ プロジェクトの言語を選択してください)Select a language for your function app project JavaScriptJavaScript ローカル Node.js 関数プロジェクトを作成します。Create a local Node.js Functions project.
    Select a version (バージョンを選択してください)Select a version Azure Functions v2Azure Functions v2 このオプションが表示されるのは、Core Tools がまだインストールされていない場合だけです。You only see this option when the Core Tools aren't already installed. その場合、アプリの初回実行時に Core Tools がインストールされます。In this case, Core Tools are installed the first time you run the app.
    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.
    承認レベルAuthorization level FunctionFunction function 承認レベルでは、関数の HTTP エンドポイントを呼び出す際にアクセス キーの指定が必須となります。The function authorization level requires you to supply an access key when calling your function's HTTP endpoint. これには、セキュリティで保護されていないエンドポイントへのアクセスを難しくする効果があります。This makes it more difficult to access an unsecured endpoint. 詳細については、「承認キー」を参照してください。To learn more, see Authorization keys.
    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.

Azure Functions Core Tools は、必要に応じて Visual Studio Code によりインストールされます。Visual Studio Code installs the Azure Functions Core Tools, if needed. また、関数アプリ プロジェクトが新しいワークスペースに作成されます。It also creates a function app project in a new workspace. このプロジェクトには、host.json および local.settings.json 構成ファイルが含まれています。This project contains the host.json and local.settings.json configuration files. さらに、function.json 定義ファイルindex.js ファイル (関数コードを含む Node.js ファイル) の格納先となる HttpExample フォルダーも作成されます。It also creates an HttpExample folder that contains the function.json definition file and the index.js file, a Node.js file that contains the function code.

また、ルート フォルダーには、package.json ファイルが作成されます。A package.json file is also created in the root 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.

関数を作成する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 アイコンを選択し、 [Azure: Functions] 領域で、 [Azure にサインイン...] を選択します。アカウントがない場合は、無料の Azure アカウントを作成することができます。If you aren't already signed in, choose the Azure icon in the Activity bar, then 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 の応答

    既にサインインしている場合は、次のセクションに進んでください。If you're already signed in, go to the next section.

  2. ブラウザーでプロンプトが表示されたら、ご利用の Azure アカウントを選択し、その Azure アカウントの資格情報を使用してサインインします。When prompted in the browser, choose your Azure account and sign in using your Azure account credentials.

  3. 正常にサインインしたら、新しいブラウザー ウィンドウを閉じてかまいません。After you've successfully signed in, you can close the new browser window. ご利用の Azure アカウントに属しているサブスクリプションがサイド バーに表示されます。The subscriptions that belong to your Azure account are displayed in the Side bar.

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

このセクションでは、ご利用の Azure サブスクリプションに関数アプリと関連リソースを作成し、コードをデプロイします。In this section, you create a function app and related resources in your Azure subscription and then deploy your code.

  1. アクティビティ バーの Azure アイコンを選択し、 [Azure: Functions] 領域で、 [Deploy to function app](関数アプリにデプロイ) ボタンを選択します。Choose the Azure icon in the Activity bar, then in the Azure: Functions area, choose the Deploy to function app... button.

    プロジェクトを Azure に発行する

  2. プロンプトで、次の情報を入力します。Provide the following information at the prompts:

    • Select subscription (サブスクリプションを選択してください) : 使用するサブスクリプションを選択します。Select subscription: Choose the subscription to use. サブスクリプションが 1 つのみの場合、このプロンプトは表示されません。You won't see this if you only have one subscription.

    • Select function app in Azure (Azure で関数アプリを選択してください) : (Advanced ではなく) + Create new Function App を選択します。Select Function App in Azure: Choose + Create new Function App (not Advanced). この記事では、高度な発行フローは取り上げません。This article doesn't support the advanced publishing flow.

    重要

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

    • Enter a globally unique name for the function app (関数アプリのグローバルに一意の名前を入力します) : URL パスに有効な名前を入力します。Enter a globally unique name for the function app: Type a name that is valid in a URL path. 入力した名前は、Azure Functions 内での一意性を確保するために検証されます。The name you type is validated to make sure that it's unique in Azure Functions.
    • Select a runtime (ランタイムを選択してください) : ローカルで実行している Python のバージョンを選択します。Select a runtime: Choose the version of Python you've been running on locally. python --version コマンドを使用してバージョンを確認してください。You can use the python --version command to check your version.
    • Select a runtime (ランタイムを選択してください) : ローカルで実行している Node.js のバージョンを選択します。Select a runtime: Choose the version of Node.js you've been running on locally. node --version コマンドを使用してバージョンを確認してください。You can use the node --version command to check your version.
    • Select a location for new resources (新しいリソースの場所を選択してください) : パフォーマンスを向上させるために、お近くのリージョンを選択してください。Select a location for new resources: For better performance, choose a region near you.
  3. 完了すると、次の Azure リソースがサブスクリプションに作成されます。When completed, 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.
    • Application Insights:関数アプリに関連付けられたインスタンスが関数名に基づいて作成されます。Application Insights: An instance, which is connected to your function app, is created based on your function name.

    関数アプリが作成され、展開パッケージが適用されると、通知が表示されます。A notification is displayed after your function app is created and the deployment package is applied.

  4. この通知の [View Output](出力の表示) を選択すると、作成済みの Azure リソースなど、作成とデプロイの結果が表示されます。Select View Output in this notification to view the creation and deployment results, including the Azure resources that you created. 通知を見逃した場合は、右下隅にあるベル アイコンを選択して、再度確認します。If you miss the notification, select the bell icon in the lower right corner to see it again.

    作成完了通知

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.