マイクロサービス開発ツールであるTyeはYamlファイルで構成を定義します。ファイル名は tye.yaml
です。
今回はこの tye.yaml
のスキーマについて学びます。
tye.yaml
のスキーマはGitHubで管理されており、誰でも閲覧することができます。
https://github.com/dotnet/tye/blob/master/docs/reference/schema.md
Visual Studio Codeで tye.yaml
を書く準備
こちらのドキュメントに沿って環境を整えることで、Visual Studio Codeで tye.yaml
を書く際にインテリセンスが表示されるようになります。
[https://github.com/dotnet/tye/blob/master/src/schema/README.md]
- Visual Studio CodeにYaml拡張機能をインストールする
- Visual Studio Codeの設定画面を起動する (
Ctrl+,
) - 「Yaml: Schemas」の設定を探し、settings.jsonを編集する
-
"yaml.schemas"
にTyeのスキーマファイルを指定する
{
"yaml.schemas": {
"https://raw.githubusercontent.com/dotnet/tye/master/src/schema/tye-schema.json": [
"tye.yaml"
]
}
}
スキーマの定義
過去記事のサンプルアプリケーションで使用している tye.yaml
を例に説明します。
https://github.com/tsubakimoto/project-tye-sample/blob/master/tye.yaml
name: microservice
registry: tsubakimoto
services:
- name: backend
project: backend\backend.csproj
- name: frontend
project: frontend\frontend.csproj
- name: redis
image: redis
bindings:
- port: 6379
connectionString: "${host}:${port}"
- name: redis-cli
image: redis
args: "redis-cli -h redis MONITOR"
name
プロパティ
Tyeでのアプリケーションの名前となります。このプロパティが使われることはほとんどないですが、Kubernetesにデプロイした場合はラベル名に使用されます。
このプロパティが指定されない場合は tye.yaml
のあるディレクトリ名(小文字)が使用されます。
registry
プロパティ
コンテナーレジストリの名前を指定します。DockerHubもしくはAzure Container Registryの名前を指定することができます。
ここで指定したコンテナーレジストリに、イメージやタグがプッシュされます。
namespace
プロパティ
Kubernetesへのデプロイ時に、Kubernetesの名前空間(namespace)として使用されます。
以前のサンプルアプリケーションでは namespace
プロパティを使用していないので、後日検証してみようと思います。
services
プロパティ
アプリケーションを構成するサービスを指定します。少なくとも1つは必要です。
services
プロパティでは以下のプロパティを定義することができます。
name
プロパティ
サービス名となり、DNS名として利用可能な文字種である必要があります。
- 最大63文字
- 英数字または「-」のみ
- 英数字で始まる
- 英数字で終わる
project
プロパティ
.csproj
ファイル、もしくは .fsproj
ファイルのパスを指定します。ファイルパスは tye.yaml
からの相対パスです。
このプロパティに指定されたプロジェクトは、ローカルでのビルドや実行の対象となり、パッケージ化の対象となります。
image
プロパティ
Dockerイメージを使用する場合にイメージ名とタグを指定します。
上記のサンプルの image: redis
は、redis
というイメージの latest
タグとなります。
bindings
プロパティ
ドキュメントには「サービスによって公開されるバインディングのリスト」とあります。
該当のサービスが公開(実行)されるときのプロトコルに関する設定です。
-
port
プロパティ- ポートバインディングに使用するポート番号。
-
connectionString
- サービスにバインドされる接続文字列。参照元のサービス側でどのように解釈されるかはサービスディスカバリという仕組みがあるみたいです。
args
プロパティ
サービスの起動時に使用するコマンドライン引数となります。
他にも https://github.com/dotnet/tye/blob/master/docs/reference/schema.md には、スキーマ定義が記述されているため気になるものは後日検証してみようと思います。