やりたいこと
.NET 9 のタイミングでリリースされた Microsoft.Azure.Functions.Worker 2.0.0 で FunctionsApplication
が追加され、Program.cs
の書き方が少し変わりました。
ローカルで実行する際のシークレットはこれまでユーザーシークレットで管理していたので、同じようにできる方法を確認します。
環境
- Visual Studio Community 2022 Version 17.12.3
- Azure Functions .NET 9 Isolatad
やり方
Program.cs のテンプレート
Visual Studio で Azure Functions プロジェクトを作成したときのテンプレートがこちら。
using Microsoft.Azure.Functions.Worker.Builder;
using Microsoft.Extensions.Hosting;
var builder = FunctionsApplication.CreateBuilder(args);
builder.ConfigureFunctionsWebApplication();
// Application Insights isn't enabled by default. See https://aka.ms/AAt8mw4.
// builder.Services
// .AddApplicationInsightsTelemetryWorkerService()
// .ConfigureFunctionsApplicationInsights();
builder.Build().Run();
以前の HostBuilder
を使う方式よりも ASP.NET Core のように簡潔に記述できます。
コメントアウトされている部分は Application Insights の設定部分なので、今回は説明を割愛します。
ユーザーシークレットファイルの追加
- プロジェクトを右クリック
- ユーザーシークレットの管理(G)
-
secrets.json
にシークレットを追加
secrets.json
{
"Message": "Hello World"
}
ユーザーシークレットをプログラムに追加
Program.cs
に追加して先ほどのユーザーシークレットを読み込み、コンソールに出力してみます。
Program.cs
using Microsoft.Azure.Functions.Worker.Builder;
+ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
var builder = FunctionsApplication.CreateBuilder(args);
builder.ConfigureFunctionsWebApplication();
+
+ builder.Configuration.AddUserSecrets(typeof(Program).Assembly, optional: true, reloadOnChange: false);
+ string message = builder.Configuration["Message"] ?? "failed";
+ Console.WriteLine(message);
// Application Insights isn't enabled by default. See https://aka.ms/AAt8mw4.
// builder.Services
// .AddApplicationInsightsTelemetryWorkerService()
// .ConfigureFunctionsApplicationInsights();
builder.Build().Run();
動作確認
プロジェクトを実行します。
[2024-12-07T02:17:10.101Z] Azure Functions .NET Worker (PID: 25428) initialized in debug mode. Waiting for debugger to attach...
[2024-12-07T02:17:10.103Z] Hello World
ユーザーシークレットから文字列を読み込んで表示できました。
まとめ
非常に簡単に Azure Functions へユーザーシークレットを追加することができました。いい感じです。
参考