プルスルーキャッシュを設定したリポジトリのイメージを指定すると ECS タスクが起動しないときの対処方法

ECR のプルスルーキャッシュを使用するには、ECR からイメージをプルする権限に加えて追加のアクセス許可が必要です
2022.06.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

ECS のタスク定義で、プルスルーキャッシュを設定した ECR リポジトリのイメージを指定しています。プルスルーキャッシュの動作を期待してリポジトリにはイメージがない状態で、ECS タスクを実行すると、イメージがない旨のエラーが表示されました。
何か設定が足りていないのでしょうか。対処方法を教えてください。

{
    "stopCode": "TaskFailedToStart",
    "stoppedReason": "CannotPullContainerError: inspect image has been retried 1 time(s): failed to resolve ref ..."
}

どう対応すればいいの?

タスク実行ロールに設定されたIAMポリシーをご確認ください。

プルスルーキャッシュを使用するには、ECR からイメージを取得する際に必要な権限に加えて、追加のアクセス許可が必要になります。

必要な IAM 許可 - Amazon ECR

ecr:BatchImportUpstreamImage – 外部イメージを取得し、プライベートレジストリにインポートするアクセス許可を付与します。このアクセス許可は、プライベートレジストリアクセス許可ポリシー、ID に基づく IAM ポリシー、またはリソースに基づくリポジトリアクセス許可ポリシーを使用して付与できます。レポジトリアクセス許可の使用に関する詳細については、「プライベートリポジトリポリシー」を参照してください。

ecr:CreateRepository – プライベートレジストリにリポジトリを作成するアクセス許可を付与します。キャッシュされたイメージを格納するリポジトリがまだ存在しない場合には、この許可が必要となります。

ECS コンソールからタスク実行ロールを自動的に作成した場合に表示されるロールecsTaskExecutionRoleなど、上記の権限が付与されていない場合、プルスルーキャッシュの実行がエラーになり、イメージが複製されず、イメージがない旨のエラーが発生します。

そのため、タスク実行ロールに設定された IAM ポリシーを確認し、必要な権限が許可されているか確認してください。

参考資料