在 Cloudformation 模板中引用动态角色名称

Posted

技术标签:

【中文标题】在 Cloudformation 模板中引用动态角色名称【英文标题】:Reference a dynamic role name in a Cloudformation template 【发布时间】:2021-06-07 01:34:49 【问题描述】:

在一个 Cloudformation 模板中,我创建了以下角色:

  CRMPiccoRole:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: !Sub 'crm-$Environment-register'

在另一个 EC2 实例的 Cloudformation 模板中,我尝试将该角色附加到我的 EC2 实例,但是我不确定如何引用 动态 角色名称。

Resources:
  InstanceProfile:
    Type: 'AWS::IAM::InstanceProfile'
    Properties:
      Path: /
      Roles:
        - !Ref 'crm-$Environment-register'

这个可以吗?

当我尝试验证模板时出现错误:

调用 ValidateTemplate 时发生错误 (ValidationError) 操作:模板格式错误:未解决的资源依赖关系 [crm-$Environment-register] 在模板的 Resources 块中

【问题讨论】:

【参考方案1】:

Ref 不能跨堆栈工作。假设您使用的是相同的帐户和地区,则必须使用Export 和ImporValue 函数。

因此,在您的第一个堆栈中,您将拥有:

  CRMPiccoRole:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: !Sub 'crm-$Environment-register'

Outputs:

   MyCRMPiccoRole:
     Value: !Ref CRMPiccoRole
     Export:
        Name: !Sub 'crm-$Environment-register'

第二个堆栈

Resources:
  InstanceProfile:
    Type: 'AWS::IAM::InstanceProfile'
    Properties:
      Path: /
      Roles:
        - Fn::ImportValue:
            !Sub 'crm-$Environment-register'

【讨论】:

以上是关于在 Cloudformation 模板中引用动态角色名称的主要内容,如果未能解决你的问题,请参考以下文章

可以使用StringList类型的cloudformation SSM动态引用解析列表吗?

如何在我的新 CloudFormation 模板中引用现有角色?

在 AWS CloudFormation 模板中引用 !Ref DynamoDB 表名

在 CloudFormation 模板中引用 AWS Parameter Store 的安全字符串

使用 cloudformation 模板的 AWS Lambda 的动态环境变量

在 AWS CloudFormation 模板中,如何使用自己的 Id 标记 EC2 实例而不会出现循环引用错误?