web-dev-qa-db-ja.com

ECSが役割を引き受けることができません

コンソールから、バッチジョブを送信するラムダを呼び出しています。バッチジョブは失敗し、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"
        }
      }
    ]
  }
}

呼び出し方法に問題がありますか?私のユーザーは管理者権限を持っているので、これはユーザーの権限が不十分なことによる問題ではないと思います。

25
Nate Reed

バッチジョブを送信する役割の信頼ポリシーに( "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": "/"
      }
    },
33
Nate Reed

Batchサービスを呼び出すには、ECSに信頼ポリシーを追加する必要があります。

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