先端融合技術研究所ソーシャルデジタルツインPJのkunikawaです。
私達のPJは、社会課題を解決するデジタルツインの研究開発を行っています。 社会課題を解決するため、継続的に素早く研究成果を展開することを重視しており、 研究開発のクラウドネイティブ化を推進しています。 今回は、クラウドネイティブ化の推進の一環として、コンテナオーケストレーションのマネージドサービスについて、Amazon Elastic Container Service(ECS)を類似サービスのAmazon Elastic Kubernetes Service (EKS)と比較する形で調査しました。
AWSのコンテナサービスを利用した開発運用の流れ
初めに、AWSのコンテナサービスを利用した時の、開発運用の流れを示します。
インフラ側の開発運用は、クラスタの生成からクラスタの終了までのクラスタ運用があります。 アプリ側の開発運用は、アプリの開発の他に、構成管理(コードによるコンテナ環境定義)とDeployとスケーリング/ヒーリング、監視が存在します。
これらの内、ユーザがECSかEKSを検討する部分は、クラスタ運用、構成管理になります。 今回は、ECSとEKSにて、違いが生じるクラスタ運用、構成管理について説明したいと思います。
クラスタ運用管理
両サービスのクラスタの特性を確認するため、生成時のオプションの違いに注目します*1 *2。
共通事項は、青文字で記載されています。
ECSは、必須項目がないことが分かります(クラスタ名もオプションになります。)。 ECSは、シンプルな環境を検討事項を少なく作成するのに向くオプション体系となっています。
一方で、EKSの方が設定項目が多いことが分かります。 また、必須項目ではないですが、Kubernetesのバージョンがオプションとして存在します。 Kubernetesは、進化が早く3カ月毎に、リリースされ、各版は12カ月のみサポートされます。 そのため、利用可能な最新版にタイムリーに更新されることが推奨されています。 EKSは、詳細な設定まで実施したい場合に向くオプション体系となっています。
構成管理
ECS上のサービスは、様々なAWSサービスの組み合わせで、実現されます。 これは、ECS自体は、コンテナのオーケストレーションしかしないためです。 具体的には、Load Balancerなどは、ALBをインテグレーションする必要があります。 これに関しては、AWS CopilotなどのECS環境全体を構築する方法を取ることも可能ですが、Copilotは、細かい設定が出来ないため、要件と上手く合致する時のみ有効な方法になります。 そのため、構成管理として、各サービスを考慮したCloudFormation、Terraformなどでコード管理することになります。
EKS上のサービスは、Kubernetes上のコンポーネントで実現されます。 そのため、構成管理は、Kubernetesに対するyamlファイルのみのコード管理となります。 また、Kubernetesには、Helmなどのパッケージマネージャーが存在するため、ユーザがyamlを書かなくても良い場合があります。
その他の考慮点として、サービスメッシュの導入のラーニングコストとクラスタ内の論理分割が可能か否かがあります。
- サービスメッシュ
EKSの場合、Kubernetesでサービスメッシュの導入されている事例があるため、参考にする事例が多いと思います。一方で、ECSの場合、AWS App Meshというサービスが存在しますが、現時点では実績が多くないと考えています。 - クラスタ内の論理分割が可能か否か
EKSは、Namespaceにより、論理的に分割可能です。 一方、ECSは、論理的に分割出来ません。 クラスタ内で論理分割出来ると、マイクロサービス化の際に、各マイクロサービス毎に自律的な運用を実現したり、1クラスタ内で複数の環境を持つことが出来ます。
ECSとEKSに適した要件
今まで説明してきたことをまとめると、以下になります。
ECSは、シンプルな環境を手軽に構築することに向いています。 一方、EKSは、複雑な環境を多工数で構築することに向いています。 しかしながら、AWSとOSSで得意な方で、それぞれ上図の矢印方向に範囲が拡大されます。 そのため、現在のPJにECSとEKSの知見がどれぐらいあるかなども考慮して決めることになります。
まとめ
今回は、ECSとEKSの違いを、クラスタ運用と構成管理の観点で、簡単ではありますが、紹介させて頂きました。本記事が何らかの役に立てば幸いです。
*1:AWS CLI Command Reference ECS https://docs.aws.amazon.com/cli/latest/reference/ecs/create-cluster.html
*2:AWS CLI Command Reference EKS https://docs.aws.amazon.com/cli/latest/reference/eks/create-cluster.html