Я создал AWS VPC
и я пытаюсь развернуть функциональный контейнер в ECS
на Fargate launch type
но задача всегда терпит неудачу:
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"
]
}
]
}
В целях безопасности фактический идентификатор заменяется на 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 при прочих равных условиях (если применимо) ИСКЛЮЧАЯ
EC2: Network Mode = Bridge
Fargate: Network Mode = awsvpc
Контейнер подготавливает и запускает - и веб-приложение, которое работает в контейнере, работает нормально. Но в 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