AWS Batch CLIENT_ERROR无效的IamInstanceProfile

Ale*_*off 4 amazon-ec2 amazon-web-services amazon-ecs

最初发布到ServerFault,但发布在这里希望有人可能遇到我的问题.

我正在尝试设置一个在AWS Batch上运行的容器.我没有做任何花哨的事情,或多或少只是遵循默认设置的一切.我收到的错误似乎与实例角色或与实例角色关联的权限有关.

设置起初没有问题.我设置了我的计算环境,然后是我的队列,然后我将一个基本作业添加到队列中.作业最终陷入可运行状态,然后在20分钟左右后,我的计算环境变为"INVALID",出现此错误:

CLIENT_ERROR - Invalid IamInstanceProfile: arn:aws:iam::001234567890:role/ecsInstanceRole (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError; Request ID: blah)
Run Code Online (Sandbox Code Playgroud)

我阅读了这个故障排除指南,它似乎解决了相关问题(尽管它们并不完全匹配).我尝试过5到6次重复环境,没有运气.我也尝试删除现有角色并让管理员重新创建它们.故障排除指南中的大多数问题似乎源于在AWS CLI中错误设置的角色或某些非批处理控制台需求.该指南甚至会读到"AWS Batch控制台仅显示对计算环境具有正确信任关系的角色".但是我使用的所有角色都是通过控制台选择的,这似乎意味着他们得到了正确的许可.

不知道该怎么做,感谢任何帮助.

Ale*_*tch 9

有点令人困惑的是instanceRole,AWS Batch Compute Environment 的属性必须引用IAM 实例配置文件 ARN而不是IAM 角色 ARN.也就是说,instanceRole值应该看起来arn:aws:iam::123456789012:instance-profile/ecsInstanceRole而不是arn:aws:iam::123456789012:role/ecsInstanceRole.但是,错误消息实际上提到了实例配置文件.

以下CloudFormation代码段创建了有效的批处理计算环境:

Parameters:
    VPC:
        Type: String
        Description: VPC ID of the target VPC
    Subnet:
        Type: List<AWS::EC2::Subnet::Id>
        Description: VPC subnet(s) for batch instances
    SG:
        Type: List<AWS::EC2::SecurityGroup::Id>
        Description: VPC Security group ID(s) for batch instances

Resources:
    MyBatchEnvironment:
        Type: "AWS::Batch::ComputeEnvironment"
        Properties:
            Type: MANAGED
            ServiceRole: !GetAtt MyBatchEnvironmentRole.Arn
            ComputeResources:
                MaxvCpus: 8
                SecurityGroupIds: !Ref SG
                Subnets: !Ref Subnet
                InstanceRole: !GetAtt MyBatchInstanceProfile.Arn
                MinvCpus: 0
                DesiredvCpus: 0
                Type: EC2
                InstanceTypes:
                    - optimal

    MyBatchEnvironmentRole:
        Type: "AWS::IAM::Role"
        Properties:
            AssumeRolePolicyDocument:
                Version: '2012-10-17'
                Statement:
                    - Effect: Allow
                      Principal: {Service: "batch.amazonaws.com"}
                      Action: "sts:AssumeRole"
            Path: /service-role/
            ManagedPolicyArns:
                - "arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole"

    MyBatchInstanceRole:
        Type: "AWS::IAM::Role"
        Properties:
            AssumeRolePolicyDocument:
                Version: '2012-10-17'
                Statement:
                    - Effect: Allow
                      Principal: {Service: "ec2.amazonaws.com"}
                      Action: "sts:AssumeRole"
            Path: /
            ManagedPolicyArns:
                - "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role"

    MyBatchInstanceProfile:
        Type: "AWS::IAM::InstanceProfile"
        Properties:
            Path: "/"
            Roles:
                - !Ref MyBatchInstanceRole
Run Code Online (Sandbox Code Playgroud)

  • 这就是为我解决问题的原因.在使用Terraform并在`aws_iam_instance_profile`上提供了'aws_iam_role`时,奇怪的是我没有给出错误. (2认同)

小智 1

谢谢你让我们注意到这一点。我们已经解决了此问题的根本原因,控制台现在应该可以按预期工作。请再试一次,如果您遇到任何其他错误,请告诉我们。

AWS Batch 团队的 Jamie

  • 我们一小时前收到此消息:`CLIENT_ERROR - Invalid IamInstanceProfile: ecsInstanceRole (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError; Request ID: dc1d2331-9f01-11e7-b9f4-f30a0d560be6)` 这是否与描述的问题相同以上,还是我们的角色有问题? (2认同)