local.settings.json
やアプリケーション設定に設定された情報を Azure Functions v2 で使う方法をメモしておきます。
Microsoft.Extensions.Configuration
を使います。 ASP.NET Core ではおなじみのやつですね。local.settings.json
を使うために ExecutionContext
クラスが必要っぽいのがちょっと使いにくい感じが出てますね。
コードとしては、こんな感じのが出来るといい館です。
new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) // context は ExecutionContext のインスタンス .AddJsonFile("local.settings.json", true) .AddEnvironmentVariables() .Build() .Bind("clova", Configuration); // Configuration という名前の変数に設定情報を流し込む
なので、こんな感じのクラスを作っておいて
using System; using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Configuration; namespace ClovaLab.Configurations { public static class ConfigurationManager { private static object Lock { get; } = new object(); private static Configuration Configuration { get; set; } public static Configuration GetConfiguration(ExecutionContext context) { if (Configuration == null) { lock (Lock) { if (Configuration == null) { Configuration = new Configuration(); new ConfigurationBuilder() .SetBasePath(context.FunctionAppDirectory) .AddJsonFile("local.settings.json", true) .AddEnvironmentVariables() .Build() .Bind("clova", Configuration); } } } return Configuration; } } public class Configuration { public bool IsSkipRequestValidation { get; set; } } }
関数ではこんな感じで使います。
using System.IO; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.AspNetCore.Http; using Microsoft.Azure.WebJobs.Host; using Newtonsoft.Json; using Microsoft.Extensions.Logging; using ClovaLab.Configurations; namespace ClovaLab { public static class Lab { [FunctionName("Lab")] public static IActionResult Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, ExecutionContext context, ILogger log) { var config = ConfigurationManager.GetConfiguration(context); log.LogInformation(config.IsSkipRequestValidation.ToString()); return new OkObjectResult(new object()); } } }
今回は Bind 時に clova という文字を指定しているので local.settings.json やアプリケーション設定には、こんな感じで先頭に clova:
をつけます。
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "AzureWebJobsDashboard": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet", "clova:IsSkipRequestValidation": true } }
メモメモ。
参考元情報
Using strongly typed configuration in .NET Core console app – Thoughts on coding …