web-dev-qa-db-ja.com

Azure関数のAppSettings.jsonに構成値を追加する方法。そのための構造はありますか?

appsettings.jsonにキーを追加するための標準構造は何ですか?また、run.csxでこれらの値を読み取る方法は?通常app.configには、ConfigurationManager.GetSettings["SettingName"];がありました。AzureFunctionに同様の実装はありますか?

10
Harshit Agarwal

前述のとおり ここ

これらの設定は、コード内で環境変数として読み取ることもできます。 C#では、System.Environment.GetEnvironmentVariableまたはConfigurationManager.AppSettingsを使用します。 JavaScriptでは、process.envを使用します。システム環境変数として指定された設定は、local.settings.jsonファイルの値よりも優先されます。

7
Kevin Smith

Azure Functions 2.xでは、パッケージMicrosoft.Extensions.Configurationに含まれる.Netコア構成管理スタイルを使用する必要があります。これにより、jsonファイルのValues部分とConnectionString部分にローカル構成用のローカルsettings.jsonファイルを開発コンピューターに作成できます。 local json設定ファイルはAzureに公開されていません。代わりに、Azureは関数に関連付けられたアプリケーション設定から設定を取得します。

関数コードで、タイプMicrosoft.Azure.WebJobs.ExecutionContext contextのパラメーターを受け入れます。その後、IConfigurationRootプロバイダーを作成できます。

[FunctionName("MyFunction")]
public static async Task Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer,
    TraceWriter log, Microsoft.Azure.WebJobs.ExecutionContext context, 
    CancellationToken ctx)
{
   var config = new ConfigurationBuilder()
        .SetBasePath(context.FunctionAppDirectory)
        .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables()
        .Build();

    // This abstracts away the .json and app settings duality
    var myValue = config["MyKey"];

    var myConnString = config.GetConnectionString("connString");
    ... etc

AddJsonFileを使用すると、ローカル開発設定ファイルを追加できます。 local.settings.jsonにはローカルdev値が含まれています(公開されていません)

{
  "IsEncrypted": false,
  "Values": {
    "MyKey": "MyValue",
     ...
   },
   "ConnectionStrings": {
      "connString": "...."
}

一見、EF以外にConnectionStringsを使用しているようですが 推奨されないようです

そして、Azureにデプロイしたら、アプリケーション設定ブレード機能の設定値を変更できます。

Application Config

11
StuartLC

環境またはappsettings値をロードするには、使用する必要があります

System.Environment.GetEnvironmentVariableプロパティ

public static void Run(TimerInfo myTimer, TraceWriter log)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
    log.Info(GetEnvironmentVariable("AzureWebJobsStorage"));
    log.Info(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}

public static string GetEnvironmentVariable(string name)
{
    return name + ": " + 
        System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}

アプリ設定変数の管理- https://docs.Microsoft.com/en-us/Azure/azure-functions/functions-how-to-use-Azure-function-app-settings

3
Aravind

アプリの設定にアクセスするためにSystem.Environment.GetEnvironmentVariable()を使用する必要はありません。

ConfigurationManagerは、run.csxのAzure Functionsで次のように使用できます。

System.Configuration.ConfigurationManager.AppSettings["SettingName"]
3
urig

Azure関数は、app.configの限られた部分のみをサポートします。 VSから関数を実行するときに、アプリの設定と接続をlocal.settings.jsonに保存できます。このjsonファイルのsystem.serviceModelの下のWCFエンドポイント設定はサポートしていません。 Azure Functionにdllライブラリ参照があり、それは内部でWCF apiを呼び出していました。

奇妙なことに、Azure関数を実行すると、jsonがcliパス(%localappdata%\AzureFunctionsTools\Releases\1.6.0\cli\func.exe.config)でxml構成に変換されます。この構成ファイルにxml構成階層(system.serviceModel)を追加し、正常に機能し、WCFエンドポイントを選択してサービスを実行しました。 log4net構成の使用には苦労しましたが、APIを実行するのに適しています。 Azureは、xml構成ファイルを直接サポートしているはずです。お役に立てれば。

1
Phantom

設定方法は次のとおりです。

ステップ1

リポジトリのルートにjsonを追加します。例app.settings.json

ステップ2

次のようにDiretory.Build.targets(.targetsはここの拡張子です)ファイルを追加します

<Project>
  <PropertyGroup>
    <_IsFunctionsSdkBuild Condition="$(_FunctionsTaskFramework) != ''">true</_IsFunctionsSdkBuild>
    <_FunctionsExtensionsDir>$(TargetDir)</_FunctionsExtensionsDir>
    <_FunctionsExtensionsDir Condition="$(_IsFunctionsSdkBuild) == 'true'">$(_FunctionsExtensionsDir)bin</_FunctionsExtensionsDir>
  </PropertyGroup>

  <Target Name="CopyExtensionsJson" AfterTargets="_GenerateFunctionsAndCopyContentFiles">
    <Message Importance="High" Text="Overwritting extensions.json file with one from build." />

    <Copy Condition="$(_IsFunctionsSdkBuild) == 'true' AND Exists('$(_FunctionsExtensionsDir)\extensions.json')"
          SourceFiles="$(_FunctionsExtensionsDir)\extensions.json"
          DestinationFiles="$(PublishDir)bin\extensions.json"
          OverwriteReadOnlyFiles="true"
          ContinueOnError="true"/>
  </Target>

  <Target Name="CopyVaultJson" AfterTargets="_GenerateFunctionsAndCopyContentFiles">
    <Message Importance="High" Text="Overwritting app.settings.json file with one from build." />

    <Copy Condition="$(_IsFunctionsSdkBuild) == 'true' AND Exists('$(_FunctionsExtensionsDir)\app.settings.json')"
          SourceFiles="$(_FunctionsExtensionsDir)\app.settings.json"
          DestinationFiles="$(PublishDir)bin\app.settings.json"
          OverwriteReadOnlyFiles="true"
          ContinueOnError="true"/>
  </Target>
</Project>

これにより、dotnetビルドの実行時にapp.settings.jsonファイルを含めるようコンパイラーに明示的に指示され、そのファイルが/ binに含まれて、dllがアクセスできるようになります。

ハッピーコーディング。

0
Thierry Prost

Appsettingsは、関数自体ではなく、そのFunction Appによって管理されます。したがって、cliを使用する場合は、何かに沿って...

az functionapp appsettings set .....

CI/CDパイプラインでそれを行う方法です。その後、関数でそれらを使用できます。関数はFunction App内に存在する必要があるため、すべての関数で使用できるようにすべての値をそこに配置するのは理にかなっています。

0