コンテナサービス
AWSは、コンテナ化されたアプリケーションのビルド、デプロイ、運用をサポートする複数のサービスを提供しています。コンテナレジストリ(ECR)、オーケストレーション(ECS/EKS)、サーバーレスコンピューティング(Fargate)を組み合わせることで、運用負荷の低いコンテナ環境を構築できます。
所要時間
約70分
学べること
- AWSのコンテナサービスの全体像と選択基準
- ECRによるコンテナイメージ管理
- ECSの概念(クラスター、タスク定義、サービス)
- Fargateによるサーバーレスコンテナの実行
- ECS vs EKSの選定基準
- OSSプロジェクトにおけるデプロイ方式の選択
前提知識
- Dockerの基礎(Dockerfile、イメージ、コンテナの概念)
- VPCとネットワーキングの基礎
- EC2の基本概念
目次
ECSとEKSの共通基盤
ECS(AWS独自オーケストレーション)
EKS(マネージドKubernetes)
選定と活用
1. AWSにおけるコンテナの選択肢
AWSのコンテナサービスは、レジストリ、オーケストレーション、コンピューティングの3層で構成されます。
┌─────────────────────────────────────────────────────┐
│ レジストリ層 │
│ ┌───────┐ │
│ │ ECR │ コンテナイメージの保管 │
│ └───┬───┘ │
├───────────────────────┼─────────────────────────────┤
│ オーケストレーション層 │
│ ┌────────────┼────────────┐ │
│ ┌────┴────┐ ┌──── ┴────┐ │
│ │ ECS │ │ EKS │ │
│ │ (AWS独自)│ │ (K8s) │ │
│ └────┬────┘ └────┬────┘ │
├──────────┼────────────────────────┼──────────────────┤
│ コンピューティング層 │
│ ┌────┴────────────────────────┴────┐ │
│ │ ┌──────────┐ │ │
│ │ ┌────┴───┐ ┌───┴─────┐ │ │
│ │ │ EC2 │ │ Fargate │ │ │
│ │ │(自己管理)│ │(サーバー │ │ │
│ │ │ │ │ レス) │ │ │
│ │ └────────┘ └─────────┘ │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
選択の組み合わせ
| 組み合わせ | オーケストレーション | コンピューティング | 運用負荷 |
|---|---|---|---|
| ECS + Fargate | ECS | Fargate | 最も低い |
| ECS + EC2 | ECS | EC2 | 中程度 |
| EKS + Fargate | EKS | Fargate | 中程度 |
| EKS + EC2 | EKS | EC2 | 高い |
2. ECR(Elastic Container Registry)
ECRは、Dockerコンテナイメージを保存、管理、デプロイするためのフルマネージドなコンテナレジストリです。
イメージのプッシュ
# ECRにログイン
aws ecr get-login-password --region ap-northeast-1 | \
docker login --username AWS \
--password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
# イメージのビルド
docker build -t idp-server .
# タグ付け
docker tag idp-server:latest \
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/idp-server:latest
# プッシュ
docker push \
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/idp-server:latest
イメージのプル
ECSタスクやEC2からイメージをプルする場合、IAMポリシーでecr:GetDownloadUrlForLayer等の権限が必要です。VPCエンドポイント経由でプライベートにプルすることも可能です。
[ECS Task] → [VPC Endpoint (ecr.api)] → [ECR]
│
← [VPC Endpoint (ecr.dkr)] ←──┘
│
← [S3 Gateway Endpoint] ←──────┘ (イメージレイヤー)