77 votes

ECS incapable d'assumer le rôle

À partir de la console, je suis en invoquant un lambda qui présente un lot de travail. Le lot de travail échoue, indiquant que l'ECS est pas en mesure d'assumer le rôle qui est fourni pour exécuter le travail de définition.

Pour le rôle, j'ai ajouté le lambda et les services ECS.

Le message d'erreur:

"ECS était pas en mesure d'assumer le rôle 'arn:aws:iam::749340585813:rôle/golfnow-invoke-écrire-le progrès" que a été fournie pour cette tâche. Veuillez vérifier que le rôle d'être passée a la bonne relation de confiance et d'autorisations et que votre IAM l'utilisateur dispose des autorisations nécessaires pour passer ce rôle."

"TrainingJobRole": {
  "Type": "AWS::IAM::Role",
  "Properties": {
    "RoleName": "golfnow-invoke-write-progress",
    "AssumeRolePolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "lambda.amazonaws.com",
              "ecs.amazonaws.com"
            ]
          },
          "Action": [
            "sts:AssumeRole"
          ]
        }
      ]
    },
    "Path": "/"
  }
}

Le lot de travail:

    "TrainingJob": {
  "Type": "AWS::Batch::JobDefinition",
  "Properties": {
    "Type": "container",
    "JobDefinitionName": {
      "Fn::Sub": "c12e-golfnow-${Environment}-job"
    },
    "ContainerProperties": {
      "Image": {
        "Fn::Join": [
          "",
          [
            "{{ image omitted }}",
            {
              "Ref": "AWS::Region"
            },
            ".amazonaws.com/amazonlinux:latest"
          ]
        ]
      },
      "Vcpus": 2,
      "Memory": 2000,
      "Command": [
        "while", "True", ";", "do", "echo", "'hello';", "done"
      ],
      "JobRoleArn": {
        "Fn::GetAtt": [
          "TrainingJobRole",
          "Arn"
        ]
      }
    },
    "RetryStrategy": {
      "Attempts": 1
    }
  }
},
"JobQueue": {
  "Type": "AWS::Batch::JobQueue",
  "Properties": {
    "Priority": 1,
    "ComputeEnvironmentOrder": [
      {
        "Order": 1,
        "ComputeEnvironment": {
          "Ref": "ComputeEnvironment"
        }
      }
    ]
  }
}

Est le problème avec la façon dont il a été invoqué? Mon utilisateur a des privilèges d'administrateur, donc je ne pense pas que ce soit un problème avec mon utilisateur disposant d'autorisations insuffisantes.

106voto

Nate Reed Points 1345

Vous devez ajouter le principal "ecs-tasks.amazonaws.com" à la stratégie d'approbation pour le rôle qui soumet un travail par lots (pas "ecs.amazonaws.com").

Rôle révisé:

 "TrainingJobRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": "golfnow-invoke-write-progress",
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "lambda.amazonaws.com",
                  "ecs-tasks.amazonaws.com"
                ]
              },
              "Action": [
                "sts:AssumeRole"
              ]
            }
          ]
        },
        "Path": "/"
      }
    },
 

1voto

Vous devez ajouter une stratégie d'approbation à ECS pour appeler le service Batch.

    "Principal": {
      "Service":  [
            "batch.amazonaws.com"
      ]
    },
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X