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 にあたる置き場で、イメージを保管し各所へ配ります。
ECS と EKS はどちらもオーケストレーションで、やることは同じ層です。違いは流儀で、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 と覚えます
復習ミニクイズ
既存の Kubernetes のマニフェストをそのまま活かして、AWS 上でコンテナを運用したい。さらに、コンテナを動かす基盤サーバーの管理はしたくない。適切な組み合わせはどれですか。