結論
- 下記「背景」のようなケースの場合は、ecspressoまたは類似ツールを使ったほうが事故は少ない
- コンテナやAWSやっていき勢、PoCなど速度が必要なケースはAWS Copilotを使ってみて慣れていくのはアリ
- というより、双方のツールは目指すところが全然違うので比較対象として論じること自体にちょっと無理がある
前提
本稿で記載している「ECS」は「ECS on Fargate」であり、「ECS on EC2」ではありません。
双方のツールを軽く触れて書いた記事なので、細かい機能について把握していないものもあると思います。
背景
これまでいくつかのAWSを使用したプロジェクトのインフラ管理にTerraformをオールインワンツールとして採用してきました。
しかし、システムの規模が大きくなるにつれてTerraformではどうしても取り回しの鈍さが出てくるケースが増えてきたため、アプリケーションレベルのデプロイコントロールはECSに特化したCLIに乗り換えたほうが良いのでは…と思い至り、調査した結果を記事にしました。
ECSとは
ECS is 何?という方は、AWSの中の人として大人気なトリ先生のスライドを見るといいです。
https://pages.awscloud.com/rs/112-TZM-766/images/A-1.pdf
※本稿では触れないCLIツールも上記スライド内でPros/Consが紹介されています
AWS Copilotとは
AWS ECS CLIの後継サービスでAWS謹製。
デフォルトでモダンかつプロダクションレディなインフラ構築をサポートしてくれるらしい。
リポジトリ
特徴
- VPC、サブネット、ロードバランサー、デプロイパイプライン、ストレージなどのクラウドリソースを管理できる
- 上記の細かい設定はデフォルトでいい感じになっているらしい
- 生きたOSSプロジェクトなので気になる点はIssueやPRを出せる
- 単一バイナリ
- 本番や開発など環境ごとの設定をマニフェストファイルとしてYAMLで管理できる
- Dockerfileだけあればアプリケーションを最低限実行するために必要なものをインタラクティブにデプロイしてくれる
- ECS Service Discoveryを比較的簡単に使用できる
- 内部的にCloudFormationのコードを生成しているためAWSに関する対応が幅広い
- サイドカー構成は現時点では事前定義された構成(FireLens)しか使用できなさそう
- 既存のリソースはVPC周りしかインポートできなさそう
- リポジトリにWikiはあるが、限定的な情報しか書いてないので使うなら手探りになりそう
ecspressoとは
面白法人カヤック社が開発したECSデプロイツール。
飲み物の「エスプレッソ」からもじったとのこと。
ECSサービスやECSタスクのコントロールに特化しているため、AWS CLIなどを使って頑張るより手軽にデプロイ操作をコントロールできる。
いくつかのCI/CDツールとの親和性もあるため、CI/CD自動化にも組み込みやすく、小規模なサービスならこれだけで事足りるケースも多い。
利用者も一定数いるため、初期導入についてはググれば十分な情報を得ることができる。
リポジトリ
特徴
- タスク定義を含めて開発用リポジトリで管理できる
- みんな大好きGolang製
- 生きたOSSプロジェクトなので気になる点はIssueやPRを出せる
- 単一バイナリ
- サイドカー構成のデプロイも可能
- go-configと併用すると環境変数の展開もできる
- ツールで出来ることが限定されているので開発者が軽い気持ちで使っても大事故が起こりにくい
比較一覧表
No | 項目 | AWS Copilot | ecspresso |
---|---|---|---|
1 | ALBの作成 | ○ | ☓ |
1 | NLBの作成 | ☓ | ☓ |
1 | ECSクラスターの作成 | ○ | ☓ |
1 | ECSサービスの作成 | ○ | ○ |
1 | ECSタスク定義の作成 | ○ | ○ |
1 | ECSタスクのスケーリング操作 | ○ | ○ |
1 | ECSタスクのロールバック | ☓ | ○ |
1 | Fargate Spot | ☓ | ○ |
1 | Blue/Green Deploy対応 | ? | ○ |
1 | サイドカーのデプロイ | △ | ○ |
1 | brew install | ○ | ○ |
1 | Task Execution IAM Roleの管理 | ○ | ☓ |
1 | Task IAM Roleの管理 | ○ | ☓ |
1 | DRY RUN | ☓ | ○ |
1 | YAML | ○ | ○ |
1 | Github Actions連携 | ☓ | ○ |
1 | Circle CI連携 | ☓ | ○ |
1 | Codeシリーズ連携 | ○ | ○ |