Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9703

Azure Functions で設定情報を使いたい

$
0
0

Azure Functions で設定情報を IConfiguration型で扱いたい。欲を言えば IOptions<T>で扱いたいというケースについて。

端的に言うとドキュメントに記載があります。以下のページにいくと Azure Functions での DI の仕方が書いてあって、その中には IConfigurationがプラットフォームから提供されているのでそれを使う感じです。

.NET Azure Functions で依存関係の挿入を使用する

やってみよう

Azure Functions のプロジェクトを作成したら Microsoft.Azure.Functions.Extensionsを参照に追加します。そして、Startup.cs クラスを作ります。Startup クラスは Microsoft.Azure.Functions.Extensions.DependencyInjection.FunctionsStartupクラスを継承して Configure メソッドで色々追加していきます。

以下のクラスはプラットフォームで提供しているから使ってもいいよってドキュメントに書いてあります

  • Microsoft.Extensions.Configuration.IConfiguration
  • Microsoft.Azure.WebJobs.Host.Executors.IHostIdProvider

デバッガーで止めてみると色々 (96 個!?) 登録されてるみたいですけど、あんまり登録されてるからって使わない方がいいのかもしれないですね。

image.png

ここまで来たらこっちのもんです、適当に情報設定するためのクラスを定義します。例えば以下のように

publicclassInfo{publicstringName{get;set;}}

そして local.settings.jsonInfo:Nameというキーで適当な値を設定します。

local.settings.json
{"IsEncrypted":false,"Values":{"AzureWebJobsStorage":"UseDevelopmentStorage=true","FUNCTIONS_WORKER_RUNTIME":"dotnet","Info:Name":"Hello world"}}

そして Startup.cs で AddOptionsメソッドで登録します。

Startup.cs
usingFunctionApp2;usingMicrosoft.Azure.Functions.Extensions.DependencyInjection;usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.DependencyInjection;[assembly:FunctionsStartup(typeof(Startup))]namespaceFunctionApp2{publicclassStartup:FunctionsStartup{publicoverridevoidConfigure(IFunctionsHostBuilderbuilder){builder.Services.AddOptions<Info>().Configure<IConfiguration>((info,configuration)=>configuration.Bind("Info",info));}}}

ここまでおぜん立てすると関数で利用できます。例えば、この Info の Name をそのまま返す関数を作るとこんな感じです。

Function1.cs
usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Azure.WebJobs;usingMicrosoft.Azure.WebJobs.Extensions.Http;usingMicrosoft.AspNetCore.Http;usingMicrosoft.Extensions.Logging;usingMicrosoft.Extensions.Options;namespaceFunctionApp2{publicclassFunction1{privatereadonlyIOptions<Info>_info;publicFunction1(IOptions<Info>info){_info=info;}[FunctionName("Function1")]publicasyncTask<IActionResult>Run([HttpTrigger(AuthorizationLevel.Function,"get","post",Route=null)]HttpRequestreq,ILoggerlog){log.LogInformation(_info.Value.Name);returnnewOkObjectResult(_info.Value.Name);}}}

実行してエンドポイントを叩くとこんな感じの結果になります。思った通りですね。

image.png

Azure にデプロイした後は、Function App の構成に Info__Nameのように local.settings.json では :区切りで登録したものを以下のように __区切りで登録します。

image.png

エンドポイントを叩くと以下のようになりました。ちゃんと値が取れてますね。

image.png

いい感じ。


Viewing all articles
Browse latest Browse all 9703

Trending Articles