All Articles

ECS on Fargate のデプロイツールを調べてみた【ver2022】

ECS on Fargate は AWS のアプリケーション実行環境として近年定番の選択肢です。 そんな ECS on Fargate について、Infrastructure as Code や CI/CD などを含めて環境を整えようとすると、何かしらのツールが必要になります。

2020 年時点の情報としては AWS Dev Day Japan の「第2回 AWS Fargate かんたんデプロイ選手権」という資料があり、ECS on Fargate のデプロイツールを比較するうえでとても参考になるのですが、AWS のアップデートはとても早いです。

2022 年 12 月の時点で ECS on Fargate のデプロイツールをいくつか試してみたので、得られた知見をまとめておきます。

調査したツール

今回 ECS on Fargate のデプロイツールを調査した理由は、実際に ECS on Fargate で本番環境を構築するためです。

その際前提として、「CPU・メモリの割り当てや環境変数といったタスクの基本的な設定は、AWS の知識が豊富ではないアプリケーションエンジニアが変更できる」ようにしたかったので、その条件を満たしてくれそうなツールを中心に調査しました。

候補として、以下の 3 つのツールにしぼって、実際にさわって検証してみました。

  • Docker Compose ECS Integration
  • AWS Copilot CLI
  • ecspresso

Docker Compose ECS Integration

公式ドキュメント: https://docs.docker.com/cloud/ecs-integration/

概要

Docker Compose の ECS 統合機能は、2020 年 11 月に GA されました。

基本的な設定ファイルの書き方は Docker Compose と同じで、一部 ECS 特有の設定を書いて docker-compose up -d するだけで ECS にコンテナをデプロイできます。1

良かった点

実際にさわってみた所感として、たしかに Docker Compose の延長で使うことができるため、とっかかりの学習コストが非常に低く、とても素晴らしいツールだと思いました

そして、ドキュメントがとても分かりやすく、試してみるのも簡単でした

また、docker-compose.yaml ファイルをもとに CloudFormation のテンプレートが生成されるのですが、その CloudFormation のテンプレートを一部調整可能な機能 もあります。 この機能によってある程度のカスタマイズ性もあります

弱点

しかし、ECS でのコンテナへの機密情報の受け渡しによく使われる、「パラメータストアから取得した値を環境変数に設定する」という機能がサポートされておらず、採用は断念しました2

また、GitHub リポジトリ を見てみると、最近はあまり力を入れて開発されていないようで、今後積極的に採用するのは難しそうかもしれないと感じました

代替ツールとして、ECS Compose-X というものを開発している方もいるようでした。

AWS Copilot CLI

公式サイト: https://aws.github.io/copilot-cli/ja/

続けて、AWS Copilot CLI についてです。 (Copilot と言うと GitHub Copilot を想像する方が多いと思うので、略さずに AWS Copilot CLI と書くことにします。)

概要

AWS Copilot CLI も Docker Compose ECS Integration と同じく 2020 年 11 月に GA されたツールで、こちらは AWS 公式が提供しています。

設定ファイルは AWS Copilot CLI 独自の書き方となります。

良かった点

GA よりも半年ほど前、最初に公開された時点で少しさわってみたとき は、簡単にデプロイできるものの、不足している機能がかなり多いという印象でした。 しかし、2022 年時点では、ECS on Fargate のデプロイツールとして、かなりおすすめできるものになっていました。

最小限の設定で ECS on Fargate の環境を CI/CD 含め構築することができ、環境変数やオートスケーリングなど、よくある各種設定が簡単に可能です

2022 年 12 月現在、Infrastructure as Code や CI/CD が整った、ある程度しっかりした ECS on Fargate の環境を構築したい場合、AWS Copilot CLI を使うのが一番簡単だと思います

少し調べてみた範囲でも、最近は導入事例もかなり多いようでした。

弱点

AWS Copilot CLI の弱点だと思ったのは、学習コストが高めなことです。 しっかり理解して使おうとすると、ECS の基礎知識に加えて、AWS Copilot CLI 特有の概念もキャッチアップする必要があります。 (少しクセがあるなと感じました)

AWS Copilot CLI は ECS などを「抽象的に扱えるツール」のように言われることがありますが、自分がさわった感想としては「ECS を抽象的に扱えるツールというよりも、ECS の設定をおおよそ理解したうえで、少ない記述量で使えるツール」という印象でした。

そして、こういったツールにはよくあることですが、一部の設定は細かく調整できなかったりします。 自分の場合だと、ALB の設定の細かい調整が難しかったという理由で、今回は採用を見送ることになりました。

ecspresso

公式リポジトリ: https://github.com/kayac/ecspresso

概要

ecspresso は、面白法人カヤックさんが提供している、ECS のデプロイツールです。

ECS の薄いラッパーのようなツールとなっています。

良かった点

ecspresso をさわってみた感想としては、学習コストが低く、とにかく使いやすかったです。 デプロイだけでなく、ログの表示や ECS Exec などもサポートされており、aws cli では不便な点を解決してくれている素晴らしいツールだと思いました

タスク定義やサービスの設定は、むやみに抽象化されていないため自由度が高く、様々な場面で使えると思います

そして、Terraform と組み合わせて使うことが想定されており、設定ファイルから tfstate を参照することができ、とても便利です

開発も積極的に行われていて、最近 v2 がリリースされています。

弱点

ecspress は、ECS のサービス・タスク定義の管理に特化したツールであり、VPC・ALB・IAM Role など、タスク定義やサービスから紐付ける先のリソースは、別途作成する必要があります。 そのあたりを Infrastructure as Code したいのであれば、Terraform などと組み合わせて使うことになります

なので、何もない状態から Infrastructure as Code や CI/CD がある程度整った環境を作ろうとすると、実装コストはある程度かかります

そして、ecspresso 自体が実質的に 1 名で開発されているので、場合によっては不安を感じるかもしれません

(と言いつつ、今回は ecspresso を使わせていただくことにしました!)

その他

その他、ECS on Fargate のデプロイツールとして、

  • ecs-deploy
  • CDK

の 2 つは、状況によっては良さそうだと思いました。

ecs-deploy は、簡易的なツールで十分な場面であれば、良い選択肢になりそうです。 ですが、Infrastructure as Code したいとなったりすると、Terraform などでたくさんコードを書くことになりそうです。

CDK は、ある程度の AWS の知識が前提になりそうなので、今回私の状況には適さない気がしてあまり深く調べませんでした。 ただ、AWS の知識がある程度あるメンバーが使う前提なら、かなり良さそうな気もしています。

まとめ

以上、ECS on Fargate のデプロイツールを調べて得られた知見を書いてきました。

まとめると、以下のようになります。

  • Docker Compose ECS Integration … 開発状況を踏まえると、採用は難しそう
  • AWS Copilot CLI … ある程度整った環境を一番サクッと作れる。少しクセがある
  • ecspresso … とにかく使いやすい。周辺リソースを作る手間はかかる

CDK に感じた良さそうな雰囲気も、実際どうなのか遠くないうちにさわってみたいと思います。


  1. 設定内容によっては、-d オプションをつけないとエラーになります (https://github.com/docker/compose-cli/issues/2086)

  2. CloudFormation のテンプレートを調整する機能を使っても、容易には実現できませんでした