次の方法で共有


クイック スタート: 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 アカウントがない場合は、開始する前に free アカウントを作成します。

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

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

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

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

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

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

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

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

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

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

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

これらの関数の詳細については、「Durable Functions型と機能を参照してください。

記憶域を構成する

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

{
  "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 からの出力が表示されます。

    デバッグの詳細については、「Durable Functions diagnostics」を参照してください。

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

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

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

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

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

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

  4. の 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. まだサインインしていない場合は、Activity バーで、Azure アイコンを選択します。 次に、ResourcesSign in to Azure を選択します。

    Visual Studio Code の Azure ウィンドウへのサインイン画面のスクリーンショット

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

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

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

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

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

  1. Visual Studio Codeで F1 キーを押してコマンド パレットを開きます。 プロンプト (>) で、「Azure Functions: Create Function App in Azure」と入力して選択します。

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

    Prompt アクション
    サブスクリプションを選択してください 使用するAzure サブスクリプションを選択します。 [リソース] に表示されるサブスクリプションが 1 つだけのときは、このプロンプトは表示されません。
    新しい関数アプリ名を入力する URL パスで有効なグローバルに一意の名前を入力します。 入力した名前は、Azure Functionsで一意であることを確認するために検証されます。
    Select a location for new resources (新しいリソースの場所を選択してください) Azureリージョンを選択します。 パフォーマンスを向上させるために、お近くのリージョンを選択してください。 Flex 従量課金プランでサポートされているリージョンのみが表示されます。
    ランタイム スタックを選択してください 現在ローカルで実行している言語バージョンを選択してください。
    リソース認証の種類を選択する 既定のホスト ストレージ アカウントに接続するための最も安全なオプションであるマネージド ID を選択します。

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

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

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

    • リソース グループ。関連リソースの論理コンテナーです。
    • 関数アプリ。関数コードを実行するための環境となります。 関数アプリを使用すると、同じホスティング プランに含まれるリソースの管理、デプロイ、共有を容易にするための論理ユニットとして関数をグループ化できます。
    • Azure App Service プラン。関数アプリの基になるホストを定義します。
    • 標準Azure Storage アカウント。関数アプリに関する状態やその他の情報を維持するために Functions ホストによって使用されます。
    • 関数アプリに接続された Application Insights インスタンス。アプリ内の関数の使用を追跡します。
    • 新しい既定のホスト ストレージ アカウントの ストレージ BLOB データ共同作成者 ロールに追加されるユーザー割り当てマネージド ID。

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

    ヒント

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

プロジェクトを Azure に配置する

重要

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

  1. コマンド パレットで、「Azure Functions: Function App にデプロイするを入力して選択します。

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

  3. デプロイが完了したら、View Output を選択して、作成した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 の Durables Functions アプリ コードのスクリーンショット。

前提条件

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

  • Visual Studio 2022 がインストールされています。

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

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

Azure アカウントがない場合は、開始する前に free アカウントを作成します。

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

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

  1. Visual Studioで、File メニューの New>Project を選択します。

  2. 新しいプロジェクトを作成で、functions を検索し、Azure Functions テンプレートを選択して、Next を選択します。

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

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

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

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

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

    .NET 8 Isolated (Long Term Support)Functions worker メニューに表示されない場合は、最新のAzure Functions ツール セットとテンプレートがない可能性があります。 Tools>Options>Projects and Solutions>Azure Functions>最新の更新をダウンロードするためにアップデートをチェックしてください。

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

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

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

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

これらの関数の詳細については、「Durable Functions型と機能を参照してください。

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

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

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

    デバッグの詳細については、「Durable Functions diagnostics」を参照してください。

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

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

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

    statusQueryGetUri が呼び出されたブラウザー ウィンドウのスクリーンショット。

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

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

  4. の 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. ソリューション エクスプローラー でプロジェクトを右クリックし、Publish を選択します。

  2. [ 発行 ] ページで、次の選択を行います。

    • Target で、Azure を選択し、 Next を選択します。
    • Specific target で、Azure Function App を選択し、Next を選択します。
    • Functions インスタンスで、[新規作成] を選択します。

    [発行] ページのスクリーンショット。[Functions インスタンス] セクションにリソース グループが表示され、[新規作成] が強調表示されています。

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

    設定 説明
    名前 グローバルに一意の名前 名前は、新しい関数アプリを一意に識別する必要があります。 推奨される名前をそのまま使用するか、新しい名前を入力します。 有効な文字は、 、 、および です。
    サブスクリプション名 サブスクリプションの名前 関数アプリは、Azure サブスクリプションに作成されます。 既定のサブスクリプションをそのまま使用するか、一覧から別のサブスクリプションを選択します。
    リソース グループ リソース グループの名前 関数アプリはリソース グループに作成されます。 [新規作成] を選択して、新しいリソース グループを作成します。 一覧から既存のリソース グループを選択することもできます。
    プランの種類 Flex Consumption Flex Consumption プランで実行されている関数アプリにプロジェクトを発行する場合、関数アプリの実行に対してのみ支払う場合があります。 その他のホスティング プランでは、コストが高くなる可能性があります。
    重要:
    Flex 従量課金プランを作成するときは、まず App Service プラン を選択してから 、Flex Consumption を再選択してダイアログの問題をクリアする必要があります。
    オペレーティング システム リナックス Flex 従量課金プランには現在、Linux が必要です。
    場所 アプリ サービスの場所 Flex 従量課金プランでサポートされている Azure リージョン内の場所を選択します。 サポートされていないリージョンが選択されている場合、[ 作成 ] ボタンは淡色表示されます。
    インスタンス メモリ サイズ 2048 アプリが実行される 仮想マシン インスタンスのメモリ サイズ は、Flex 従量課金プランに固有です。
    Azure Storage 汎用ストレージ アカウント Functions ランタイムにはストレージ アカウントが必要です。 [新規] を選択して汎用ストレージ アカウントを構成します。 ストレージ アカウントの要件を満たす既存のアカウントを使用することもできます。
    Application Insights Application Insights のインスタンス 関数アプリの Application Insights 統合を有効にする必要があります。 New を選択して、新規または既存のLog Analytics ワークスペースに新しいインスタンスを作成します。 既存のインスタンスを使用することもできます。

    [Function App Create new]\(関数アプリの新しい作成\) ダイアログのスクリーンショット。名前、サブスクリプション、リソース グループ、プラン、およびその他の設定のフィールドが入力されます。

  4. Create を選択して、関数アプリとその関連リソースをAzureに作成します。 リソース作成の状態はウィンドウの左下に表示されます。

  5. 完了を選択します。 [ 発行プロファイルの作成の進行状況 ] ウィンドウが表示されます。 プロファイルが作成されたら、[ 閉じる] を選択します。

  6. 発行プロファイル ページで、Publish を選択して、プロジェクト ファイルを含むパッケージをAzureの新しい関数アプリに配置します。

    デプロイが完了すると、Azureの関数アプリのルート URL が発行プロファイル ページに表示されます。

  7. 発行プロファイル ページで、[ ホスティング ] セクションに移動します。 省略記号 (...) を選択し、次に Azure ポータルで開く を選択します。 Azure ポータルで、新しい関数アプリ Azure リソースが開きます。

    発行プロファイル ページのスクリーンショット。[ホスティング] セクションで、省略記号のショートカット メニューが開き、Azure ポータルで開くが強調表示されています。

Azureで関数をテストする

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

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

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

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

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

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

クイック スタートを完了するために作成したリソースが不要になった場合は、Azure サブスクリプションの関連コストを回避するために、リソース グループおよびすべての関連リソースを削除します。