AWSコンテナ入門(1):Amazon ECSとAmazon EKSの役割と概要

2024.06.10
マルチクラウド 基礎 AWS クラウド活用
AWSコンテナ入門(1):Amazon ECSとAmazon EKSの役割と概要

はじめに

皆さん、こんにちは。技術本部の技術戦略推進部に所属している髙橋 洋樹です。今回初めて私のブログを読んでくださる方に向けて、自己紹介をさせてもらいます。私が所属する部署は全社の開発技術力の強化をミッションとしています。私はその中でもパブリッククラウドに関する全社共通基盤の企画・運用、アーキテクトの育成、ガイドラインの策定などを推進しています。これまでにもAWSのノウハウ共有のために、以下のブログを執筆しているので、よろしければ併せてご覧ください。

さて、今回のテーマではAWSコンテナ入門として、Amazon ECS(以下、ECS)とAmazon EKS(以下、EKS)のサービス概要と、シチュエーションごとにどちらを採用するべきなのかという選択の観点をご紹介していきたいと思います。ECSとEKSはサービスとしてよく似ているため、特にコンテナサービスに明るくない方々からは、「どちらを利用すればよいかわからない」という声を耳にします。本ブログでは、あくまで個人的な見解をまとめていますが、理解の一助となれば幸いです。では早速、ECSとEKSの概要についてみていきましょう。

ECSとEKSの役割

AWSにはコンテナ関連のサービスが複数ありますが、各サービスの位置づけを理解する上で忘れてはならないのが、コンテナにおける「コントロールプレーンとデータプレーン」の役割です。

  • コントロールプレーン:コンテナの実行を管理する
  • データプレーン:コンテナを実行する

ここで、AWSのコンテナ関連サービスがそれぞれどちらに該当するのかをマッピングしてみました。

図1:AWSのコンテナ関連サービスの位置づけ
図1:AWSのコンテナ関連サービスの位置づけ

上図から分かるように、ECSとEKSはコントロールプレーンに該当します。つまり、両方ともコンテナの実行を管理するためのサービスであり、仮にECSやEKSを利用しない場合、特に複数台のサーバを束ねてコンテナを実行する際に支障が出ます。例えばECSやEKSがあれば「このクラスタ(複数台のサーバ)でコンテナをX個実行して」というような抽象的な命令でコンテナの実行を指示できます。一方で、ない場合は自身でコンテナを動かしたいサーバを決定し、それぞれのサーバにログインしてコンテナを実行するコマンドを打つ必要があります。非常に手間がかかると容易に想像できるでしょう。

更にコンテナを動かしているサーバに異常が発生した場合、ECSもしくはEKSであれば他の正常なサーバでコンテナを立ち上げてくれますが、これらがないと、その作業を人力で対応する必要があります。ECSとEKSは効率的なコンテナ運用において欠かせないサービスだということがまずは理解できると思います。

図2:コントロールプレーンの役割
図2:コントロールプレーンの役割

Amazon ECSとAmazon EKSの概要

さて、ECSとEKSの位置づけに関する基本的な内容は理解できたと思うので、ここからは各サービスの概要について説明していきます。

Amazon Elastic Container Service(Amazon ECS)

Amazon ECSはAWSが独自に開発した、AWS上でのみ動作するコンテナオーケストレーターです。2014年に発表され、すでに10年が経とうとしています。

参考:Amazon ECSのアイコン
参考:Amazon ECSのアイコン

Amazon ECSは小規模から大規模まで様々な環境に対応している一方、その構成は「タスク」、「タスク定義」、「クラスタ」、「サービス」から成る4つの概念でシンプルに表現できます。

Amazon ECSの主要な4つの構成要素

図3:Amazon ECSの主要な4つの構成要素
図3:Amazon ECSの主要な4つの構成要素

概念 説明
タスク定義 タスクを作成するためのテンプレート。コンテナイメージのURLや希望するリソース量などコンテナの実行に必要な設定を指定する。
タスク タスク定義に基づいて作成された一つ以上のコンテナの集合。タスク内のコンテナは同じインスタンスにデプロイされることが保証される。
サービス タスクの管理を行うリソース。クラスタ内でのタスクの実行個数や、デプロイ戦略、タスクを紐づけるロードバランサなどを指定する。
クラスタ タスクを配置するEC2インスタンスの集合

