ECS・EKS・EC2・Fargateとは?
こんにちは、iCAREサーバーサイドエンジニアの寺井(@krpk1900_dev)です。
私は普段RailsとGraphQLを用いたサーバーサイドの開発を担当しています。
私自身がエンジニアとしてまだ経験が浅いことや、iCAREではSREチームの方がインフラ周りを専任で担当してくださっており、インフラ領域の知識を理解し切れていなくてもサーバーサイドの開発をこれまで進めることができたことが理由で、私は今までAWSやCI/CD、Dockerなどの勉強がおろそかになっていました。
今後はインフラ領域の学習も意識的に進めていかなければと思い、今回はコンテナに関連したAWSサービスについて調べてみました。
※現在CarelyではECSやEKS、Fargateは使用していません。
※上記のように、この記事はインフラに精通していない自分が初めて調べてみた記録の記事です。
コントロールプレーンとデータプレーン
まず現在AWSで提供されているコンテナサービスは大きく2種類に分類することができるようです。
(図の作成にはhttps://dev.classmethod.jp/articles/cmdevio2019-container/を参考にさせていただきました。)
コントロールプレーンとデータプレーンとは、以下のような役割を担っています。
コントロールプレーン
- コンテナを管理する機能。
- 現在は「AWS ECS」と「AWS EKS」の2種類がある。
データプレーン
- コンテナが稼働するサーバ。
- 現在は「AWS EC2」と「AWS Fargate」の2種類がある。
コントロールプレーンであるECSとEKS
それでは、現在コントロールプレーンとして選択できるECSとEKSはそれぞれどんな特徴を持っているのでしょうか?
ECS(Elastic Container Service)
- クラウド上で稼働させるコンテナを管理するためのサービス。
- コンテナ実行環境のインストールやデプロイ環境の構築、オートスケーリングなどをAWS側で担ってくれる。
EKS(Elastic Kubernetes Service)
- AWS上でKubernetes を簡単に実行できるようにするためのサービス。
- ECSと比較すると、豊富な機能でより高度な運用が可能である。
- OSSであるKubernetesをAWS上で実行できるようにしたサービスであるため、他のAWSサービスとの親和性はECSの方が高い。
- 一方、Kubernetes用に開発されたツールを使用することが可能である。
ちなみにEKSで出てきたKubernetesは以下の特徴を持っています。
Kubernetes
- コンテナにはアプリケーションを実行する機能はあるが、コンテナを管理したり他のコンテナと連携させたりする機能はない。
- この連携できないという課題を解決し、ネットワークやストレージなどの連携管理を可能にしてくれる。
どんなときにECSとEKSのどちらを選択すれば良いかは、以下のメリット/デメリットに基づいて決めるのが良さそうです。
ECSを選択したときとEKSを選択したときの違い
ECSを選択した場合EKSと比較して、
- IAM制御や監視、ログ、デプロイなど、他のAWSサービスとの連携がスムーズである。
EKSを選択した場合ECSと比較して、
- 自由度が高くより高度な運用が可能である。
- Kubernetes用に開発されたツールを使用することができる。
現在AWSはfirst choiceとしてECSを推奨しているようです。
データプレーンであるEC2とFargate
次は、データプレーンとして選択できるEC2とFargateはそれぞれどんな特徴を持っているのでしょうか?
EC2(Elastic Compute Cloud)
- クラウド上に仮想サーバを構築するためのサービス。
- EC2上で稼働するサーバをEC2インスタンスと呼ぶ。
- OSや利用するプロダクト、バージョンなどの管理の自由度が高い。
Fargate
- インスタンスの運用管理なしにコンテナを実行するためのサービス。
- 自由度が低い一方でAWS側が多くを管理してくれるため、管理しなければいけない項目が少なくて楽。
どんなときにEC2とFargateのどちらを選択すれば良いかは、以下のメリット/デメリットに基づいて決めるのが良さそうです。
EC2を選択したときとFargateを選択したときの違い
EC2を選択した場合Fargateと比較して、
- OSやミドルウェアへのパッチ適用などを行う必要がある
Fargateを選択した場合EC2と比較して、
- インスタンスタイプの設定やオートスケーリングの設定、クラスタの管理はAWSが担ってくれる。
- GPUインスタンスなどのリソース最適化されたEC2インスタンスが使用できない。
現在AWSはfirst choiceとしてFargateを推奨しているようです。
感想
今回はECS・EKS・EC2・Fargateの特徴について調べてみました。
現状は、よく分からなかったり特にこだわりがない人であればまず一番最初にECS × Fargateという選択肢を検討するのが良さそうでした。
Carelyでもコンテナ化を検討するフェーズが来たときに自分の考えをしっかり持てるように、今後も意識的にインフラ領域の学習を進めていきたいと思います。
※以下のサイトを参考にさせていただきました。
https://dev.classmethod.jp/articles/cmdevio2019-container/