AWS VPC
を設定し、Fargate launch type
のECS
に機能コンテナーをデプロイしようとしていますが、タスクは常に次のように失敗します:
STOPPED (CannotPullContainerError: Error response from daem)
タスクの役割のコンテキスト:
ecsTaskExecutionRole
次のIAM権限があります。
リポジトリの権限は次のとおりです。
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPull",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"
},
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:BatchGetImage",
"ecr:DescribeImages",
"ecr:DescribeRepositories",
"ecr:GetAuthorizationToken",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:ListImages"
]
}
]
}
セキュリティのため、実際のIDはaws_account_id
に置き換えられます
次のようなトラブルシューティングについて このガイド に従いました:
このエラーは、次のいずれかの問題が原因で発生する可能性があります。
起動タイプにはAmazon ECRエンドポイントへのアクセス権がありません
私は信じています ファーゲートはECRにアクセスできます
Amazon ECRリポジトリポリシーにより、リポジトリイメージへのアクセスが制限されます
私はそれが使用されるロールに対してpull access
を許可すると信じています-上記のリポジトリのパーミッションを参照してください。
AWS Identity and Access Management(IAM)ロールには、イメージをプルまたはプッシュするための適切なアクセス許可がありません
必要な権限があると思います-上記のタスクロールのコンテキストを参照してください。
画像が見つかりません
画像はECRにあり、権限は上記のとおりです
Amazon Simple Storage Service(Amazon S3)アクセスは、Amazon Virtual Private Cloud(Amazon VPC)ゲートウェイエンドポイントポリシーによって拒否されます
私はそう信じています。 IAM権限は上記のS3 read access
に従って設定されています。さらに、明示的なエンドポイントポリシーは設定されていません。つまり、 ドキュメントに従って は、デフォルトでフルアクセスを意味します。
イメージをプルするには、Amazon ECSがAmazon ECRエンドポイントと通信する必要があります。
VPCで定義されたルーティングテーブル:
vPCのすべてのサブネットが関連付けられています。したがって、VPCとその中で実行されているものはすべてインターネットを見ることができるはずです-タスクに使用されるセキュリティポリシーは現在すべてのポートを許可しています(ECR問題のトラブルシューティング中の一時)。
まだこのエラーが発生しているのに何が欠けていますか?
これはEC2インスタンスを使用して機能します-EC2インスタンスを使用するタスクを作成し、他のすべてのものが等しい場合(該当する場合)EXCEPT
EC2: Network Mode = Bridge
Fargate: Network Mode = awsvpc
コンテナーがプロビジョニングおよび実行され、コンテナーで実行されるWebアプリが正常に実行されます。ただし、Fargateでは、ネットワークモードはawsvpcである必要があります。
Fargate only supports network mode ‘awsvpc’.
これは問題が存在する場所だと思いますが、どのように対処すればよいかわかりません。
タスク定義は次のとおりです:
{
"ipcMode": null,
"executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"dnsSearchDomains": null,
"logConfiguration": {
"logDriver": "awslogs",
"secretOptions": null,
"options": {
"awslogs-group": "/ecs/deploy-test-web",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "ecs"
}
},
"entryPoint": [],
"portMappings": [
{
"hostPort": 8080,
"protocol": "tcp",
"containerPort": 8080
}
],
"command": null,
"linuxParameters": null,
"cpu": 1,
"environment": [],
"resourceRequirements": null,
"ulimits": null,
"dnsServers": null,
"mountPoints": [],
"workingDirectory": null,
"secrets": null,
"dockerSecurityOptions": null,
"memory": null,
"memoryReservation": null,
"volumesFrom": [],
"stopTimeout": null,
"image": "csrepo/test-web-v4.0.6",
"startTimeout": null,
"dependsOn": null,
"disableNetworking": null,
"interactive": null,
"healthCheck": null,
"essential": true,
"links": null,
"hostname": null,
"extraHosts": null,
"pseudoTerminal": null,
"user": null,
"readonlyRootFilesystem": null,
"dockerLabels": null,
"systemControls": null,
"privileged": null,
"name": "test-web-six"
}
],
"placementConstraints": [],
"memory": "2048",
"taskRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole",
"compatibilities": [
"EC2",
"FARGATE"
],
"taskDefinitionArn": "arn:aws:ecs:us-west-2:aws_account_id:task-definition/deploy-test-web3:4",
"family": "deploy-test-web3",
"requiresAttributes": [
{
"targetId": null,
"targetType": null,
"value": null,
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"targetId": null,
"targetType": null,
"value": null,
"name": "ecs.capability.execution-role-awslogs"
},
{
"targetId": null,
"targetType": null,
"value": null,
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"targetId": null,
"targetType": null,
"value": null,
"name": "ecs.capability.private-registry-authentication.secretsmanager"
},
{
"targetId": null,
"targetType": null,
"value": null,
"name": "com.amazonaws.ecs.capability.task-iam-role"
},
{
"targetId": null,
"targetType": null,
"value": null,
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"targetId": null,
"targetType": null,
"value": null,
"name": "ecs.capability.task-eni"
}
],
"pidMode": null,
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "1024",
"revision": 4,
"status": "ACTIVE",
"inferenceAccelerators": null,
"proxyConfiguration": null,
"volumes": []
}
ECRリポジトリを削除して再作成することでこの問題を解決しました
このAWS管理ポリシーを追加してみてください:AmazonEC2ContainerServiceforEC2Role