PR

 AWSでは、コンテナの実行・管理基盤として、二つのサービスを提供している。Amazon ECS(Elastic Container Service)、Amazon EKS(Elastic Container Service for Kubernetes)だ。

 ECSは2015年に一般提供を始めたサービスで、東京を含む17リージョンで利用可能だ(2018年7月時点)。EKSが一般提供になったのは2018年6月。提供リージョンは、米バージニア北部とオレゴンのみである(同)。

 ECSとEKSの最大の違いは、コンテナオーケストレーター(オーケストレーションツールとも呼ぶ、以下オーケストレーター)にある。オーケストレーターとは、多数のコンテナを管理して起動、削除、監視などを行うツールのことだ。

 コンテナは、インスタンス(コンテナのホストになる仮想マシン、EKSではワーカーノード、ECSではコンテナインスタンスと呼ぶ)ごとに配置されたコンテナエンジン上で動作する。このコンテナエンジンのデファクトスタンダードがDockerだ(コンテナとコンテナエンジンについては別掲記事「なぜコンテナが注目を集めるのか」を参照)。オーケストレーターはコンテナエンジンに対して、コンテナの起動や削除などの指示を出す(図1)。

図1 コンテナ実行基盤の構成要素
図1 コンテナ実行基盤の構成要素
[画像のクリックで拡大表示]

 ECSはAWS独自のオーケストレーターを持つ(図2)。一方のEKSはデファクトスタンダードといえるKubernetesを採用しており、その関連ソフト/サービスをAWS上で利用できる(Kubernetesについては別掲記事「Pod、Deployment、ReplicaSet―Kubernetes用語を習得」を参照)。

図2 AWSが提供する二つのコンテナサービス
図2 AWSが提供する二つのコンテナサービス
[画像のクリックで拡大表示]

 ECSとEKSには、コンテナが動作するインスタンスの種類として「EC2起動タイプ」と「Fargate起動タイプ」がある(EKSのFargate起動タイプは、2018年中に提供開始予定)。ユーザーがどちらかを選んで利用する。Fargate起動タイプには「AWS Fargate」というサービス名が付いているが、分かりやすくいえばECSとEKSのオプション機能だ。

 EC2起動タイプとFargate起動タイプのどちらも、コンテナエンジンがインストールされたEC2インスタンスが配置され、その上でコンテナを動かすのは同じ。EC2起動タイプではユーザーがインスタンスを管理するのに対して、Fargate起動タイプはマネージドサービスであり、AWSが管理する。例えば、インスタンスで動作するコンテナエンジンやECSエージェントのバージョンアップ、コンテナインスタンスの監視と障害検知時の再起動などを行う。ユーザーはそうした管理作業から解放される。

EC2とFargateの選択

 ここで、「運用管理が楽なFargate起動タイプを選択すればよい」と思ったかもしれない。しかし常にFargate起動タイプを選択するのが適切とは限らない。Fargate起動タイプでは、インスタンスを自由に選択したり変更したりできないというデメリットがあるからだ。

 例えばFargate起動タイプにすると、需給状況に応じて価格が変動し多くのケースで割安に使える「スポットインスタンス」を選択できない。さらに、インスタンスに配置されるコンテナエンジンDockerの設定を変更できないので、Dockerのデフォルトのlogging driverをオープンソースソフトfluentdに変更してログ転送を行う、といったことも不可能だ。

 EC2起動タイプであれば、ユーザーがインスタンスを管理しなければならないが、変更の自由度が高い。上述のスポットインスタンスとfluentdは、どちらも利用できる。

 このように、EC2起動タイプとFargate起動タイプには一長一短がある。どちらかに統一する必要はなく、コンテナで動作させるプロセスの特性に応じて使い分ければよい。