C# で最初の持続的関数を作成する

Durable Functions は、サーバーレス環境でステートフル関数を記述できる Azure Functions の拡張機能です。 この拡張機能は状態、チェックポイント、再起動を管理します。

この記事では、Visual Studio Code を使用して、"hello world" 永続関数をローカルで作成してテストする方法を学習します。 この関数は、他の関数の呼び出しを調整し、連結します。 その後、関数コードを Azure に発行できます。 これらのツールは、Visual Studio Code の Azure Functions 拡張機能の一部として利用できます。

持続的関数が表示されている Visual Studio Code ウィンドウのスクリーンショット。

前提条件

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

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

  • 次の Visual Studio Code 拡張機能をインストールします。

  • 最新バージョンの Azure Functions Core Tools があることを確認します。

  • Durable Functions には Azure ストレージ アカウントが必要です。 Azure サブスクリプションが必要です。

  • バージョン 3.1 以降の .NET Core SDK がインストールされていることを確認します。

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

ローカル プロジェクトを作成する

このセクションでは、Visual Studio Code を使用して、ローカル Azure Functions プロジェクトを作成します。

  1. Visual Studio Code で、F1 (または Ctrl または Cmd + Shift + P) キーを押して、コマンド パレットを開きます。 コマンド パレットで、Azure Functions: Create New Project... を検索して選択します。

    関数プロジェクトの作成ウィンドウのスクリーンショット。

  2. プロジェクト用に空のフォルダーの場所を選択し、 [選択] を選択します。

  3. プロンプトに従って、次の情報を指定します。

    Prompt 説明
    Select a language for your function app project (関数アプリ プロジェクトの言語を選択してください) C# ローカル C# 関数プロジェクトを作成します。
    Select a version (バージョンを選択してください) Azure Functions v4 このオプションが表示されるのは、Core Tools がまだインストールされていない場合だけです。 その場合、アプリの初回実行時に Core Tools がインストールされます。
    Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) 今はしない
    Select how you would like to open your project (プロジェクトを開く方法を選択してください) 現在のウィンドウで開く 選択したフォルダーで Visual Studio Code を開き直します。

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

アプリに関数を追加する

次の手順では、テンプレートを使用してプロジェクト内に永続関数のコードを作成します。

  1. コマンド パレットで、Azure Functions: Create Function... を検索して選択します。

  2. プロンプトに従って、次の情報を指定します。

    Prompt 説明
    Select a template for your function (関数のテンプレートを選択してください) DurableFunctionsOrchestration Durable Functions オーケストレーションを作成します
    Provide a function name (関数名を指定してください) HelloOrchestration 関数が作成されるクラスの名前
    Provide a namespace (名前空間を指定してください) Company.Function 生成されるクラスの名前空間
  3. Visual Studio Code でストレージ アカウント選択のプロンプトが表示されたら、[ストレージ アカウントの選択] を選択します。 プロンプトに従って次の情報を入力し、Azure で新しいストレージ アカウントを作成します。

    Prompt 説明
    サブスクリプションの選択 <お使いのサブスクリプションの名前> Azure サブスクリプションを選択します。
    Select a storage account (ストレージ アカウントを選択する) 新しいストレージ アカウントの作成
    Enter the name of the new storage account (新しいストレージ アカウントの名前を入力する) <一意の名前> 作成するストレージ アカウントの名前
    リソース グループの選択 <一意の名前> 作成するリソース グループの名前
    場所を選択します。 リージョン 近くのリージョンを選択します

新しい関数を含むクラスがプロジェクトに追加されます。 また Visual Studio Code により、ストレージ アカウントの接続文字列が local.settings.json に追加され、Microsoft.Azure.WebJobs.Extensions.DurableTask NuGet パッケージへの参照が .csproj プロジェクト ファイルに追加されます。

新しい HelloOrchestration.cs ファイルを開いて内容を表示します。 この永続関数は、次のメソッドを使用した単純な関数チェーンの例です。

Method FunctionName 説明
RunOrchestrator HelloOrchestration 持続的オーケストレーションを管理します。 このケースでは、オーケストレーションが起動し、一覧が作成され、3 つの関数呼び出しの結果が一覧に追加されます。 3 つの関数呼び出しが完了すると、一覧が返されます。
SayHello HelloOrchestration_Hello 関数から hello が返されます。 これは、調整されるビジネス ロジックを含む関数です。
HttpStart HelloOrchestration_HttpStart オーケストレーションのインスタンスを開始し、チェック状態の応答を返す、HTTP によってトリガーされる関数

関数プロジェクトと Durable Functions を作成できたので、この関数をローカル コンピューターでテストすることができます。

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

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

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

    Note

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

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

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

  3. Postman または cURL のようなツールを使用して、HTTP POST 要求を URL エンドポイントに送信します。

    応答は、永続的なオーケストレーションが正常に開始されたことを示す HTTP 関数の最初の結果です。 これはまだオーケストレーションの最終的な結果ではありません。 応答には、いくつかの便利な URL が含まれています。 ここでは、オーケストレーションの状態を照会してみましょう。

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

    この要求によって、オーケストレーション インスタンスの状態が照会されます。 インスタンスが完了したことを示し、永続関数の出力または結果を含む、最終的な応答を受け取ります。 次のように表示されます。

    {
        "name": "HelloOrchestration",
        "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": null,
        "output": [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ],
        "createdTime": "2020-03-18T21:54:49Z",
        "lastUpdatedTime": "2020-03-18T21:54:54Z"
    }
    
  5. デバッグを停止するには、Visual Studio Code で Shift + F5 キーを押します。

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

