最初发布到ServerFault,但发布在此处希望有人可能遇到我的问题。
我正在尝试设置一个在AWS Batch上运行的容器。我没有做任何花哨的事情,或多或少只是遵循默认设置的一切。我收到的错误似乎与实例角色或与实例角色关联的权限有关。
首先,设置顺利进行。我设置了我的计算环境,然后是我的队列,然后我将一个基本作业添加到队列中。作业最终陷入可运行状态,然后在20分钟左右后,我的计算环境变为“无效”,出现此错误:
CLIENT_ERROR - Invalid IamInstanceProfile: arn:aws:iam::001234567890:role/ecsInstanceRole (Service: AmazonAutoScaling; Status Code: 400; Error Code: ValidationError; Request ID: blah)
我读了this troubleshooting guide,它似乎解决了相关问题(尽管它们并不完全匹配)。我尝试过5到6次重复环境,没有运气。我也尝试删除现有角色并让管理员重新创建它们。故障排除指南中的大多数问题似乎源于在AWS CLI中错误设置的角色或某些非批处理控制台需求。该指南甚至会读到“AWS Batch控制台仅显示对计算环境具有正确信任关系的角色”。但是我使用的所有角色都是通过控制台选择的,这似乎意味着他们得到了正确的许可。
不知道该怎么做,感谢任何帮助。
答案 0 :(得分:6)
有点令人困惑的是,AWS Batch Compute Environment的instanceRole
属性必须引用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
答案 1 :(得分:3)
感谢您提请我们注意。我们已经解决了此问题的根本原因,控制台现在应该按预期工作。如果您遇到任何进一步的错误,请再试一次,告诉我们。
来自AWS Batch团队的Jamie答案 2 :(得分:2)
我有完全相同的问题。我发现,在ec2InstanceRole下,它使用AmazonEC2ContainerServiceforEC2Role作为将EC2 Container Service作为服务的策略。这个服务有一个黄色三角形,结果是有一个无法识别的动作,即UpdateContainerInstancesState。
与Alex一样,我已将所有IAM保留为AWS批处理控制台自动创建。用于创建AmazonEC2ContainerServiceforEC2Role的JSON确实包含UpdateContainerInstancesState。但是,在AWS文档中它没有,因为它是AWS控制的角色,所以我无法改变任何内容。
非常感谢任何帮助。