AWS Fargate の Amazon Elastic Container Service (Amazon ECS) タスクで、「dockertimeouterror unable transition start timeout after wait 3m0s」というエラーが表示されます。
簡単な説明
このエラーは、Fargate タスクにネットワーク設定の問題がある場合に発生します。Fargate の場合、開始タイムアウトのデフォルト値は 3 分です。タスクが 3 分以内に保留状態から実行状態に切り替わらない場合、そのタスクは失敗し、停止状態に移行します。
NAT インスタンスまたはゲートウェイが設定されていないプライベートサブネットで実行される Fargate タスクの場合は、正しい Amazon Virtual Private Cloud (Amazon VPC) エンドポイントを設定します。次のエンドポイントが必要です。
- **Amazon Elastic Container Registry (Amazon ECR):**このエンドポイントは、ECR リポジトリからイメージを取得するために必要です。
- **Amazon Simple Storage Service (Amazon S3):**Amazon ECR は Amazon S3 を使用してイメージレイヤーを保存するため、このエンドポイントが必要です。Amazon ECR からイメージをダウンロードするには、コンテナが Amazon ECR にアクセスしてイメージマニフェストを取得し、Amazon S3 にアクセスしてイメージレイヤーをダウンロードする必要があります。
- **AWS Secrets Manager および / または AWS システムマネージャー:**これらのエンドポイントは、タスク定義で Secrets Manager シークレットまたは Systems Manager Parameter Store パラメータを参照する場合に必要です。これらのタスクがサービスに到達できるように、Secrets Manager または Systems Manager のインターフェイス VPC エンドポイントを作成する必要があります。エンドポイントは、機密データがホストされている特定のサービス (Secrets Manager または System Manager) からのみ作成する必要があります。
- **Amazon CloudWatch:**このエンドポイントは、Fargate タスクが awslogs をログドライバーとして使用する場合に必要です。awslogs をロギングドライバーとして使用するタスクは、ログを CloudWatch にエクスポートします。awslogs を使用していて、CloudWatch の VPC エンドポイントは作成されているが起動していない場合、タスクはエンドポイントに到達できません。次のエラーが発生します: 「DockerTimeoutError: Could not transition to started; timed out after waiting 3m0s」
解決策
タスク定義で awslogs ロギングドライバーが使用されているかどうかを確認します
次の手順を実行します。
- Amazon ECS コンソールを開きます。
- ナビゲーションペインで、[タスク定義] を選択します。
- タスクまたはサービスで使用されるタスク定義を選択し、次にタスク定義名を選択します。
- タスク定義の「コンテナ定義」セクションで、「コンテナ名」列にあるコンテナのエキスパンダーアイコンを選択します。
- ログ設定サブセクションで、ログドライブが awslogs に設定されていることを確認します。
**重要:**タスクが NAT ゲートウェイや NAT インスタンスのないプライベートサブネットで実行される場合は、VPC エンドポイントを使用する必要があります。
Fargate タスク用の VPC エンドポイントがあることを確認する
次の手順を実行します。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで [エンドポイント] を選択します。
- サービス名フィールドに com.amazonaws.region.logs が存在するかどうかを確認します。
エンドポイントが存在しない場合は、新しいエンドポイントを作成します。
エンドポイントが存在する場合は、そのエンドポイントが Fargate タスクが実行されている VPC と同じであるかどうかを確認します。VPC コンソールでこれを行うには、エンドポイントを選択し、エンドポイントの [Details] タブで VPC ID を探します。
エンドポイントが Fargate タスクと同じ VPC で使用されていない場合は、新しいエンドポイントを作成します。
エンドポイントが Fargate タスクと同じ VPC で使用されている場合は、VPC に関連付けられているセキュリティグループに次の点がないか確認してください。
- セキュリティグループの進入ルールは、Fargate タスクからのポート 443 のトラフィックを許可する必要があります。
- Fargate タスクに関連付けられているセキュリティグループには、ポート 443 のトラフィックを VPC エンドポイントに送信するエグレスルールが必要です。
関連情報
Amazon ECR インターフェイス VPC エンドポイント (AWS PrivateLink)