クイック スタート:Azure App Configuration を使用して Azure Functions アプリを作成する

このクイックスタートでは、コードとは別にすべてのアプリケーション設定のストレージと管理を一元化するために、Azure App Configuration サービスを Azure Functions アプリに組み込みます。

前提条件

キー値を追加する

App Configuration ストアに次のキーと値を追加し、[ラベル][コンテンツのタイプ] を既定値のままにします。 Azure portal または CLI を使用してストアにキーと値を追加する方法の詳細については、キーと値の作成に関する記事を参照してください。

キー
TestApp:Settings:Message Azure App Configuration からのデータ

関数アプリを作成する

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

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

  2. [新しいプロジェクトの作成] の検索ボックスに「functions」と入力し、Azure Functions テンプレートを選択してから、 [次へ] を選択します。

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

  4. [新しい Azure Functions アプリケーションの作成] 設定で、次の表の値を使用します。

    設定 説明
    .NET のバージョン .NET 6 Isolated この値により、分離ワーカー プロセスで実行される関数プロジェクトが作成されます。 分離ワーカー プロセスでは、.NET の他の LTS 以外のバージョンと、.NET Framework もサポートされます。 詳細については、「Azure Functions ランタイム バージョンをターゲットにする方法」をご覧ください。
    関数テンプレート HTTP トリガー この値は、HTTP 要求によってトリガーされる関数を作成します。
    ストレージ アカウント (AzureWebJobsStorage) ストレージ エミュレーター Azure の関数アプリにはストレージ アカウントが必要であるため、プロジェクトを Azure に発行する際に割り当てられるか、作成されます。 HTTP トリガーによって、Azure Storage アカウントの接続文字列が使用されることはありません。その他のすべてのトリガーの種類には、有効な Azure Storage アカウントの接続文字列が必要です。
    承認レベル 匿名 作成される関数を、すべてのクライアントがキーを使用せずにトリガーできます。 この承認設定により、新しい関数のテストが容易になります。 キーと承認の詳細については、「承認キー」と HTTP と Webhook のバインドに関するページをご覧ください。

    Azure Functions プロジェクトの設定

    [承認レベル][匿名] に設定していることを確認します。 関数の既定のレベルを選択した場合、関数エンドポイントにアクセスする要求で、関数キーを提示する必要があります。

  5. [作成] を選択して、関数プロジェクトと HTTP トリガー関数を作成します。

App Configuration ストアに接続する

このプロジェクトは、.NET Azure Functions で依存関係の挿入を使用して、新しい構成ソースとして Azure App Configuration を追加します。 Azure Functions では、インプロセスまたは分離プロセスの実行がサポートされています。 要件に一致するものを選んでください。

  1. プロジェクトを右クリックし、 [NuGet パッケージの管理] を選択します。 [参照] タブで以下の NuGet パッケージを検索し、自分のプロジェクトに追加します。

  2. Azure App Configuration に接続するコードを追加します。

    次のコードを使用して、新しいファイル Startup.cs を追加します。 これにより、FunctionsStartup 抽象クラスを実装する Startup という名前のクラスが定義されます。 アセンブリ属性は、Azure Functions の起動時に使われる型名を指定するために使用されます。

    AddAzureAppConfiguration() を呼び出すことで、ConfigureAppConfiguration メソッドをオーバーライドし、Azure App Configuration プロバイダーを新しい構成ソースとして追加します。 この時点ではサービスを登録する必要がないため、Configure メソッドは空のままです。

    using System;
    using Microsoft.Azure.Functions.Extensions.DependencyInjection;
    using Microsoft.Extensions.Configuration;
    
    [assembly: FunctionsStartup(typeof(FunctionApp.Startup))]
    
    namespace FunctionApp
    {
        class Startup : FunctionsStartup
        {
            public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
            {
                string cs = Environment.GetEnvironmentVariable("ConnectionString");
                builder.ConfigurationBuilder.AddAzureAppConfiguration(cs);
            }
    
            public override void Configure(IFunctionsHostBuilder builder)
            {
            }
        }
    }
    
  3. Function1.cs を開き、次の名前空間がまだ存在しない場合は追加します。

    using Microsoft.Extensions.Configuration;
    

    依存関係の挿入によって、IConfiguration のインスタンスを取得するために使用するコンストラクターを追加または更新します。

    private readonly IConfiguration _configuration;
    
    public Function1(IConfiguration configuration)
    {
        _configuration = configuration;
    }
    
  4. 構成から値を読み取るように Run メソッドを更新します。

    [FunctionName("Function1")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
    
        // Read configuration data
        string keyName = "TestApp:Settings:Message";
        string message = _configuration[keyName];
    
        return message != null
            ? (ActionResult)new OkObjectResult(message)
            : new BadRequestObjectResult($"Please create a key-value with the key '{keyName}' in App Configuration.");
    }
    

    Note

    Function1 クラスと Run メソッドを静的にすることはできません。 static 修飾子が自動生成された場合は削除します。

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

  1. ConnectionString という名前の環境変数に、App Configuration ストアへのアクセス キーを設定します。 Windows コマンド プロンプトを使用する場合は、次のコマンドを実行してコマンド プロンプトを再起動し、変更が反映されるようにします。

        setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    Windows PowerShell を使用する場合は、次のコマンドを実行します。

        $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    

    macOS または Linux を使用する場合は、次のコマンドを実行します。

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

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

    クイック スタート: VS での関数のデバッグ

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

    クイック スタート: ローカル環境での関数の起動

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

この記事で作成したリソースを継続して使用しない場合は、ここで作成したリソース グループを削除して課金されないようにしてください。

重要

リソース グループを削除すると、元に戻すことができません。 リソース グループとそのすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 この記事のリソースを、保持したい他のリソースを含むリソース グループ内に作成した場合は、リソース グループを削除する代わりに、各リソースをそれぞれのペインから個別に削除します。

  1. Azure portal にサインインし、 [リソース グループ] を選択します。
  2. [名前でフィルター] ボックスにリソース グループの名前を入力します。
  3. 結果一覧でリソース グループ名を選択し、概要を表示します。
  4. [リソース グループの削除] を選択します。
  5. リソース グループの削除の確認を求めるメッセージが表示されます。 確認のためにリソース グループの名前を入力し、 [削除] を選択します。

しばらくすると、リソース グループとそのすべてのリソースが削除されます。

次のステップ

このクイックスタートでは、新しい App Configuration ストアを作成して、App Configuration プロバイダーから Azure Functions アプリと共に使用しました。 構成が動的に更新されるように Azure Functions アプリを更新する方法については、次のチュートリアルに進んでください。

App Configuration へのアクセスを効率化する Azure マネージド ID を使用する方法については、次のチュートリアルに進んでください。