クイック スタート: C# Durable Functions アプリを作成する

Azure Functions の機能である Durable Functions を使用して、サーバーレス環境でステートフル関数を記述します。 Durable Functions によってアプリケーションの状態、チェックポイント、再起動が管理されます。

Azure Functions と同様、Durable Functions は、.NET クラス ライブラリ関数の 2 つのプロセス モデルをサポートしています。 2 つのプロセスの詳細については、インプロセスと分離ワーカー プロセス .NET Azure Functions との違いに関するページを参照してください。

このクイック スタートでは、Visual Studio Code を使用して、"hello world" Durable Functions アプリをローカルで作成してテストする方法を学習します。 この関数アプリは、他の関数の呼び出しを調整し、連結します。 その後、関数コードを Azure に発行します。 使用するツールは、Visual Studio Code の Azure Functions 拡張機能を介して利用可能です。

Visual Studio Code で Durable Functions アプリ コードを示すスクリーンショット。

前提条件

このクイック スタートを完了するには、次のものが必要です。

  • Visual Studio Code がインストールされていること。

  • 次の Visual Studio Code 拡張機能がインストールされていること。

  • 最新バージョンの Azure Functions Core Tools がインストールされていること。

  • Azure サブスクリプション。 Durable Functions を使用するには、Azure Storage アカウントが必要です。

  • .NET Core SDK バージョン 3.1 がインストールされていること。

  • データをセキュリティで保護する HTTP テスト ツール。 詳細については、「HTTP テスト ツール」を参照してください。

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

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

Visual Studio Code で Azure Functions プロジェクトを作成します。

  1. [表示] メニューで [コマンドパレット] を選択します (または Ctrl + Shift + P を選択します)。

  2. プロンプトで (>)、入力して [Azure Functions: 新しいプロジェクトを作成する] を選択します。

    Functions プロジェクトを作成するコマンドを示すスクリーンショット。

  3. [参照] を選択します。 [フォルダーの選択] ダイアログで、プロジェクトに使用するフォルダーに移動し、[選択] を選択します。

  4. プロンプトで、次の値を選択または入力します。

    プロンプト アクション 説明
    関数アプリ プロジェクトの言語を選択してください [C#] を選択します。 ローカル C# Functions プロジェクトを作成します。
    バージョンを選択してください [Azure Functions v4] を選択します。 このオプションは、Core Tools がまだインストールされていない場合にのみ表示されます。 アプリの初回実行時に Core Tools がインストールされます。
    Select a .NET runtime (.NET ランタイムを選択してください) [.NET 8.0 (分離)] を選択します。 分離されたワーカー プロセスで実行される .NET 8 と Azure Functions Runtime 4.0 をサポートする Functions プロジェクトを作成します。 詳細については、「Azure Functions ランタイム バージョンをターゲットにする方法」をご覧ください。
    Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) [Durable Functions オーケストレーション トレース] を選択します。 Durable Functions オーケストレーションを作成します。
    永続ストレージの種類を選択してください [Azure Storage] を選択します。 Durable Functions 用の既定の記憶域プロバイダー。 詳細については、「Durable Functions ストレージ プロバイダー」を参照してください。
    Provide a function name (関数名を指定してください) HelloOrchestration」と入力します。 オーケストレーション関数の名前。
    Provide a namespace (名前空間を指定してください) Company.Function」と入力します。 生成されるクラスの名前空間。
    Select how you would like to open your project (プロジェクトを開く方法を選択してください) [Open in current window] (現在のウィンドウで開く) を選択します。 選択したフォルダーで Visual Studio Code を開きます。

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

HelloOrchestration.cs という別のファイルには、Durable Functions アプリの基本的な構成要素が含まれています。

Method 説明
HelloOrchestration Durable Functions アプリのオーケストレーションを定義します。 このケースでは、オーケストレーションが起動し、一覧が作成され、3 つの関数呼び出しの結果が一覧に追加されます。 3 つの関数呼び出しが完了すると、一覧が返されます。
SayHello hello を返す単純な関数アプリ。 この関数には、調整されたビジネス ロジックが含まれています。
HelloOrchestration_HttpStart オーケストレーションのインスタンスを開始し、チェック状態の応答を返す、HTTP によってトリガーされる関数

Durable Functions について詳しくは、Durable Functions の種類と機能に関するページを参照してください。

記憶域を構成する

Azure Storage のエミュレーターである Azurite を使用して、関数をローカルでテストできます。 local.settings.json で、次の例のように AzureWebJobsStorage の値を UseDevelopmentStorage=true に設定します。

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
  }
}

Visual Studio Code で Azurite 拡張機能をインストールし、実行を開始するには、コマンド パレットに「Azurite: Start」と入力し、Enter キーを押します。

