コンソールから、バッチジョブを送信するラムダを呼び出しています。バッチジョブは失敗し、ECSがジョブ定義を実行するために提供された役割を引き受けることができないことを示します。
この役割のために、ラムダとECSサービスを追加しました。
エラーメッセージ:
「ECSは、このタスクに提供されたロール 'arn:aws:iam :: 749340585813:role/golfnow-invoke-write-progress'を引き受けることができませんでした。渡されたロールが適切な信頼関係と許可を持っていることを確認してください。 IAMユーザーにこのロールを渡す権限があることを確認してください。」
"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": "/"
}
}
バッチジョブ:
"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"
}
}
]
}
}
呼び出し方法に問題がありますか?私のユーザーは管理者権限を持っているので、これはユーザーの権限が不十分なことによる問題ではないと思います。
バッチジョブを送信する役割の信頼ポリシーに( "ecs.amazonaws.com"ではなく)プリンシパル "ecs-tasks.amazonaws.com"を追加する必要があります。
改訂された役割:
"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": "/"
}
},
Batchサービスを呼び出すには、ECSに信頼ポリシーを追加する必要があります。
"Principal": {
"Service": [
"batch.amazonaws.com"
]
},