AWS SAA(Solutions Architect - Associate)対策

コンテナ実行基盤の選定

このレッスンでできるようになること

コンテナ移行のシナリオを読んで、ECS と EKS のどちらで動かすか、そして起動タイプを Fargate と EC2 のどちらにするかを、別々の判断として選べるようになります。

まず要件を読む

ある小売企業が、オンプレミスの Docker コンテナで動く在庫管理アプリを AWS へ移します。開発チームは 4 人で、Kubernetes を触った経験はありません。既存の定義ファイルは docker-compose だけで、Kubernetes のマニフェストはありません。要望は「クラスターのサーバーにパッチを当てる作業をしたくない」「移行の学習コストを最小にしたい」の2つです。

この文には答えを分ける語が2つ埋まっています。「Kubernetes の経験がない、マニフェスト資産もない」と「サーバーにパッチを当てたくない」です。前者がオーケストレーターを、後者が起動タイプを決めます。

判断は2段階に分かれる

ここを1つの選択だと思っていると、選択肢の並びに惑わされます。何が管理するかどこで動かすかは独立です。

段階1 ECS か EKS か

ECSEKS
使う仕組みAWS 独自のオーケストレーションKubernetes
学習コスト低い。AWS の他サービスとの連携が素直高い。Kubernetes の知識が要る
向いている場面AWS の中で完結し、早く動かしたい既存の Kubernetes 資産がある、他クラウドやオンプレとの移植性が要る
運用の手間小さいコントロールプレーンは AWS 管理だが、アドオンやバージョン更新の運用が残る

判断の言葉はほぼ固定です。「すでに Kubernetes で運用している」「Helm チャートがある」「マルチクラウドで同じ運用にしたい」なら EKS、それ以外で「運用の手間と学習コストを最小に」なら ECS です。

段階2 Fargate か EC2 起動タイプか

Fargate はコンテナを動かすためのサーバーを AWS が用意する方式で、ECS でも EKS でも選べます。EC2 起動タイプは自分でインスタンスを並べ、その OS の面倒を見ます。

要件選ぶ起動タイプ
サーバーのパッチ当てやスケールをしたくないFargate
タスクごとに必要な分だけ払いたい / 断続的な負荷Fargate
GPU を使うEC2 起動タイプ
ホストの OS 設定やカーネルの調整が必要EC2 起動タイプ
常時高い負荷が続き、コミット割引で下げたいEC2 起動タイプ
中断してよいバッチをさらに安くFargate Spot、またはスポットの EC2

冒頭の要件だと、ECS を Fargate 起動タイプで使う、が答えになります。

権限まわりで間違えやすい点

ECS のタスクには 2 種類のロールが登場します。ここは試験で入れ替えて出されます。

  • タスク実行ロール — ECS の仕組みが使う。ECR からイメージを取得したり、ログを CloudWatch へ送るためのもの
  • タスクロール — コンテナの中のアプリが使う。S3 や DynamoDB を呼ぶための権限はこちら

「アプリが S3 を読めない」という不具合は、タスク実行ロールではなくタスクロールの問題です。

要件語から構成への対応

要件の言い回し選ぶもの
Kubernetes の資産がある / 移植性が要るEKS
コンテナ化するが AWS 内で完結、手間を最小にECS
サーバーの管理をしたくないFargate 起動タイプ
GPU、特権的なホスト設定が要るEC2 起動タイプ
アプリから AWS サービスを呼びたいタスクロールを付与する
コンテナイメージの保管先Amazon ECR

よくある引っ掛け

その1 「運用を減らしたいので EKS on Fargate」という選択肢。 Fargate にすればサーバーの管理は消えますが、Kubernetes 自体の運用と学習は残ります。要件が「学習コストを最小に」なら ECS が勝ちます。惜しく見えるのは、Fargate という語だけを拾うと正しく読めてしまうからです。

その2 EC2 インスタンスに IAM ロールを付ければコンテナから使える、という選択肢。 動いてしまうことはありますが、同じホスト上の全タスクに同じ権限が渡るため最小権限になりません。タスク単位で分けるならタスクロールです。

まとめ

  • オーケストレーターの選択と起動タイプの選択は別物として読む
  • Kubernetes の資産か移植性が要件にあるときだけ EKS、なければ ECS
  • サーバーを管理したくないなら Fargate、GPU やホスト調整が要るなら EC2 起動タイプ
  • アプリが使う権限はタスクロール。イメージ取得とログはタスク実行ロール
  • 常時高負荷ならコミット割引の効く EC2 起動タイプが安くなりうる
生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部

復習ミニクイズ

ある企業が、Docker コンテナで動く社内 Web アプリを AWS へ移行します。開発チームに Kubernetes の運用経験は無く、既存の Kubernetes マニフェストもありません。アクセスは業務時間帯だけで夜間はほとんどありません。基盤サーバーのパッチ適用などの運用作業は行いたくない、という要件があります。最も適した構成はどれですか。