Durable Functions アプリの他のストレージ オプションも使用できます。 ストレージ オプションとメリットの詳細については、「Durable Functions ストレージ プロバイダー」を参照してください。

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

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

  1. Visual Studio Code で、SayHello アクティビティの関数コードにブレークポイントを設定し、F5 キーを押して関数アプリ プロジェクトを開始します。 ターミナル パネルに、Core Tools からの出力が表示されます。

    Note

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

    "ジョブ関数が見つかりません" というメッセージが表示された場合は、Azure Functions Core Tools のインストールを最新バージョンに更新してください

  2. ターミナル パネルで、HTTP によってトリガーされる関数の URL エンドポイントをコピーします。

    Azure ローカル出力ウィンドウのスクリーンショット。

  3. HTTP テスト ツールを使用して URL エンドポイントに HTTP POST 要求を送信します。

    応答は、HTTP 関数の最初の結果です。 これは、Durable Functions アプリが正常に開始されたことを知らせるものです。 オーケストレーションの最終的な結果はまだ表示されません。 応答には、いくつかの便利な URL が含まれています。

    オーケストレーションが開始されたため、この時点でアクティビティ関数のブレークポイントにヒットするはずです。 それをステップ実行して、オーケストレーションの状態に対する応答を取得します。

  4. statusQueryGetUri の URL 値をコピーし、それをブラウザーのアドレス バーに貼り付け、要求を実行します。 または、HTTP テスト ツールを引き続き使用して GET 要求を発行することもできます。

    この要求によって、オーケストレーション インスタンスの状態が照会されます。 次の例のように、インスタンスが完了し、Durable Functions アプリの出力または結果が内部に含まれていることを確認できます。

    {
        "name":"HelloCities",
        "instanceId":"7f99f9474a6641438e5c7169b7ecb3f2",
        "runtimeStatus":"Completed",
        "input":null,
        "customStatus":null,
        "output":"Hello, Tokyo! Hello, London! Hello, Seattle!",
        "createdTime":"2023-01-31T18:48:49Z",
        "lastUpdatedTime":"2023-01-31T18:48:56Z"
    }
    

    ヒント

    ブレークポイントを使用して Durable Functions アプリの再生動作を観察する方法を学べます。

  5. デバッグを停止するには、Visual Studio Code で Shift + F5 キーを選択します。

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

Azure へのサインイン

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

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

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

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

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

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

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

このセクションでは、Azure サブスクリプションに関数アプリと関連リソースを作成します。 リソース作成に関する決定の多くは、既定の動作に基づいて自動的に行われます。 作成されたリソースをより細かく制御するには、代わりに高度なオプションを使って関数アプリを作成する必要があります。

  1. Visual Studio Code で、F1 キーを選択してコマンド パレットを開きます。 プロンプト (>) で、入力して [Azure Functions: Azure で関数アプリを作成する] を選択します。

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

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

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

    Azure リソース作成のログを示すスクリーンショット。

  3. 関数アプリが作成されると、次の関連リソースがご利用の Azure サブスクリプションに作成されます。 リソースの名前は、関数アプリに入力した名前に基づいて決まります。

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

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

    ヒント

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

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

重要

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

  1. コマンド パレットで、入力して [Azure Functions: 関数アプリにデプロイする] を選択します。

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

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

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

Azure で関数をテストする

  1. Visual Studio Code の出力パネルで、HTTP トリガーの URL をコピーします。 HTTP によってトリガーされる関数を呼び出す URL は、次の形式である必要があります。

    https://<function-app-name>.azurewebsites.net/api/HelloOrchestration_HttpStart

  2. HTTP 要求のこの新しい URL をブラウザーのアドレス バーに貼り付けます。 発行されたアプリを使用した場合、ローカルでテストした場合と同じ状態の応答を受け取る必要があります。

Visual Studio Code を使用して作成、発行した C# Durable Functions アプリを使用する準備ができました。

リソースをクリーンアップする

クイックスタートを完了するために作成したリソースが不要になった場合は、Azure サブスクリプションで関連コストが発生するのを避けるため、リソース グループは削除し、関連するすべてのリソースも削除してください。

このクイック スタートでは、Visual Studio 2022 を使用して、"hello world" Durable Functions アプリをローカルで作成してテストする方法を学習します。 この関数は、他の関数の呼び出しを調整し、連結します。 その後、関数コードを Azure に発行します。 使用しているツールは、Visual Studio 2022 の Azure の開発ワークロードから入手できます。

Visual Studio 2019 における Durable Functions アプリ コードのスクリーンショット。

前提条件

このクイック スタートを完了するには、次のものが必要です。

  • Visual Studio 2022 がインストールされている

    Azure 開発ワークロードもインストールされていることを確認します。 Visual Studio 2019 でも Durable Functions 開発はサポートされていますが、UI と手順は異なります。

  • Azurite エミュレーターがインストールされ、実行されていること。

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

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

