[.NET Core] コンソールアプリケーションで Secret Manager を使う方法
こんにちは。最近、 オタマトーン を購入した k-so16 です。ヴァイオリンやチェロなどの弦楽器同様フレットがないので、正確に音階を鳴らすのもなかなか難しいです(笑)
C# でコンソールアプリケーションからデータベースにアクセスするには、 ASP.NET Core 同様に DbContext
クラス経由で実現できます。その際には接続文字列が必要になりますが、 Git などでバージョン管理することを考えると、直接ソースコードに書くのではなく、 Secret Manager から参照したいところです。
本記事では、コンソールアプリケーションから Secret Manager を利用する方法を紹介します。
本記事で想定する読者層は以下の通りです。
- Secret Manager について基礎知識を有している
シークレットの読み込み
ASP.NET Core では自動的に Secret Manager が利用できるように設定されるので、自前で設定を記述する必要はありません。一方、コンソールアプリケーションで Secret Manager を扱う場合には、 Configuration
クラスの AddUserSecrets<T>()
を自前で実行する必要があります。
コンソールアプリケーションでシークレットを読み込む手順は以下の通りです。
ConfigurationBuilder
のインスタンスを生成AddUserSecrets<T>()
を実行Build()
でConfiguration
のインスタンスを返却
Main()
を含むクラス Program
においてシークレットを読み込むプログラム例は以下の通りです。
class Program
{
static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.AddUserSecrets<Program>()
.Build();
}
}
シークレットの参照
読み込んだシークレットを参照するためには、上記の手順で取得した Configuration
のインスタンスを用いて、 GetValue()
などの設定値を取得するメソッドを実行します。 Secret Manager から 接続文字列として読み込む 場合は、 GetConnectionString()
が利用できます。
接続文字列をシークレットから取得するプログラム例は以下の通りです。
class Program
{
static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.AddUserSecrets<Program>()
.Build();
var connectionString = configuration.GetConnectionString("ConnectionString");
}
}
コンソールアプリケーションで Secret Manager を利用する方法について、以下のページを参考にしました。
How to get ‘Manage User Secrets’ in a .NET Core console-application? - Stack Overflow
まとめ
本記事のまとめは以下の通りです。
- Secret Manager のシークレットを読み込むためには
AddUserSecrets<T>()
を利用 - Secret Manager のシークレットを参照するためには
GetValue()
を利用- 接続文字列として読み込む場合は
GetConnectionString()
が利用可能
- 接続文字列として読み込む場合は
以上、 k-so16 でした。 ASP.NET Core の知識をコンソールアプリケーションにも利用できるのは便利ですね。