皆さん、こんにちは。技術本部の技術戦略推進部に所属している髙橋 洋樹です。今回初めて私のブログを読んでくださる方に向けて、自己紹介をさせてもらいます。私が所属する部署は全社の開発技術力の強化をミッションとしています。私はその中でもパブリッククラウドに関する全社共通基盤の企画・運用、アーキテクトの育成、ガイドラインの策定などを推進しています。これまでにもAWSのノウハウ共有のために、以下のブログを執筆しているので、よろしければ併せてご覧ください。
さて、今回のテーマではAWSコンテナ入門として、Amazon ECS(以下、ECS)とAmazon EKS(以下、EKS)のサービス概要と、シチュエーションごとにどちらを採用するべきなのかという選択の観点をご紹介していきたいと思います。ECSとEKSはサービスとしてよく似ているため、特にコンテナサービスに明るくない方々からは、「どちらを利用すればよいかわからない」という声を耳にします。本ブログでは、あくまで個人的な見解をまとめていますが、理解の一助となれば幸いです。では早速、ECSとEKSの概要についてみていきましょう。
AWSにはコンテナ関連のサービスが複数ありますが、各サービスの位置づけを理解する上で忘れてはならないのが、コンテナにおける「コントロールプレーンとデータプレーン」の役割です。
ここで、AWSのコンテナ関連サービスがそれぞれどちらに該当するのかをマッピングしてみました。
図1:AWSのコンテナ関連サービスの位置づけ
上図から分かるように、ECSとEKSはコントロールプレーンに該当します。つまり、両方ともコンテナの実行を管理するためのサービスであり、仮にECSやEKSを利用しない場合、特に複数台のサーバを束ねてコンテナを実行する際に支障が出ます。例えばECSやEKSがあれば「このクラスタ(複数台のサーバ)でコンテナをX個実行して」というような抽象的な命令でコンテナの実行を指示できます。一方で、ない場合は自身でコンテナを動かしたいサーバを決定し、それぞれのサーバにログインしてコンテナを実行するコマンドを打つ必要があります。非常に手間がかかると容易に想像できるでしょう。
更にコンテナを動かしているサーバに異常が発生した場合、ECSもしくはEKSであれば他の正常なサーバでコンテナを立ち上げてくれますが、これらがないと、その作業を人力で対応する必要があります。ECSとEKSは効率的なコンテナ運用において欠かせないサービスだということがまずは理解できると思います。
図2:コントロールプレーンの役割
さて、ECSとEKSの位置づけに関する基本的な内容は理解できたと思うので、ここからは各サービスの概要について説明していきます。
Amazon ECSはAWSが独自に開発した、AWS上でのみ動作するコンテナオーケストレーターです。2014年に発表され、すでに10年が経とうとしています。
参考:Amazon ECSのアイコン
Amazon ECSは小規模から大規模まで様々な環境に対応している一方、その構成は「タスク」、「タスク定義」、「クラスタ」、「サービス」から成る4つの概念でシンプルに表現できます。
図3:Amazon ECSの主要な4つの構成要素
表1:Amazon ECSの主要な4つの構成要素
表1から分かる通り、ECSはコンテナの実行管理に特化したサービスです。こうした構成要素になる理由の一つとして、AWSに「ビルディングブロック」という考え方が根付いていることがあります。つまり、多種多様なサービスや機能を提供し、組み合わせやすくすることで幅広いニーズに応えられるようにしようという考え方です。これにより、ECSは他のAWSサービスとのインテグレーションが容易で、連携することで足りない機能を実現することができます。
Amazon EKSはOSSのコンテナオーケストレーターであるKubernetes(以下、K8s)と互換性を持つフルマネージドなコンテナオーケストレーターです。
参考:Amazon EKSのアイコン
ECSが発表された2014年、ちょうどGoogleからK8sがOSSとしてリリースされました。K8sの利用が広まるにつれてAWSでもフルマネージドなK8sのニーズが強まり、EKSはそれに応える形で2018年にリリースされました。AWSで複数のコンテナオーケストレーターが利用可能なのはこの名残で、他のクラウドベンダーと比較しても珍しい特長です。
さて、 EKSもといK8sの特長は下記の通り「多機能性」です。
多機能であるため、使いこなすためのハードルは高くなりますが、使いこなせれば非常に強力なツールです。
さて、あくまで私個人の見解にはなりますが、これまで説明してきたことを下表の通りまとめてみました。特に覚えておいていただきたい大きな特長に焦点を当てていますので、まずはここから理解するようにしていきましょう。
表2:各サービスの違い
今回はAWSのコンテナサービスにおけるAmazon ECSとAmazon EKSの位置づけとその概要について説明しました。まずは両者の特徴を理解する手助けになれば嬉しいです。次回はより技術的な視点から、ECSとEKSをそれぞれどのような場面で利用すべきなのか、選択基準について考察していきたいと思います。ちなみに当社ではAWS包括的技術支援サービスを提供しています。ECSやEKSの使いこなし方についてはもちろんのこと、「そもそもこのシステム構成でコンテナを採用すべきなのか?」といったか設計の部分含めて、何かお困りごとがあればお気軽にこちらからお問い合わせください!