Azure Functions テンプレートは、Azure の関数アプリに発行できるプロジェクトを作成します。 関数アプリを使用すると、リソースを管理、デプロイ、スケーリング、共有するための論理ユニットとして関数をグループ化できます。

  1. Visual Studio の [ファイル] メニューで、 [新規作成]>[プロジェクト] を選択します。

  2. [新しいプロジェクトの作成] で「functions」を検索して [Azure Functions] テンプレートを選択し、[次へ] を選択します。

    Visual Studio の [新しいプロジェクト] ダイアログのスクリーンショット。

  3. [プロジェクト名] にプロジェクトの名前を入力し、[OK] を選択します。 プロジェクト名は、C# 名前空間として有効である必要があります。そのため、アンダースコアやハイフンなどの英数字以外の文字は使用しないでください。

  4. [追加情報] では、次の表で説明する設定を使用します。

    Visual Studio の [新しい Azure Functions アプリケーションの作成] ダイアログのスクリーンショット。

    設定 アクション 説明
    Functions worker [.NET 8 分離 (長期サポート)] を選択します。 分離されたワーカー プロセスで実行される .NET 8 と Azure Functions Runtime 4.0 をサポートする Azure Functions プロジェクトを作成します。 詳細については、「Azure Functions ランタイム バージョンをターゲットにする方法」をご覧ください。
    関数 Durable Functions オーケストレーション」と入力します。 Durable Functions オーケストレーションを作成します。

    Note

    [.NET 8 分離 (長期サポート)]Functions worker メニューに表示されない場合は、最新の Azure Functions ツール セットとテンプレートがない可能性があります。 [ツール]>[オプション]>[プロジェクトとソリューション]>[Azure Functions]>[更新プログラムの確認] に移動します。

  5. Azurite エミュレーターを使用するには、[ランタイム ストレージ アカウント (AzureWebJobStorage) に Azurite を使用する] チェック ボックスをオンにします。 Durable Functions オーケストレーション テンプレートを使用して Functions プロジェクトを作成するには、[作成] を選択します。 このプロジェクトには、関数を実行するために必要な基本的な構成ファイルがあります。

    Note

    Durable Functions アプリに他のストレージ オプションを選択できます。 詳細については、「Durable Functions ストレージ プロバイダー」を参照してください。

アプリ フォルダーには、Function1.cs という名前のファイルに 3 つの関数が含まれています。 3 つの関数は、Durable Functions アプリの基本的な構成要素です。

Method 説明
RunOrchestrator Durable Functions アプリのオーケストレーションを定義します。 このケースでは、オーケストレーションが起動し、一覧が作成され、3 つの関数呼び出しの結果が一覧に追加されます。 3 つの関数呼び出しが完了すると、一覧が返されます。
SayHello hello を返す単純な関数アプリ。 この関数には、調整されたビジネス ロジックが含まれています。
HttpStart オーケストレーションのインスタンスを開始し、チェック状態の応答を返す、HTTP によってトリガーされる関数

Durable Functions について詳しくは、Durable Functions の種類と機能に関するページを参照してください。

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

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

  1. Visual Studio Code で、SayHello アクティビティの関数コードにブレークポイントを設定し、F5 キーを押します。 メッセージが表示されたら、Visual Studio からの要求に同意し、Azure Functions Core (コマンドライン) ツールをダウンロードしてインストールします。 また、ツールで HTTP 要求を処理できるように、ファイアウォールの例外を有効にすることが必要になる場合もあります。

    Note

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

  2. Azure Functions のランタイムの出力から、関数の URL をコピーします。

    Azure ローカル ランタイムのスクリーンショット。

  3. HTTP 要求の URL をブラウザーのアドレス バーに貼り付け、要求を実行します。 次のスクリーンショットに、関数からブラウザーに返されたローカル GET 要求に対する応答を示します。

    statusQueryGetUri が強調表示されているブラウザー ウィンドウのスクリーンショット。

    応答は、HTTP 関数の最初の結果です。 これは、持続的オーケストレーションが正常に開始されたことを知らせます。 オーケストレーションの最終的な結果はまだ表示されません。 応答には、いくつかの便利な URL が含まれています。

    オーケストレーションが開始されたため、この時点でアクティビティ関数のブレークポイントにヒットするはずです。 それをステップ実行して、オーケストレーションの状態に対する応答を取得します。

  4. statusQueryGetUri の URL 値をコピーし、それをブラウザーのアドレス バーに貼り付け、要求を実行します。

    この要求によって、オーケストレーション インスタンスの状態が照会されます。 次の例のように、インスタンスが完了し、持続的関数の出力または結果が内部に含まれていることを確認できます。

    {
        "name":"HelloCities",
        "instanceId":"668814ac6ce84a43a9e6757f81dbc0bc",
        "runtimeStatus":"Completed",
        "input":null,
        "customStatus":null,
        "output":"Hello, Tokyo! Hello, London! Hello Seattle!",
        "createdTime":"2023-01-31T16:44:34Z",
        "lastUpdatedTime":"2023-01-31T16:44:37Z"
    }
    

    ヒント

    ブレークポイントを使用して Durable Functions アプリの再生動作を観察する方法を学べます。

  5. デバッグを停止するには、Shift + F5 キーを押します。

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

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

