omuronの備忘録

個人的な備忘録

「OSS な ECS デプロイツール ecspresso に Deep Dive!」 #ContainersFromTheCouch 受講メモ

OSS な ECS デプロイツール ecspresso に Deep Dive!

aws-container.connpass.com

github.com

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

で一つ前の定義に戻せる。

なぜ作った?

  • cliシェルスクリプトで作ったけどやりたいことがいろいろあったのでツール化した
    • 他のツール(Ruby)とかもあったけど慣れてる言語でやりなおした

特徴的な機能

  • 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 で可能
    • テンプレートになっている
    • 環境変数に設定して読み込ませる
      • LOG_LEVEL=info ecspresso --config config.yaml diff
      • must_env にしておけば実行時に指定しなければ即死ぬようになっている
      • デフォルト値を使いたい場合は must_env を消して初期値を yaml に記載する

作者お気に入りの機能

  • 最初 ECS がデプロイできてもなかなか起動しないケース
    • Imageがない、ロググループがない、IAMがない、LBがない...などなど
      • マネコンだとロググループ勝手にできるけど CLI だと作られない
    • verify コマンドでチェックできる
      • dry-run もあるけど守備範囲は違う
  • scale 台数(タスク数)を変えたいとき
    • deploy コマンドでもできるけど事故が発生しがちなので作った
  • refresh 設定を変えないで新しいタスクに入れ替える
    • Fargate の基盤の更新時にタスクを入れ変えたいときになど利用
  • run スタンドアローンなコンテナを一発動かしたいとき
    • --overrides でタスク定義を上書きして実行

新機能

sfujiwara.hatenablog.com

スケジューリングしたい

github.com

  • ecschedule を推奨
    • dump して ecspresso と同じような感覚(inspired by ecspresso.)で利用ができる

これから始める人向けのドキュメント

アドベントカレンダー を本にまとめ直して販売中。
https://zenn.dev/fujiwara/books/ecspresso-handbook

所感

ECS 使いたくて CloudFormation で書いてたけど本当に辛くて、AWS の SA さんに相談したところ「CDK か ecspresso がおすすめ」と言われました。
CDK で実装したところ CFn に比べて非常に簡単で ecspresso は手を付けてない状態でした。
ecspresso を利用すれば、CDK で初期構築したタスクを簡単に変更ができそうなことがわかりましたので、今後運用では活用してみたいと思います。