appsettings.json
にキーを追加するための標準構造は何ですか?また、run.csx
でこれらの値を読み取る方法は?通常app.configには、ConfigurationManager.GetSettings["SettingName"];
がありました。AzureFunctionに同様の実装はありますか?
前述のとおり ここ
これらの設定は、コード内で環境変数として読み取ることもできます。 C#では、
System.Environment.GetEnvironmentVariable
またはConfigurationManager.AppSettings
を使用します。 JavaScriptでは、process.env
を使用します。システム環境変数として指定された設定は、local.settings.json
ファイルの値よりも優先されます。
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にデプロイしたら、アプリケーション設定ブレード機能の設定値を変更できます。
環境または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
アプリの設定にアクセスするためにSystem.Environment.GetEnvironmentVariable()
を使用する必要はありません。
ConfigurationManager
は、run.csxのAzure Functionsで次のように使用できます。
System.Configuration.ConfigurationManager.AppSettings["SettingName"]
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構成ファイルを直接サポートしているはずです。お役に立てれば。
設定方法は次のとおりです。
リポジトリのルートにjsonを追加します。例app.settings.json
次のように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がアクセスできるようになります。
ハッピーコーディング。
Appsettingsは、関数自体ではなく、そのFunction Appによって管理されます。したがって、cliを使用する場合は、何かに沿って...
az functionapp appsettings set .....
CI/CDパイプラインでそれを行う方法です。その後、関数でそれらを使用できます。関数はFunction App内に存在する必要があるため、すべての関数で使用できるようにすべての値をそこに配置するのは理にかなっています。