web-dev-qa-db-ja.com

停止(CannotPullContainerError:APIエラー(500)?

Amazon Fargateクラスターでタスクを実行すると、このエラーが発生します。誰もこれに遭遇したことがありますか?

15
Austin K

FargetにはパブリックIPが必須です。詳細については、 https://github.com/aws/Amazon-ecs-agent/issues/1128

7
manish

ドキュメントの回答をご覧ください。

https://docs.aws.Amazon.com/AmazonECS/latest/developerguide/task_cannot_pull_image.html

500エラーが発生しているので、最初のエラーの説明「接続がタイムアウトしました」のアドバイスに注意してください。

Fargateタスクを起動すると、そのエラスティックネットワークインターフェイスには、コンテナーイメージをプルするためのインターネットへのルートが必要です。タスクの起動時に次のようなエラーが表示される場合、インターネットへのルートが存在しないためです。

CannotPullContainerError: API error (500): Get https://111122223333.dkr.ecr.us-east-1.amazonaws.com/v2/: net/http: request canceled while waiting for connection

この問題を解決するには、次のことができます。

  • パブリックサブネットのタスクの場合、[〜#〜] enabled [〜#〜]forAuto-assign publicタスクの起動時のIP...

  • プライベートサブネットのタスクの場合、[〜#〜] disabled [〜#〜]に指定します。タスクを起動するときにIPを使用し、VPCでNAT Gatewayを設定して、リクエストをインターネットにルーティングします...

ECSタスクが開始しない、または開始時に奇妙な動作をすることに関連する他の問題が発生した場合は、 ECSトラブルシューティングトピック の完全なリストを確認してください。

同様のエラー(404の代わりに500)が発生していましたが、詳細なステータスにエラーが表示されていても、タスクは実行中と表示していました。

タスクに関連付けられたロール(この場合、実行されていたEC2インスタンスと同じロール)は、ecs-tasksによって引き受けられないことがわかりました。次の信頼関係ステートメントをロールに追加すると、問題が解決しました。

{
  "Effect": "Allow",
  "Principal": {
    "Service": "ecs-tasks.amazonaws.com"
  },
  "Action": "sts:AssumeRole"
}

詳細については、 タスク実行ロール の特定のページを参照してください。

5
Tim Klein

このエラーは、コンテナがレジストリからコンテナをプルできない場合に発生します。

  1. コンテナにパブリックIPアドレスを割り当てていることを確認してください。現在、AWSコンテナレジストリには、internal-in-vpnエンドポイントがありません。
  2. コンテナにインターネットに接続する方法があることを確認してください(例:natインスタンスなど)。
  3. コンテナに関連付けたセキュリティグループがアウトバウンドトラフィックを許可していることを確認します。 terraformなどでSGを作成した場合、デフォルトではアウトバウンドルールがないことがわかります。
1
oskarpearson

インターネットアクセスのないプライベートVPCでECSを実行している場合は、 ECRとS3のVPCエンドポイントを最初に に設定します。

0
nicolasochem

サービスにパブリックIPを割り当てる必要があります。サービス定義中に行うことができますが、私が知る限り、更新メニューからサービスを更新することはできません。

0
gaber84

サブネットがインターネットにアクセスできることを確認してください。私の場合、fargateタスクはプライベートサブネットに展開されました。このサブネットにはnatゲートウェイが構成されていましたが、パブリックサブネットにはインターネットゲートウェイへのルートがありませんでした。

0
Shoan