前回の記事で Tye で実行したサービスのなかで、環境変数にアクセスするための仕組みを紹介しました。
今回は Tye の仕組みのなかで環境変数を設定する方法を調べたので紹介します。
環境変数は tye.yaml に定義する
Tye を実行した際にサービスに対して環境変数を設定したい場合は tye.yaml
に定義します。
リファレンスはこのあたりです。
https://github.com/dotnet/tye/blob/master/docs/reference/schema.md#environment-variables
services
に定義されたサービスのなかで環境変数を設定したいサービスのブロックに env
を書きます。
name: microservice registry: tsubakimoto services: - name: backend project: backend\backend.csproj - name: frontend project: frontend\frontend.csproj env: - name: YOUR_NAME value: "YUTA in YAML" - name: redis image: redis bindings: - port: 6379 connectionString: "${host}:${port}" - name: redis-cli image: redis args: "redis-cli -h redis MONITOR"
試しにトップページに YOUR_NAME
という環境変数の値を表示するようにしておきます。
(中略) @inject Microsoft.Extensions.Configuration.IConfiguration configuration (中略) <div class="text-center"> <h1 class="display-4">Welcome @configuration["YOUR_NAME"]</h1> <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p> </div>
上記の tye.yaml
の状態で tye run
を実行すると設定した値がきちんと表示されます。
同一の環境変数は appsettings.json と tye.yaml のどちらが優先されるか?
ASP.NET Core で環境変数を定義する場合、通常は appsettings.json
もしくは appsettings.{環境名}.json
に書くと思います。
appsettings.json
と tye.yaml
はどちらが優先されるのかを調べてみました。
結論としては appsettings.json
< appsettings.{環境名}.json
< tye.yaml
という優先順位になりました。
Azure App Service のアプリケーション設定と同じですね。
どういうときに使う?
前述の通り tye.yaml
に記述した環境変数が優先されるため、アプリケーションソースコードで定義している環境変数をデプロイから上書きしたいときが考えられます。
たとえば一時的にログレベルを変更したいときなどの場面が想定できますね。