プロジェクトを発行するには、Azure サブスクリプションに関数アプリが必要です。 Visual Studio で関数アプリを作成できます。

  1. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [発行] を選択します。 [ターゲット][Azure] を選択し、[次へ] を選択します。

    発行ペインのスクリーンショット。

  2. [特定のターゲット][Azure Function App (Windows)] を選択します。 Windows で実行される関数アプリが作成されます。 [次へ] を選択します。

    特定のターゲットを持つ [発行] ペインのスクリーンショット。

  3. [Functions インスタンス][新しい Azure 関数の作成] を選択します。

    [新しい関数アプリ インスタンスの作成] を示すスクリーンショット。

  4. 次の表に示されている値を使用して、新しいインスタンスを作成します。

    設定 内容
    名前 グローバルに一意の名前 新しい関数アプリを一意に識別する名前。 この名前をそのまま使用するか、新しい名前を入力します。 有効な文字は、a-z0-9- です。
    サブスクリプション 該当するサブスクリプション 使用する Azure サブスクリプション。 このサブスクリプションを承諾するか、ドロップダウン リストから新しいものを選択します。
    リソース グループ リソース グループの名前 関数アプリを作成するリソース グループ。 [新規作成] を選択して、新しいリソース グループを作成します。 ドロップダウン リストから、既存のリソース グループを使用することも選択できます。
    プランの種類 従量課金 従量課金プランで実行される関数アプリにプロジェクトを発行する場合は、関数アプリの実行に対してのみお支払いください。 他のホスティング プランでは、コストが高くなります。
    場所 App Service の場所 最寄りのAzure リージョンまたは関数がアクセスする他のサービスの近くのリージョン内の [場所] を選択します。
    Azure ストレージ 汎用ストレージ アカウント Functions の共通言語ランタイムでは、Azure ストレージ アカウントが必要です。 [新規] を選択して汎用ストレージ アカウントを構成します。 または、ストレージ アカウントの要件を満たす既存のアカウントを使用することも選択できます。
    Application Insights Application Insights インスタンス 関数アプリに対して Azure Application Insights 統合を有効にする必要があります。 新規または既存の Log Analytics ワークスペースで、[新規作成] を選択して新しいインスタンスを作成します。 既存のインスタンスを使用することも選択できます。

    App Service 作成ダイアログのスクリーンショット。

  5. [作成] を選択して、関数アプリとその関連リソースを Azure で作成します。 リソース作成のステータスがウィンドウの左下隅に表示されます。

  6. [関数インスタンス] で、[パッケージ ファイルから実行します] チェックボックスに必ずチェックを入れてください。 関数アプリは、Zip Deploy を使用して、Run-From-Package モードが有効な状態でデプロイされます。 Zip Deploy は関数プロジェクトの推奨されるデプロイ方法であり、高いパフォーマンスを実現できます。

    [プロファイル作成の完了] ペインのスクリーンショット。

  7. [完了] を選択し、[発行] ペインで [発行] を選択して、プロジェクト ファイルを含むパッケージを Azure 内の新しい関数アプリにデプロイします。

    デプロイが完了すると、Azure 内の関数アプリのルート URL が [発行] タブに表示されます。

  8. [発行] タブの [ホスティング] セクションで、[Azure portal で開く] を選択します。 新しい関数アプリの Azure リソースが Azure portal で開きます。

    [発行の成功] メッセージのスクリーンショット。

Azure で関数をテストする

  1. [発行プロファイル] ページで関数アプリのベース URL をコピーします。 関数をローカルでテストしたときに使用した URL の localhost:port 部分を新しいベース URL に置き換えます。

    永続関数の HTTP トリガーを呼び出す URL は、次の形式である必要があります。

    https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>_HttpStart

  2. HTTP 要求のこの新しい URL をブラウザーのアドレス バーに貼り付けます。 発行されたアプリをテストした場合、ローカルでテストした場合と同じ状態の応答を受け取る必要があります。

Visual Studio を使用して作成、発行した C# Durable Functions アプリを使用する準備ができました。

リソースをクリーンアップする

クイックスタートを完了するために作成したリソースが不要になった場合は、Azure サブスクリプションで関連コストが発生するのを避けるため、リソース グループは削除し、関連するすべてのリソースも削除してください。