AWS SAA(Solutions Architect - Associate)対策
コンテナ実行基盤の選定
このレッスンでできるようになること
コンテナ移行のシナリオを読んで、ECS と EKS のどちらで動かすか、そして起動タイプを Fargate と EC2 のどちらにするかを、別々の判断として選べるようになります。
まず要件を読む
ある小売企業が、オンプレミスの Docker コンテナで動く在庫管理アプリを AWS へ移します。開発チームは 4 人で、Kubernetes を触った経験はありません。既存の定義ファイルは docker-compose だけで、Kubernetes のマニフェストはありません。要望は「クラスターのサーバーにパッチを当てる作業をしたくない」「移行の学習コストを最小にしたい」の2つです。
この文には答えを分ける語が2つ埋まっています。「Kubernetes の経験がない、マニフェスト資産もない」と「サーバーにパッチを当てたくない」です。前者がオーケストレーターを、後者が起動タイプを決めます。
判断は2段階に分かれる
ここを1つの選択だと思っていると、選択肢の並びに惑わされます。何が管理するかとどこで動かすかは独立です。
段階1 ECS か EKS か
| ECS | EKS | |
|---|---|---|
| 使う仕組み | 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 起動タイプが安くなりうる
復習ミニクイズ
ある企業が、Docker コンテナで動く社内 Web アプリを AWS へ移行します。開発チームに Kubernetes の運用経験は無く、既存の Kubernetes マニフェストもありません。アクセスは業務時間帯だけで夜間はほとんどありません。基盤サーバーのパッチ適用などの運用作業は行いたくない、という要件があります。最も適した構成はどれですか。