Amazon Fargateクラスターでタスクを実行すると、このエラーが発生します。誰もこれに遭遇したことがありますか?
FargetにはパブリックIPが必須です。詳細については、 https://github.com/aws/Amazon-ecs-agent/issues/1128
ドキュメントの回答をご覧ください。
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"
}
詳細については、 タスク実行ロール の特定のページを参照してください。
このエラーは、コンテナがレジストリからコンテナをプルできない場合に発生します。
インターネットアクセスのないプライベートVPCでECSを実行している場合は、 ECRとS3のVPCエンドポイントを最初に に設定します。
サービスにパブリックIPを割り当てる必要があります。サービス定義中に行うことができますが、私が知る限り、更新メニューからサービスを更新することはできません。
サブネットがインターネットにアクセスできることを確認してください。私の場合、fargateタスクはプライベートサブネットに展開されました。このサブネットにはnatゲートウェイが構成されていましたが、パブリックサブネットにはインターネットゲートウェイへのルートがありませんでした。