☕️

ecspresso advent calendar 2020 day 22 - OSS

2020/12/22に公開

Amazon ECS のデプロイツールである ecspresso の利用法をまとめていく ecspresso Advent calendar 22日目です。

ecspresso を支える OSS

ecspresso は Go 言語で実装された OSS です。実装にあたっては Go 言語そのものはもちろん、他にもいくつもの OSS に依存しています。

https://golang.org/

ここでは使用している OSS のライブラリを、普段の感謝を込めて ecspresso 内での使途を含めて紹介します。

go.mod

v1.2.1 の時点の依存が記述されている go.mod ファイルは次のようになっています。

require (
	github.com/Songmu/prompter v0.4.0
	github.com/alecthomas/kingpin v1.3.8-0.20190930021037-0a108b7f5563
	github.com/aws/aws-sdk-go v1.35.35
	github.com/fatih/color v1.9.0
	github.com/fujiwara/tfstate-lookup v0.0.14
	github.com/google/go-cmp v0.5.2
	github.com/kayac/go-config v0.5.0
	github.com/kylelemons/godebug v1.1.0
	github.com/mattn/go-isatty v0.0.12
	github.com/morikuni/aec v1.0.0
	github.com/pkg/errors v0.9.1
	gopkg.in/yaml.v2 v2.3.0
)

ひとつずつ紹介していきます。

github.com/Songmu/prompter

https://github.com/Songmu/prompter

ターミナルにプロンプトを表示するライブラリです。init コマンドでの定義ファイル生成時に既存のファイルがある場合の上書き確認や、delete コマンドで削除対象のサービス名の確認入力を求めるなど、実行中に利用者のインタラクティブな入力が必要な場面で使用しています。

github.com/alecthomas/kingpin

https://github.com/alecthomas/kingpin

コマンドラインの解析ライブラリです。サブコマンド(deploy, rollback など)ごとにコマンドラインオプションを定義して解析できて便利です。

github.com/aws/aws-sdk-go

https://github.com/aws/aws-sdk-go

AWS 公式の SDK、Go 版です。言うまでもなく、これがなければ ecspresso は成立しません。

ECS に限らず AWS の各サービスの機能追加への追従が大変早く、新機能のアナウンスがあった時点で既に最新の SDK でも使える状態になっていることが多いのがありがたいです。

github.com/fatih/color

https://github.com/fatih/color

端末での文字の色付けを行うライブラリです。diff, verify コマンドでの出力に色を付けて、見やすくするために使用しています。

github.com/fujiwara/tfstate-lookup

https://github.com/fujiwara/tfstate-lookup

拙作です。Terraform の State ファイルを検索して値を取り出すライブラリです。

ecspresso で tfstate を読めると便利では、というアイデアが出た際に、ecspresso に限らないユースケースがありそうだということで単体でパッケージ化したものです。

github.com/google/go-cmp

https://github.com/google/go-cmp

複雑な構造を持った値を簡単に比較するためのライブラリです。テストで使用しています。

github.com/kayac/go-config

https://github.com/kayac/go-config

5日目 テンプレート記法 で説明した、設定ファイルと定義ファイルのテンプレート処理を行うためのライブラリです。Go 標準の text/template を使用して、YAML, JSON, TOML の各フォーマットのファイルをテンプレート処理した上で読み込むことができます。

github.com/kylelemons/godebug

https://github.com/kylelemons/godebug

Prettiy printing のためのライブラリです。diff コマンドの出力結果を生成するのに使用しています。

github.com/mattn/go-isatty

https://github.com/mattn/go-isatty

端末上で動作しているかどうかを判別するライブラリです。端末で動作している場合は色付けのデフォルトが on になり、端末でない場合は off になる、という制御に使用しています。

github.com/morikuni/aec

https://github.com/morikuni/aec

端末のエスケープシーケンスを取り扱うためのライブラリです。

deploy コマンドなどで、定期的に更新されていくイベントログを端末上の同一行で表示するために使用しています。

github.com/pkg/errors

https://github.com/pkg/errors

エラーの取り扱いのためのライブラリです。発生した error を上流に伝える際に、呼び出し元の情報を付加するために使用しています。

gopkg.in/yaml.v2

https://gopkg.in/yaml.v2

YAML を扱うライブラリです。appspec コマンドで AppSpec ファイルを YAML 形式で出力するために使用しています。


あらためて、それぞれの OSS の作者とメンテナの皆様に感謝します。ありがとうございます。

23日目は、ecspresso がどのようにして ECS の新機能追加に追従していっているのかを説明します。

https://zenn.dev/fujiwara/articles/ecspresso-20201223

Discussion