【AWS】Fargateって何?ECSの基本を理解しよう!

今回はこのような質問をいただきました。

ECSのクラスターって何?
Fargateって何?
ECSでFargateを使うのが一般的になり始めてから、よくわからないままECSでFargateを使っているという人をよく見かけます。
そこで今回はこちらの質問について解説していきます!
概要
クラスターとかサービスとかタスク定義とか色々あるけど何がなんだかわからないって人向け。
ECSを使う上でよく出てくる名前の解説をしていきます。
そもそもECSって何?
まずはECSについて解説しておきます。
公式では以下のように解説されています。
Amazon Elastic Container Service (Amazon ECS) は、クラスターでコンテナを簡単に実行、停止、管理できる非常にスケーラブルで高速なコンテナ管理サービスです。
ECSを使わない場合はEC2を使うことになると思いますが、この場合はDockerをインストールしたり、複雑なデプロイ環境を用意したり、オートスケーリングのこと考えたり、いろいろと面倒です。
これらを簡潔にまとめてくれたのがECSになります。
AWS上でコンテナ実行するなら基本的にはこれ。
簡単なシステムだったら最近発表されたApp Runnerを使うのも良いかも?
クラスター
クラスターはEC2インスタンスの集合体です。
コンテナを実行するためにはインスタンスが必要ですね。
必要なスペック、台数のEC2を作成してクラスターに登録しておきます。
また、ネットワーキングの設定もここで行います。
どのVPCのどのサブネットでコンテナを実行するかの設定になります。
Fargate
ECS用にEC2インスタンスをたてたらEC2も管理する必要がありますよね。
でもせっかくECSなんだからコンテナのことだけを考えたい。
そこで開発されたのがFargateになります。
AWS Fargate は、Amazon ECS とともに使用して Amazon EC2 インスタンスでサーバーまたはクラスターを管理する必要なくコンテナを実行できるテクノロジーです。Fargate を使用すると、コンテナを実行するために仮想マシンのクラスターをプロビジョニング、設定、スケールする必要がありません。これにより、サーバータイプの選択、クラスターをスケールするタイミングの決定、クラスターのパッキングの最適化を行う必要がなくなります。
要するにクラスターにEC2インスタンスを登録しなくてもコンテナを実行できるものです。
馴染み深い言葉で表すとサーバーレスってやつです。
最近はFargateを使う場合がほとんどで、クラスターがメインの役割(EC2インスタンスの集合体)を担っていないのでクラスターのイメージがしにくいんですよね。
Fargateを使う場合、クラスターはネットワーキングのみを管理しています。
ただ、Fargateには以下のようなデメリットもあるので場合によってはEC2を利用したほうが良い場面もあります。
- SSHできない
- IPを固定できない
EXTERNAL
最近、EC2, Fargateと並んでEXTERNALという起動タイプが追加されました。
こちらはECSでオンプレミスのサーバーを利用したい場合に利用します。
使う機会は滅多に無いと思います。
タスク定義
タスク定義はどのようにコンテナを実行するかを定義します。
やってることはdocker-compose.ymlと同じです。
主に以下の項目を設定します。
- タスクサイズ(スペック)
- メモリ
- CPU
- コンテナの定義
- イメージ
- ポート
- 環境変数
サービス
サービスはクラスターとタスク定義を紐付けるものです。
どのクラスターで、どのタスク定義のタスクを実行するか定義します。
主に以下の項目を設定します。
- 起動タイプ
- FARGATE
- EC2
- EXTERNAL
- タスク定義
- クラスター
- タスク数
- 最小ヘルス率
- デフォルト:100
- 最大率
- デフォルト:200
- Auto Scaling
あとがき
バッチの場合はサービスが存在しません。
サービスの役割はCloudWatch Events(現在はEventBridge)が担ってくれています。
各項目の役割をイメージできればかなり使いやすくなると思います。
参考
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/Welcome.html
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/what-is-fargate.html