web-dev-qa-db-ja.com

Azure Functionの複雑なオブジェクトアプリの設定

私のlocal.settings.jsonにこれらのエントリがあります

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "whateverstorageaccountconnectionstring",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet"
    },
    "BusinessUnitMapping": {
        "Values": {
            "Connections": "CON",
            "Products": "PRD",
            "Credit & Affordability": "CAA",
            "Accounts Receivable": "ARC",
            "Identity":  "IDT"
        }
    }
}

起動時に値を読み取るこのコードがあります

services.Configure<BusinessUnitMapping>(options => configuration.GetSection("BusinessUnitMapping").Bind(options));

ここで、BusinessUnitMappingは

public class BusinessUnitMapping
{
  public Dictionary<string, string> Values { get; set; }
  public BusinessUnitMapping()
  {
      Values = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
  }
}

関数アプリをローカルで実行すると、これらの設定を問題なくBusinessUnitMappingに読み込むことができます。

Azure Portalのアプリケーション設定の高度な編集では、以下のような単純なキーと値のペアのみが許可されます

[
  {
    "name": "AzureWebJobsDashboard",
    "value": "DefaultEndpointsProtocol=Somevalue",
    "slotSetting": false
  },
  {
    "name": "AzureWebJobsStorage",
    "value": "DefaultEndpointsProtocol=Somevalue",
    "slotSetting": false
  },
  ...
]

質問

  1. これは、Azure Functionに複雑なアプリ設定を格納するための正しいアプローチですか?
  2. デプロイしたFunction App用にAzure PortalでBusinessUnitMappingを構成するにはどうすればよいですか?

-アラン-

8
Alan B
  1. これは、Azure Functionに複雑なアプリ設定を格納するための正しいアプローチですか?

これはまだ未解決の質問です:参照してください これを尋ねているこのgithubの問題

  1. デプロイしたFunction App用にAzure PortalでBusinessUnitMappingを構成するにはどうすればよいですか?

私の現在の推奨アプローチは、ローカルとAzureの両方で機能するGetEnvironmentVariableを使用するデリゲートで オプションパターン を使用することです。欠点は、ローカル設定ファイル自体に複合型を作成できないことですが、オブジェクトは好きなだけ複雑にすることができます。

簡単な例:

Local.settings.jsonで:

{
  ...
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    ...
    "SomeSection:Setting1": "abc",
    "SomeSection:Setting2": "xyz",
  },
  ...
}

あなたのスタートアップでは:

services.Configure<MySettingsPoco>(o =>
{
    o.Setting1 = Environment.GetEnvironmentVariable("SomeSection:Setting1");
    o.Setting2 = Environment.GetEnvironmentVariable("SomeSection:Setting2");
});

次に、Azureで次のようにこれらの設定を作成できます。

enter image description here

4
Matt