AWS CLF(Cloud Practitioner)対策

コンテナサービス

このレッスンを終えると、ECS・EKS・Fargate・ECR の役割を混同せず、要件の文からどれを選ぶべきかを答えられるようになります。

自分のサーバーに Docker を入れたときの話

オンプレミスの 1 台に Docker を入れて、アプリをコンテナで動かしたことがあるかもしれません。そこまでは簡単です。困り始めるのは台数が増えてからでした。

  • どのサーバーにどのコンテナを何個置くかを、誰が決めるのか
  • コンテナが落ちたとき、誰が起動し直すのか
  • イメージはどこに置いて、各サーバーはどこから取ってくるのか
  • コンテナを載せるサーバー自体の OS 更新は、結局誰がやるのか

最初の3つを引き受けるのがコンテナオーケストレーション、最後の1つを消してしまうのが Fargate です。AWS のコンテナ関連サービスは、この役割で整理すると一度で頭に入ります。

4つの役割

サービス役割ひとことで
Amazon ECR (Elastic Container Registry)コンテナイメージの保管庫イメージをどこに置くか
Amazon ECS (Elastic Container Service)AWS 独自のオーケストレーションどこで何個動かすかを決める人
Amazon EKS (Elastic Kubernetes Service)マネージドな Kubernetes同じ役目を Kubernetes でやりたいとき
AWS Fargateコンテナ向けのサーバーレス実行環境載せるサーバーを持たない選択

順番に見ます。ECR は Docker Hub にあたる置き場で、イメージを保管し各所へ配ります。

ECSEKS はどちらもオーケストレーションで、やることは同じ層です。違いは流儀で、AWS のサービスとの結び付きが素直で学習量が少ないのが ECS、Kubernetes の知識や既存のマニフェストをそのまま活かしたいときが EKS です。試験でこの2つを分ける鍵は Kubernetes という語が出るかどうか、ほぼそれだけです。

Fargate はここに並ぶ第3のオーケストレーションではありません。ECS や EKS と組み合わせて使う起動タイプで、コンテナを動かすための EC2 インスタンスを利用者が用意しなくてよくなります。逆に EC2 起動タイプを選べば、コンテナを載せるインスタンス群は利用者の管理下に残り、OS のパッチも自分の仕事になります。

整理すると、置き場が ECR、指揮者が ECS か EKS、舞台が EC2 か Fargate、という三層構造です。

試験ではこう出る

  • 「Kubernetes を使いたい」「既存の Kubernetes 環境を AWS へ移したい」とあれば EKS です。ここだけは迷いません
  • 「コンテナを実行したいが、基盤となるサーバーの管理はしたくない」は Fargate です。Lambda と迷わせてきますが、コンテナという語があれば Fargate と切り分けます
  • 「コンテナイメージを保存して共有したい」は ECR です。S3 を選ばせる誤答が並びます
  • Fargate を「ECS や EKS の代わりに使うサービス」と書いた選択肢は誤りです。組み合わせて使うものだ、という点がよく問われます
  • 「基盤インスタンスも自分で細かく制御したい」なら、ECS の EC2 起動タイプが答えになります

まとめ

  • ECR がイメージの保管庫、ECS と EKS がオーケストレーションです
  • ECS と EKS の分かれ目は Kubernetes を使うかどうかです
  • Fargate は起動タイプで、コンテナを載せるサーバーの管理をなくします
  • サーバー管理なしでコンテナならば Fargate、サーバー管理なしでコードならば Lambda と覚えます
生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部

復習ミニクイズ

既存の Kubernetes のマニフェストをそのまま活かして、AWS 上でコンテナを運用したい。さらに、コンテナを動かす基盤サーバーの管理はしたくない。適切な組み合わせはどれですか。