CloudFormation中AWS Batch JobDefinition的ExecutionRoleArn无法使用!Ref
问题原因
当你用!Ref引用IAM角色资源时,CloudFormation返回的是角色名称,而非ARN。AWS Batch的JobRoleArn字段兼容角色名称(服务会自动将名称解析为ARN),但ExecutionRoleArn字段要求必须传入完整的ARN字符串,不能用角色名称,这就是报错的核心原因。
解决方法
把ExecutionRoleArn的!Ref替换为能获取角色ARN的CloudFormation函数即可,有两种常用方式:
方式1:使用!GetAtt获取ARN
直接通过!GetAtt函数获取角色的ARN属性:
JobDefinition: Type: AWS::Batch::JobDefinition Properties: # 其他配置... JobRoleArn: !Ref SecretsAndS3AccessRole ExecutionRoleArn: !GetAtt SecretsAndS3AccessRole.Arn
方式2:使用!Sub构造ARN
通过!Sub结合账户ID和角色名称拼接ARN:
JobDefinition: Type: AWS::Batch::JobDefinition Properties: # 其他配置... JobRoleArn: !Ref SecretsAndS3AccessRole ExecutionRoleArn: !Sub arn:aws:iam::${AWS::AccountId}:role/${SecretsAndS3AccessRole}
这两种方式都能给ExecutionRoleArn传入合法的ARN,解决部署报错的问题。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