表1:Amazon ECSの主要な4つの構成要素

表1から分かる通り、ECSはコンテナの実行管理に特化したサービスです。こうした構成要素になる理由の一つとして、AWSに「ビルディングブロック」という考え方が根付いていることがあります。つまり、多種多様なサービスや機能を提供し、組み合わせやすくすることで幅広いニーズに応えられるようにしようという考え方です。これにより、ECSは他のAWSサービスとのインテグレーションが容易で、連携することで足りない機能を実現することができます。

Amazon Elastic Kubernetes Service(Amazon EKS)

Amazon EKSはOSSのコンテナオーケストレーターであるKubernetes(以下、K8s)と互換性を持つフルマネージドなコンテナオーケストレーターです。

参考:Amazon EKSのアイコン
参考:Amazon EKSのアイコン

ECSが発表された2014年、ちょうどGoogleからK8sがOSSとしてリリースされました。K8sの利用が広まるにつれてAWSでもフルマネージドなK8sのニーズが強まり、EKSはそれに応える形で2018年にリリースされました。AWSで複数のコンテナオーケストレーターが利用可能なのはこの名残で、他のクラウドベンダーと比較しても珍しい特長です。

さて、 EKSもといK8sの特長は下記の通り「多機能性」です。

  • K8s互換の環境であれば同じ動作をすることが期待できる。もちろんオンプレミスかクラウドかは問わない。
  • 豊富なリソース表現をもち、プロダクション実行に必要な様々な機能を単独で備えている。さらにCRDを利用すればユーザ自身の独自リソースを定義することも可能。
  • エコシステムが大きくK8s界隈の様々なOSSとの親和性が高い。マニフェストファイルやパッケージマネージャーのHelm等を利用して簡単に構成を再現できる。

多機能であるため、使いこなすためのハードルは高くなりますが、使いこなせれば非常に強力なツールです。

まとめ:ECSとEKSの違い

さて、あくまで私個人の見解にはなりますが、これまで説明してきたことを下表の通りまとめてみました。特に覚えておいていただきたい大きな特長に焦点を当てていますので、まずはここから理解するようにしていきましょう。

ECS EKS
サービス機能 シンプル(コンテナの実行管理に特化) 多機能(高度な実行管理まで可能)
利用環境 AWSのみ オンプレも可能
AWS他製品連携 高い 普通
利用難易度 低い
シンプルなので使いやすい
高い
機能が多く、使いこなすには時間を要するが、習得できれば高性能
こんな人にお勧め コンテナ管理を始められる方 K8sをすでに使っている方

表2:各サービスの違い

おわりに

今回はAWSのコンテナサービスにおけるAmazon ECSとAmazon EKSの位置づけとその概要について説明しました。まずは両者の特徴を理解する手助けになれば嬉しいです。次回はより技術的な視点から、ECSとEKSをそれぞれどのような場面で利用すべきなのか、選択基準について考察していきたいと思います。
ちなみに当社ではAWS包括的技術支援サービスを提供しています。ECSやEKSの使いこなし方についてはもちろんのこと、「そもそもこのシステム構成でコンテナを採用すべきなのか?」といったか設計の部分含めて、何かお困りごとがあればお気軽にこちらからお問い合わせください!

関連ページ

おすすめブログ

今日から始めるAWSのコスト最適化(1)
今日から始めるAWSのコスト最適化(1)
コストの最適化にあたっては、Ⅰ. 可視化、Ⅱ. 最適化、Ⅲ. 計画・予測というプロセスを定常的に実施することが必要だと考えています。今回は「Ⅰ. 可視化」についてどのような方法があるのか、直近のアップデートやベストプラクティスを踏まえながら紹介します。
サーバレス時代の必須技術、AWS Lambdaを知ろう
サーバレス時代の必須技術、AWS Lambdaを知ろう
最近AWS Lambdaの性能が課題となる話をよく耳にしますので、AWS Lambdaを使用しているエンジニアの方に向けて、私自身の学びも含めて共有していきます。今回はAWS Lambdaの基礎について投稿していきます。