🌐
Azure App Service の MySQL In App における接続文字列の取得
TL;DR
C# を利用して MySQL In App の接続文字列を取得するときは、以下のように書くこと。
Environment.GetEnvironmentVariable("MYSQLCONNSTR_localdb");
追記
まゆきさんから「MYSQLCONNSTR_
など一部の prefix は特別扱いされているので localdb
だけで読み込めそう」というご指摘コメントをいただきました!感謝 🙏
ハマったこと
謎にハマったので備忘録として残します。Azure Web Apps には MySQL In App という機能があり、ちょこっと MySQL を動かしてみるときに使える機能です。本番運用向けではなく、開発用途向けの機能なので、その点はお間違えの無いよう。
で、この接続文字列を環境変数から取得して DB アクセスをしてみようとしたわけです。
イマドキの C# / .NET における環境変数の取得は Environment.GetEnvironmentVariable
を直接使うのでなく IConfiguration
インターフェースを経由して行います。なのでいつも通りやってみたら null
が返って来たんですね。なんでやん。
実験結果
ASP.NET Core MVC でこんな感じの実験コードを書いて Web Apps にデプロイしてみました。結果は ⬇️ の JSON の通りです。
[HttpGet]
public IActionResult GetConnStr([FromServices] IConfiguration config)
{
var connStr1 = config.GetValue<string>("MYSQLCONNSTR_localdb");
var connStr2 = config.GetConnectionString("MYSQLCONNSTR_localdb");
var connStr3 = Environment.GetEnvironmentVariable("MYSQLCONNSTR_localdb");
var obj = new { connStr1, connStr2, connStr3 };
return this.Ok(obj);
}
{
"connStr1": null,
"connStr2": null,
"connStr3": "Database=localdb;Data Source=127.0.0.1:49580;User Id=azure;Password=6#vWHD_$"
}
基本的に起動時に環境変数は全て IConfiguration
に読み込まれているはずなんですが、何かが起こっているのやら。Kudu を眺めたり、ASP.NET Core の起動処理を眺めたり、アレコレ調べてみたんですが、パッとは答えには辿り着けませんでした。まぁ MySQL In App を使って本番運用することもないし、ただの遊びの一環だったので目を瞑りましょう。全然納得できないけど。
Discussion
MYSQLCONNSTR_
など一部は特別扱いされているので単に ConnectionString としてlocaldb
でとってこれるのではという気がします。うわー、こんな実装あったんですね!確かに
localdb
だけで読み込めそうな気がしました。素晴らしい指摘をありがとうございます 🙏