ecspresso advent calendar 2020 day 22 - OSS
Amazon ECS のデプロイツールである ecspresso の利用法をまとめていく ecspresso Advent calendar 22日目です。
ecspresso を支える OSS
ecspresso は Go 言語で実装された OSS です。実装にあたっては Go 言語そのものはもちろん、他にもいくつもの OSS に依存しています。
ここでは使用している 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
ターミナルにプロンプトを表示するライブラリです。init
コマンドでの定義ファイル生成時に既存のファイルがある場合の上書き確認や、delete
コマンドで削除対象のサービス名の確認入力を求めるなど、実行中に利用者のインタラクティブな入力が必要な場面で使用しています。
github.com/alecthomas/kingpin
コマンドラインの解析ライブラリです。サブコマンド(deploy
, rollback
など)ごとにコマンドラインオプションを定義して解析できて便利です。
github.com/aws/aws-sdk-go
AWS 公式の SDK、Go 版です。言うまでもなく、これがなければ ecspresso は成立しません。
ECS に限らず AWS の各サービスの機能追加への追従が大変早く、新機能のアナウンスがあった時点で既に最新の SDK でも使える状態になっていることが多いのがありがたいです。
github.com/fatih/color
端末での文字の色付けを行うライブラリです。diff
, verify
コマンドでの出力に色を付けて、見やすくするために使用しています。
github.com/fujiwara/tfstate-lookup
拙作です。Terraform の State ファイルを検索して値を取り出すライブラリです。
ecspresso で tfstate を読めると便利では、というアイデアが出た際に、ecspresso に限らないユースケースがありそうだということで単体でパッケージ化したものです。
github.com/google/go-cmp
複雑な構造を持った値を簡単に比較するためのライブラリです。テストで使用しています。
github.com/kayac/go-config
5日目 テンプレート記法 で説明した、設定ファイルと定義ファイルのテンプレート処理を行うためのライブラリです。Go 標準の text/template を使用して、YAML, JSON, TOML の各フォーマットのファイルをテンプレート処理した上で読み込むことができます。
github.com/kylelemons/godebug
Prettiy printing のためのライブラリです。diff
コマンドの出力結果を生成するのに使用しています。
github.com/mattn/go-isatty
端末上で動作しているかどうかを判別するライブラリです。端末で動作している場合は色付けのデフォルトが on になり、端末でない場合は off になる、という制御に使用しています。
github.com/morikuni/aec
端末のエスケープシーケンスを取り扱うためのライブラリです。
deploy
コマンドなどで、定期的に更新されていくイベントログを端末上の同一行で表示するために使用しています。
github.com/pkg/errors
エラーの取り扱いのためのライブラリです。発生した error
を上流に伝える際に、呼び出し元の情報を付加するために使用しています。
gopkg.in/yaml.v2
YAML を扱うライブラリです。appspec
コマンドで AppSpec ファイルを YAML 形式で出力するために使用しています。
あらためて、それぞれの OSS の作者とメンテナの皆様に感謝します。ありがとうございます。
23日目は、ecspresso がどのようにして ECS の新機能追加に追従していっているのかを説明します。
Discussion