Desde la consola, invoco una lambda que envía un trabajo por lotes. El trabajo por lotes falla, lo que indica que ECS no puede asumir la función que se proporciona para ejecutar la definición del trabajo.
Para el rol, agregué los servicios lambda y ECS.
El mensaje de error:
"ECS no pudo asumir el rol 'arn:aws:iam::749340585813:role/golfnow-invoke-write-progress' que se proporcionó para esta tarea. Verifique que el rol que se transfiere tenga la relación de confianza y los permisos adecuados y que su usuario de IAM tiene permisos para pasar este rol".
"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": "/" } }El trabajo por lotes:
"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" } } ] } }¿El problema es la forma en que se invoca? Mi usuario tiene privilegios de administrador, por lo que no creo que esto sea un problema porque mi usuario no tiene suficientes permisos.
Debe agregar el principal "ecs-tasks.amazonaws.com" a la política de confianza para el rol que envía un trabajo de Batch (no "ecs.amazonaws.com").
Rol revisado:
"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": "/" } },Y para aquellos que están escribiendo secuencias de comandos de CDK en Java, al definir TaskDefinition no es necesario que proporcione explícitamente ningún rol de taskRole y rol de executionRole . CDK creará el Rol adecuado para usted.
Deberá agregar una política de confianza a ECS para llamar al servicio Batch.
"Principal": { "Service": [ "batch.amazonaws.com" ] },