Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Azure Functions v2 で設定情報を使う方法

$
0
0

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
{
    publicstaticclass ConfigurationManager
    {
        privatestaticobject Lock { get; } = newobject();
        privatestatic Configuration Configuration { get; set; }
        publicstatic 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;
        }
    }

    publicclass Configuration
    {
        publicbool 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
{
    publicstaticclass Lab
    {
        [FunctionName("Lab")]
        publicstatic 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());

            returnnew OkObjectResult(newobject());
        }
    }
}

今回は Bind 時に clova という文字を指定しているので local.settings.json やアプリケーション設定には、こんな感じで先頭に clova:をつけます。

{"IsEncrypted": false,
    "Values": {"AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "AzureWebJobsDashboard": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "clova:IsSkipRequestValidation": true}}

メモメモ。

参考元情報

blog.jongallant.com

Using strongly typed configuration in .NET Core console app – Thoughts on coding …


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>