🦭
【ECS on EC2】タスクがプロビジョ二ングで停止してしまった時の確認事項
前提
- ECS on EC2を使用している環境で、タスクが
PROVISIONING
状態から先に進まずに停止してしまう。
確認ポイント
1. EC2インスタンスのリソース確認
タスク定義で要求しているvCPU・メモリ量が、EC2インスタンス側のリソース上限を超えていないか確認してください。
2. ECSクラスタ設定の反映
起動テンプレートのユーザーデータで、EC2を正しくECSクラスタに紐付ける設定が行われていることを確認します。
例: user_data.sh
#!/bin/bash
echo ECS_CLUSTER=${cluster_name} >> /etc/ecs/ecs.config
Terraform例:
user_data = base64encode(templatefile("${path.module}/user_data.sh", {
cluster_name = var.cluster_name
}))
3. EC2インスタンスのIAMロール権限不足
EC2インスタンスに付与したIAMロールが、ECSへの登録やECR・CloudWatch Logsなどへのアクセスに必要な権限を持っているか確認してください。AmazonEC2ContainerServiceforEC2Role
のポリシーを持っていれば十分です。
また、ロールの信頼ポリシーに以下のような設定があるか確認します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
4. ヘルスチェックエンドポイントの有無
タスク内のコンテナが正常に稼働していることを示すため、/health
などのHTTPエンドポイントで200 OK
を返すにします。
5. ネットワーク構成の確認
- プライベートサブネット内にインスタンスがある場合:ECSエージェントがECS/ECRにアクセスするため、VPCエンドポイントまたはNATゲートウェイが必要です。
- パブリックサブネットにインスタンスがある場合:インターネットへの直接アクセスが可能なため、上記は不要です。
自分はプライベートサブネット内にインスタンスを配置して、半日以上無駄にしました😭😭😭
参考
Discussion