it-swarm.com.de

Amazon ECS-Task schlägt mit STOPPED fehl (CannotPullContainerError: Fehlerantwort von daem)

Ich habe einen AWS VPC Einrichtet und versuche, einen Funktionscontainer in ECS auf einem Fargate launch type Bereitzustellen, aber die Aufgabe schlägt immer fehl mit:

STOPPED (CannotPullContainerError: Error response from daem)

Aufgabenrollenkontext:

ecsTaskExecutionRole

Welches hat die folgenden IAM-Berechtigungen:

(enter image description here

Die Repo-Berechtigungen sind wie folgt:

{
  "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"
      ]
    }
  ]
}

Aus Sicherheitsgründen wird die tatsächliche ID durch aws_account_id Ersetzt.

Ich habe diese Anleitung zur Fehlerbehebung befolgt, in der es heißt:

Sie können diesen Fehler aufgrund eines der folgenden Probleme erhalten:

  • Ihr Starttyp hat keinen Zugriff auf den Amazon ECR-Endpunkt

    Ich glaube Fargate hat Zugang zu ECR

  • Ihre Amazon ECR-Repository-Richtlinie beschränkt den Zugriff auf Repository-Images

    Ich glaube, es erlaubt pull access Für die verwendete Rolle - siehe Repo-Berechtigungen oben.

  • Ihre IAM-Rolle (AWS Identity and Access Management) verfügt nicht über die richtigen Berechtigungen zum Abrufen oder Push-Senden von Bildern

    Ich glaube, es hat die erforderlichen Berechtigungen - siehe Kontext der Aufgabenrolle oben.

  • Das Bild kann nicht gefunden werden

    Das Bild ist in ECR und die Berechtigungen sind oben

  • Der Zugriff auf den Amazon Simple Storage Service (Amazon S3) wird von Ihrer Amazon VPC-Gateway-Endpunktrichtlinie (Virtual Virtual Cloud) verweigert

    Ich glaube schon. Die IAM-Berechtigung ist wie oben angegeben festgelegt S3 read access. Außerdem wurde keine explizite Endpunktrichtlinie eingerichtet, was laut docs standardmäßig vollen Zugriff bedeutet.

Zum Abrufen von Bildern muss Amazon ECS mit dem Amazon ECR-Endpunkt kommunizieren.

In der VPC definierte Routing-Tabelle:

(enter image description here

mit allen zugeordneten Subnetzen der VPC. Daher sollte die VPC und alles, was darin ausgeführt wird, das Internet sehen können. Die für die Aufgabe verwendete Sicherheitsrichtlinie erlaubt derzeit alle Ports (temporär bei der Fehlerbehebung bei ECR-Problemen).

Was fehlt mir, dass ich immer noch diesen Fehler erhalte?

Dies funktioniert mit einer EC2-Instanz - Wenn ich eine Aufgabe erstelle, die eine EC2-Instanz verwendet, wobei alle anderen Dinge gleich sind (sofern zutreffend), AUSSER

EC2:  Network Mode = Bridge 
Fargate: Network Mode = awsvpc

Der Container wird bereitgestellt und ausgeführt - und die Web-App, die im Container ausgeführt wird, wird normal ausgeführt. Aber in Fargate MUSS der Netzwerkmodus awsvpc sein

Fargate only supports network mode ‘awsvpc’.

Ich denke, hier liegt das Problem, aber ich weiß nicht, wie ich es beheben soll.

Die Aufgabendefinition lautet:

{
  "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": []
}
4
Roy Hinkley

Ich habe dieses Problem gelöst, indem ich das ECR-Repository entfernt und erneut erstellt habe

1
Pavel Bernshtam

Versuchen Sie, diese von AWS verwaltete Richtlinie hinzuzufügen: AmazonEC2ContainerServiceforEC2Role

0
Bryan