Amazon ECS for Fargate で「dockertimeouterror unable transition start timeout after wait 3m0s」というエラーを解決するにはどうすればよいですか?

最終更新日: 2020 年 12 月 17 日

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 Systems Manager: 機密データをコンテナに挿入するために、タスク定義で 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 ロギングドライバーを使用しているかどうかを確認する

  1. Amazon ECS コンソールを開きます。
  2. ナビゲーションペインで、[Task Definitions] (タスク定義) を選択します。
  3. タスクまたはサービスで使用されるタスク定義を選択し、タスク定義名を選択します。
  4. タスク定義の [Container Definitions] (コンテナ定義) セクションで、[Container Name] (コンテナ名) 列でコンテナを展開するためのアイコンを選択します。
  5. [Log Configuration] (ログの設定) サブセクションで、[Log driver] (ログドライバー) が [awslogs] に設定されているかを確認します。

重要: タスクが NAT ゲートウェイまたは NAT インスタンスを持たないプライベートサブネットで実行されている場合は、VPC エンドポイントを使用する必要があります。

Fargate タスク用の VPC エンドポイントがあることを確認する

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインから [Endpoints] (エンドポイント) を選択します。
  3. [Service name] (サービス名) フィールドに com.amazonaws.region.logs が存在するかどうかを確認します。

エンドポイントが存在しない場合は、新しいエンドポイントを作成します。

エンドポイントが存在する場合は、エンドポイントが、Fargate タスクが実行されているのと同じ VPC であるかどうかを確認します。VPC コンソールでこれを行うには、エンドポイントを選択し、エンドポイントの [Details] (詳細) タブで VPC ID を探します。

エンドポイントが Fargate タスクと同じ VPC で使用されていない場合は、新しいエンドポイントを作成します。

エンドポイントが Fargate タスクと同じ VPC で使用されている場合は、VPC に関連付けられたセキュリティグループで次の項目を確認します。

  • セキュリティグループのイングレスルールは、Fargate タスクからのポート 443 のトラフィックを許可する必要があります。
  • Fargate タスクに関連付けられたセキュリティグループには、ポート 443 上のトラフィックを VPC エンドポイントに送信するエグレスルールが必要です。

これで、作成した CloudWatch エンドポイントに Fargate タスクが到達できるようになりました。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?