前回の記事で 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 に記述した環境変数が優先されるため、アプリケーションソースコードで定義している環境変数をデプロイから上書きしたいときが考えられます。
たとえば一時的にログレベルを変更したいときなどの場面が想定できますね。