Azure App Configuration参照を使ってみよう
TL;DR
Azure KeyVault参照のように以下の構文でApp Configurationの構成値もAzure FunctionsとApp Serviceで参照できるようになりました。
@Microsoft.AppConfiguration(Endpoint=https://myAppConfigStore.azconfig.io; Key=myAppConfigKey; Label=myKeysLabel)
はじめに
Azure App Configurationはアプリケーション設定をKey-Valueで保存し、アプリケーションへ配信する構成ストアと呼ばれるサービスです。
今まではApp Configurationに保存された構成値をクライアントアプリやWebアプリ内からコードによって構成を読み取ることができましたが、今回のアップデートによって環境変数を介した構成の参照ができるようになりました。
似たような機能としてシークレットや証明書などを保管しておくAzure KeyVaultのKeyVault参照がありますが、それのApp Configuration版と考えればよさそうです。

この機能を使うことによって以下のような利点が考えられます。
- 環境変数を介することによりApp Congifuration固有のコーディングが必要なくなるため、アプリケーションの可搬性が向上します。
なお、今回App Configuration参照がサポートされたのは以下の2つのサービスです。
- Azure Functions
- App Service
使ってみる
今回はAzure Functionsを使ってApp Configuration参照を試してみます。
Azure Functions の準備
Azure Functionsを作成し、HTTPトリガーの関数を追加します。(今回は機能を試すだけなのでポータル上で開発します)

HTTPリクエストを受けたらMessageという名前の環境変数を読み取って返すだけのプログラムを書いて保存をします。
public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
string responseMessage = Environment.GetEnvironmentVariable("Message");
return new OkObjectResult(responseMessage);
}
Azure Functionsの構成から新しいアプリケーション設定を追加し名前をMessage、値には適当な文字列を入れて保存します。(ここを後でApp Configuration参照に変更します)

関数のページに戻ってアクセス用のURLを取得してブラウザからアクセスします。

固定値で設定した値が表示されたらAzure Functionsの関数の準備は完了です。

マネージドIDの有効化
Azure FunctionsがApp Configurationを参照する際に使用するIDを有効化します。
Azure FunctionsのIDからシステム割り当て済みの状態をオンにして保存します。

App Configurationの準備
App Configurationを作成します。
Configuration explorerからCreate→Key-valueで新しい構成値を作成します。

App ConfigurationへマネージドIDの割り当て
Azure Functionsで作成したマネージドIDをApp Configurationへアクセス付与をします。

今回は参照しかしないのでロールをApp Configurationデータ閲覧者に設定します。

Azure Functionsで有効化したマネージドIDを選択します。(数が多い場合はフィルタなどで絞り込んでください)

設定内容が正しいことを確認して割り当てをします。

Azure FunctionsでApp Configuration を追加
Access keysや概要ページからApp Configurationのエンドポイントをコピーしておきます。

Azure Functionsの構成ページから先ほど固定値を入れたMessageをペンマークをクリックして編集します。

編集画面で値に以下のように参照構文を記述します。
@Microsoft.AppConfiguration(Endpoint=https://{your-endpont}.azconfig.io; Key=message)

App ConfigurationでLabelなどを指定した場合も参照構文のパラメーターとして指定できます。
詳細な構文の解説は公式Docsを参照してください。
保存をクリックします。保存が成功するとアプリケーションが再起動します。

関数のURLにアクセスしてみて、App Configurationに設定された値が表示されていれば成功です!

最後に
プレビュー時点では以下のような制限があります。
- プライベートエンドポイントなどネットワークで制限されたApp Configurationの参照は不可です。
- App ConfigurationにKey Vault参照を追加して、さらにそれをFunctionsなどで参照する二次的な参照の解決はサポートさてれいません。
- 参照された構成値がApp Configurationで更新された場合でも自動的に更新されず、アプリが再起動したときにのみ新しい構成地が反映されます。
Discussion