【问题标题】:How to attach AmazonEC2RoleforSSM to ec2 instance in a CloudFormation script如何在 CloudFormation 脚本中将 AmazonEC2RoleforSSM 附加到 ec2 实例
【发布时间】:2020-10-30 20:33:02
【问题描述】:

我正在尝试调出多个 ec2 实例 cloudformation 脚本。我正在使用 shell 脚本循环 aws cloudformation create-stack 命令并成功启动多个实例。

现在我需要在附加了 SSM 角色的情况下启动这些实例。但是,我看不到在脚本中使用现有角色的任何方式。因此,我需要在脚本中重新创建角色:

AWSTemplateFormatVersion: 2010-09-09
Description: Compact template for creating an ec2 instance for SPT

Resources:
  IAMRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: SPTvacmRole
      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/AmazonEC2RoleforSSM

  InstanceProfile1:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Path: "/"
      Roles:
        - Ref: IAMRole

  ec2instance1:
    Type: AWS::EC2::Instance
    Properties:
      SubnetId: subnet-0da86f65478f3d30a
      KeyName: spt-lab
      ImageId: ami-00344ae218e7aae62
      InstanceType: t2.nano
      IamInstanceProfile: !Ref InstanceProfile1
      SecurityGroupIds:
        - sg-0d3fae6860ce71c91

这只能执行一次,因为到循环第二次执行命令时,角色 SPTvacmRole 已经存在,堆栈失败。

我已经从控制台手动创建了一个角色,使用 AmazonEC2RoleForSSM 策略并将其命名为 EC2RoleForSSM,但是当我尝试在 InstanceProfile1 中通过其名称 -Ref: EC2RoleForSSM 引用该角色而不创建 IAMRole 时,它​​会给出错误提示 模板格式错误:模板资源块中未解决的资源依赖项[EC2RoleForSSM]

如何在脚本中使用预先存在的角色 EC2RoleForSSM 而无需重新创建?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-cloudformation amazon-iam


    【解决方案1】:

    但是,我看不到在脚本中使用现有角色的任何方式。我需要在脚本中重新创建角色

    如何在脚本中使用预先存在的角色 EC2RoleForSSM 而无需重新创建?

    如果角色存在,则无法在 CloudFormation 中创建相同的角色。相反,您应该导入它

    AWS::IAM::Rolecan be imported 进入 CloudFormation 的资源之一。

    如果您只想在模板中引用它,@ChrisWilliams 已经解释了如何做。

    【讨论】:

    • 感谢 Marcin 提供一些相当有趣的文档。这肯定会对我有所帮助。
    • @RameshMenon 没问题。很高兴问题得到解决。
    【解决方案2】:

    您不应包含 Ref 函数,因为它用于从参数或资源中检索值。

    只需使用字符串EC2RoleForSSM,如下所示。

      InstanceProfile1:
        Type: AWS::IAM::InstanceProfile
        Properties:
          Path: "/"
          Roles:
            - EC2RoleForSSM
    

    【讨论】:

    • 非常感谢克里斯指出这个相当愚蠢的错字。
    • 没问题,很高兴我能帮忙:)
    猜你喜欢
    • 2017-12-05
    • 2017-04-25
    • 2019-06-22
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2021-05-31
    相关资源
    最近更新 更多