Day 9: まずはここから!AWS ECSの基本構成とデプロイの流れ 🛠️
皆さん、こんにちは!30日集中講座、Day 9へようこそ。
第1週でDockerの基礎を学んだ皆さんは、いよいよクラウドでのコンテナ運用に挑戦する準備ができました。AWSには様々なコンテナサービスがありますが、この講座ではまず最もシンプルで、初心者におすすめの「ECS on Fargate」から始めます。
ECS on Fargateは、Dockerの知識を直接活かせる上に、インフラ管理の複雑さから解放されるため、皆さんがコンテナ開発のクラウド化をスムーズに体験するには最適な選択です。
1. ECSを理解するための3つの要素
ECSでコンテナを動かすには、以下の3つの要素を理解することが不可欠です。ローカルでdocker composeを使っていた皆さんは、これらの概念をdocker composeの設定と対比して考えると理解が深まります。
ECSのコンテナオーケストレーションは、以下のような階層構造で構成されています。
クラスター ⊃ サービス ⊃ タスク ⊃ コンテナ (複数可)
-
タスク定義 (Task Definition): コンテナの設計図です。どのDockerイメージを使うか、CPUやメモリをどれだけ割り当てるか、どのポートを公開するか、といった設定を定義します。これはDockerの
docker-compose.ymlに相当します。一つのタスク定義には、アプリケーション本体とログ収集用のサイドカーコンテナなど、複数のコンテナ定義を含めることも可能です。 - クラスター (Cluster): コンテナを実行するための論理的なグループで、タスクを配置する場所です。
- サービス (Service): 実行するタスクの数を管理します。指定したタスク定義に基づいて、実行中のコンテナグループであるタスクを常に必要な数だけ起動し続けます。オートスケーリングやロードバランサーとの連携もこのサービスで設定します。
2. AWS ECSでのデプロイ3ステップ
ECSでアプリケーションをデプロイする流れは、非常にシンプルです。
ステップ1: コンテナイメージの準備
まず、アプリケーションのDockerイメージを、AWSが提供するコンテナレジストリサービス「ECR (Elastic Container Registry)」にプッシュします。ECRはDocker HubのAWS版で、プライベートなコンテナイメージを安全に保存・管理できます。ECRへのプッシュ方法は次回のDay 10で詳しく解説します。
ステップ2: タスク定義の作成
タスク定義では、コンテナをどのように実行するかを具体的に設定します。Fargateを使用する場合、networkMode: awsvpcとrequiresCompatibilities: [FARGATE]を指定します。
タスク定義のJSON設定例
{
"family": "my-web-app",
"networkMode": "awsvpc",
"requiresCompatibilities": ["FARGATE"],
"cpu": "256",
"memory": "512",
"containerDefinitions": [
{
"name": "web-container",
"image": "nginx:latest",
"portMappings": [
{
"containerPort": 80,
"protocol": "tcp"
}
]
}
]
}
- IAMロール: ECSサービスがユーザーに代わってECRからイメージを取得したり、CloudWatch Logsにログを送信する際に必要な権限をタスク実行ロールとして設定します。
ステップ3: サービスとクラスターの作成
最後に、サービスとクラスターを関連付けます。
ネットワーク設定
FargateはVPC内で実行されます。サブネットは、パブリックサブネットとプライベートサブネットのどちらも選択できますが、セキュリティ向上のため、プライベートサブネットを使用し、NAT Gatewayを経由してインターネットに接続するのがベストプラクティスです。
セキュリティグループ
コンテナへのアクセスはセキュリティグループで制御します。
- インバウンドルール: ポート80(HTTP)や443(HTTPS)など、必要なポートをApplication Load Balancer (ALB) からのアクセスに限定して開放します。
- アウトバウンドルール: ECRやCloudWatch Logsへのアクセスが必要なため、ポート443(HTTPS)をインターネットへ許可します。
3. コストとトラブルシューティング
コスト
Fargateは従量課金制で、使用したCPU/メモリの時間に応じて課金されます。小規模なテスト環境であれば、月数百円から始められるため、初心者でも安心して試すことができます。
よくある初期エラーと対策
-
タスクが起動しない:
- タスク実行ロールにECRへのアクセス権限が不足している。
- セキュリティグループのアウトバウンドルールでHTTPS(443)が許可されていない。
-
コンテナが停止し続ける:
- アプリケーションがタスク定義で指定したポートで正しく起動しているか確認しましょう。
- CloudWatch Logsでコンテナのログを確認すると、原因が特定できます。
-
外部からアクセスできない:
- ロードバランサーのターゲットグループ設定が正しくない。
- セキュリティグループのインバウンドルールに誤りがある。
4. まとめと今日のハンズオン
- ECSは、タスク定義、クラスター、サービスの3つの基本要素で構成されています。
- Fargateは、サーバー管理不要で運用をシンプルにするための強力な選択肢です。
- デプロイの流れは、ECRへのイメージプッシュ → タスク定義作成 → サービス作成です。
今日の学びを定着させるために、以下のハンズオンに挑戦してみましょう。
【今日のハンズオン課題(所要時間:30分)】
- AWSコンソールにログインし、ECSサービス画面を開く。
- AWS CLIをインストール・設定し、IAMユーザーにECRへのプッシュ権限を付与する。
- ECSクラスターを1つ作成(Fargateを使用)。
- ECRでリポジトリを1つ作成(例:
my-first-app)。 - 使用予定のVPCのサブネット構成を確認。
次回の予告
Day 10: ECRへのコンテナイメージ登録とタグ付け
それでは、また明日お会いしましょう!
