AWS ECSについて改めてまとめてみた
はじめに
Amazon ECSを利用する際に各要素の役割が分からなくなることはないですか?
さらに、毎回調べてもその都度迷子になることはありませんか?
私は3度経験しています。。。
という事で、改めて各要素を整理して、自分なりに設計時の参考に出来るように残しておきます。
ぜひ、もっと良い(正しい)理解をフィードバックしてもらえると嬉しいです。
Amazon ECSとは
そもそもECSとはというところから抑えなおしたいと思います。
ECSとは、AWSが提供するマネージドコンテナオーケストレーションサービスです。つまり、コンテナアプリケーションを実行し、管理・スケーリングをサービス側で実施してくれるサービスです。
よく似たコンテナオーケストレーションツールとしては、kubanatesが有名かと思います。
ホワイトペーパーはこちら
クラスターとは
クラスターとは後述するタスクやサービスをまとめた論理グループです。
クラスターは論理的な名前空間というイメージですが、実行基盤を抽象化したものにすぎません。
このクラスターをどこで動かすか(どう管理するか)を、Amazon EC2
か AWS Fargate
から選択できます。
EC2上で実行する場合は、OS上の設定も管理可能になるので、よりカスタマイズが出来る反面、運用コストとしては増加するとされています。
Fargate上で実行する場合は、OS上の管理が不要となる代わりに、個別のカスタマイズは出来なくなり、運用コストは下がるとされています。
また、ECSをFargate上で実行する場合に限り、特定のVPCに所属させずにサーバレスとして利用できます。
※運用コストの部分は使い方や状況によって異なるので一概には言えませんが、一般的にOS管理からの脱却が潮流となっている今の時代にはFargateの利用も多い印象です。
サービスとは
サービスとはタスクを管理するグループです。
どのタスクをどのクラスターでどれだけ起動するかという設定がサービス定義となります。
サービス定義から見てタスク定義は1つだけしか設定出来ません。docker-composeをどのホストで実行するか制御しているようなイメージでしょうか。
サービス定義で設定できるパラメータはこちらで確認出来ます。
タスクとは
実際に稼働するコンテナのセットです。docker-composeのようなものです。
一つのタスク定義に複数コンテナも定義することが可能で、定義する内容は起動するイメージ・実行環境(EC2orFargate)・割当メモリ・割当CPUとなっています。
さらに、タスク定義はサービスと独立して定義可能なため、複数のサービス定義から呼び出すことができます。
詳細はこちらです。
まとめ
全体をまとめると、
- クラスターを定義
コンテナ実行ホストの名前空間を決める - タスク定義で起動したいコンテナセットを定義
コンテナイメージ・実行環境・メモリ・CPUを決める - サービス定義で実行ホストを定義
タスク定義・ネットワーク定義・実行ホストを決める
記事を書くきかっけとなった、コンテナイメージがユーザーごとに違う場合どのように構成すればよいのかという疑問に関しては、
現時点ではクラスターは1つ、サービス定義から個別に作成するのが良いのかなという結論です。
なんとなく理解しているものでも、アウトプットするのは非常に難しいですね。。
今後もいろんな記事を書いていきたいと思います。
Discussion