Azure へのサインイン

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

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

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

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

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

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

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

このセクションでは、Azure サブスクリプションに関数アプリと関連リソースを作成します。

  1. アクティビティ バーの Azure アイコンを選択します。 次に、[リソース] 領域の + アイコンを選択し、[Azure に関数アプリを作成] オプションを選択します。

    Azure サブスクリプションでリソースを作成する

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

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

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

    Azure リソース作成のログ

  3. 作成が完了すると、次の Azure リソースがサブスクリプションに作成されます。 リソースは、関数アプリの名前に基づいて命名されます。

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

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

    ヒント

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

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

重要

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

  1. Azure アクティビティの [リソース] 領域で、先ほど作成した関数アプリ リソースを見つけて、リソースを右クリックし、[関数アプリにデプロイ] を選択します。

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

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

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

Azure で関数をテストする

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

    https://<functionappname>.azurewebsites.net/api/HelloOrchestration_HttpStart

  2. HTTP 要求のこの新しい URL をブラウザーのアドレス バーに貼り付けます。 以前の発行済みアプリの使用時と同じ状態応答を受け取るはずです。

次のステップ

Visual Studio Code を使用して、C# の永続関数アプリを作成して発行しました。

この記事では、Visual Studio 2022 を使用して、「hello world」の Durable Functions をローカルで作成してテストする方法を説明します。 この関数は、他の関数の呼び出しを調整し、連結します。 その後、関数コードを Azure に発行します。 これらのツールは、Visual Studio 2022 の Azure の開発ワークロードの一部として使用できます。

持続的関数が表示されている Visual Studio 2019 ウィンドウのスクリーンショット。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • 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 6 .NET 6 と Azure Functions Runtime 4.0 をサポートする関数プロジェクトを作成します。 詳細については、「Azure Functions ランタイム バージョンをターゲットにする方法」をご覧ください。
    Function Empty 空の関数アプリを作成します。
    ストレージ アカウント ストレージ エミュレーター Durable Functions の状態管理にはストレージ アカウントが必要です。
  5. [作成] を選択して、空の関数プロジェクトを作成します。 このプロジェクトには、関数を実行するために必要な基本的な構成ファイルがあります。

アプリに関数を追加する

次の手順では、テンプレートを使用してプロジェクト内に永続関数のコードを作成します。

  1. Visual Studio でプロジェクトを右クリックし、 [追加]>[新しい Azure 関数] を選択します。

    [新しい関数を追加する] のスクリーンショット。

  2. 追加メニューから [Azure Function] が選択されていることを確認し、C# ファイルの名前を入力してから [追加] を選択します。

  3. [Durable Functions のオーケストレーション] テンプレートを選択し、その後 [追加] を選択します。

    [Select durable template] (持続的テンプレートの選択) のスクリーンショット。

新しい永続関数がアプリに追加されます。 新しい .cs ファイルを開いて内容を表示します。 この永続関数は、次のメソッドを使用した単純な関数チェーンの例です。

Method FunctionName 説明
RunOrchestrator <file-name> 持続的オーケストレーションを管理します。 このケースでは、オーケストレーションが起動し、一覧が作成され、3 つの関数呼び出しの結果が一覧に追加されます。 3 つの関数呼び出しが完了すると、一覧が返されます。
SayHello <file-name>_Hello 関数から hello が返されます。 これは、調整されるビジネス ロジックを含む関数です。
HttpStart <file-name>_HttpStart オーケストレーションのインスタンスを開始し、チェック状態の応答を返す、HTTP によってトリガーされる関数

関数プロジェクトと永続関数を作成できたので、この関数をローカル コンピューターでテストすることができます。

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

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

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

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

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

  3. HTTP 要求の URL をブラウザーのアドレス バーに貼り付け、要求を実行します。 関数によって返されたローカルの GET 要求に対するブラウザーでの応答を次に示します。

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

    応答は、永続的なオーケストレーションが正常に開始されたことを示す HTTP 関数の最初の結果です。 これはまだオーケストレーションの最終的な結果ではありません。 応答には、いくつかの便利な URL が含まれています。 ここでは、オーケストレーションの状態を照会してみましょう。

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

    この要求によって、オーケストレーション インスタンスの状態が照会されます。 最終的な応答は次のようになります。 この出力はインスタンスが完了したことを示し、永続関数の出力または結果を含みます。

    {
        "name": "Durable",
        "instanceId": "d495cb0ac10d4e13b22729c37e335190",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": null,
        "output": [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ],
        "createdTime": "2019-11-02T07:07:40Z",
        "lastUpdatedTime": "2019-11-02T07:07:52Z"
    }
    
  5. デバッグを停止するには、Shift キーを押しながら F5 キーを押します。

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

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

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

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

    発行ウィンドウのスクリーンショット。

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

    ターゲットを指定した発行ウィンドウのスクリーンショット。

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

    関数アプリ インスタンスを新規に作成する際のスクリーンショット。

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

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

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

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

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

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

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

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

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

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

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 アプリを作成して発行しました。