OSS な ECS デプロイツール ecspresso に Deep Dive!
brew
でインストール可能。
$ brew install kayac/tap/ecspresso
デモ
$ ecspresso --config config.yaml deploy
ecs-service-def.json, and ecs-task-def.json を作ってデプロイ。
$ ecspresso --config config.yaml diff
diff で AWS とローカル設定の差分を見れる。
$ ecspresso --config config.yaml rollback
で一つ前の定義に戻せる。
なぜ作った?
特徴的な機能
- ECS 側の状態をファイル化することができる
$ ecspresso --config config.yaml init --cluster ecspresso-demo --service nginx-service
- マネコンの状態を引っ張ってファイル(config.yml, ecs-service-def.json, and ecs-task-def.json)にダンプできる
- マネコンとか他のツールで作成した ECS を ecspresso の管理ファイルにジェネレート可能
- カヤックは Terraform で初期構築
- ECS しか触らないので、それ以外には影響はない
CloudFormation 連携機能
- CFn でアウトプットした情報を参照可能
- plugin で設定
- VPC とか SG を CFn でその値を取り込んだりできる
環境ごとに設定を変えたい
- タスク定義の
environment
で可能
作者お気に入りの機能
- 最初 ECS がデプロイできてもなかなか起動しないケース
- Imageがない、ロググループがない、IAMがない、LBがない...などなど
- マネコンだとロググループ勝手にできるけど CLI だと作られない
verify
コマンドでチェックできるdry-run
もあるけど守備範囲は違う
- Imageがない、ロググループがない、IAMがない、LBがない...などなど
scale
台数(タスク数)を変えたいときdeploy
コマンドでもできるけど事故が発生しがちなので作った
refresh
設定を変えないで新しいタスクに入れ替える- Fargate の基盤の更新時にタスクを入れ変えたいときになど利用
run
スタンドアローンなコンテナを一発動かしたいとき--overrides
でタスク定義を上書きして実行
新機能
スケジューリングしたい
ecschedule
を推奨dump
して ecspresso と同じような感覚(inspired by ecspresso.)で利用ができる
これから始める人向けのドキュメント
アドベントカレンダー を本にまとめ直して販売中。
https://zenn.dev/fujiwara/books/ecspresso-handbook
所感
ECS 使いたくて CloudFormation で書いてたけど本当に辛くて、AWS の SA さんに相談したところ「CDK か ecspresso がおすすめ」と言われました。
CDK で実装したところ CFn に比べて非常に簡単で ecspresso は手を付けてない状態でした。
ecspresso を利用すれば、CDK で初期構築したタスクを簡単に変更ができそうなことがわかりましたので、今後運用では活用してみたいと思います。