AWS ECS(Fargate)にデプロイを行った際に下記停止理由でコンテナが立ち上がりませんでした。
ログはマネージメントコンソールのECSから停止したタスクを選んでクリックすると確認できます。
Cannotpullcontainererror: pull image manifest has been retried 1 time(s): failed to resolve ref 123456789123.dkr.ecr.ap-northeast-1.amazonaws.com/test-api:latest: 123456789123.dkr.ecr.ap-northeast-1.amazonaws.com/test-api:latest: not found
ECRにイメージを配置しており、権限の設定も行っていたので原因がよく分からず困りました。
調査方法
まず、AWSのマネージメントコンソールから次の箇所のログを確認してみましょう。
Amazon Elastic Container Service --> クラスター --> [cluster名] --> サービス --> [サービス名] --> タスク --> 希望するステータスをフィルタリングを「停止済みに設定」
Amazon Elastic Container Service --> クラスター --> [cluster名] --> サービス --> [サービス名] --> イベント
CodeDeploy --> デプロイ --> [デプロイID]
事象と解決例
発生: 2023-02-08
コンテナで使用するメモリが足りないことが原因でした。
ECSのメモリ量を512Mから1Gに変更したところ無事デプロイが成功しました。
ECSのメモリについて補足:
設定したCPUのサイズに応じて、設定できるメモリのサイズが変わります。
詳細については下記マニュアルを参照。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task-cpu-memory-error.html
発生: 2023-11-07
同様のエラーが発生し、原因を調査したところCodeDeploy
のデプロイグループの設定が漏れていました。
このエラーが出た時はECRだけでなく、関連サービスの設定もよく調べる必要がありそうですね。
発生: 2024-02-16
同様のエラーが発生しました。
ECSだけでなく、CodeDeployのデプロイ状況を確認したところ次のようなエラーが確認できました。
The ECS service cannot be updated due to an unexpected error: The container HOGEHOGE does not exist in the task definition. (Service: AmazonECS; Status Code: 400; Error Code: InvalidParameterException; Request ID: xxxxxxxxxxx; Proxy: null). Check your ECS service status.
こちらはECSサービスに設定したタスク名とデプロイしたECSタスク名が一致していないことが原因でした。
具体的には、service_definition
に"loadBalancers": [ {"containerName":"HOGEHOGE"]}
が設定されているのに、task_definition
のcontainerDefinitions
のname
は"HOGE"
となっていました。
上記のエラーが解消した後、ECS-->サービス-->イベントを確認したら次のエラーが出ていました。
failed to launch a task with (error ECS was unable to assume the role 'arn:aws:iam::123000123123:role/hoge-ecs-task-role' that was provided for this task. Please verify that the role being passed has the proper trust relationship and permissions and that your IAM user has permissions to pass this role.
こちらは、ECSのtask_definition
に設定したロール名が間違っており、存在しないhoge-ecs-task-role
を利用しようとしているのが原因でした。(実際に作成しておいたのはhogehoge-ecs-task-role
)