AWS Cloudformation:有条件地创建资源属性

pka*_*mol 5 amazon-web-services aws-cloudformation

我知道可以通过使用条件来有条件地(还有什么?)创建资源。

我试图找到一种方法,尽管可以有条件地创建资源的属性。

在我的情况下,我正在EC2使用默认public ip assignment =的子网中创建多个实例false

有时,尽管出于调试目的,我还是希望实例获得公共IP。

现在,我必须在SG / Subnet和NetworkInterfaces下面的属性中进行评论(这些属性不能一起使用)

  myEC2:
    Type: AWS::EC2::Instance
    Metadata:
      Comment: My EC2 Instance
      AWS::CloudFormation::Init:
        config:
          commands:
            01_provision:
              command:
                !Sub |
                  sed -i "s/somestring/${somevar}/" /some/path/
    CreationPolicy:
      ResourceSignal:
        Timeout: PT4M
    Properties:
      ImageId: !FindInMap [ MyAamiMap, 'myami', amiid ]
      InstanceType: "t2.2xlarge"
      # SubnetId: !Ref SBNDemo1
      # SecurityGroupIds: [!Ref SGInternalDemo]
      NetworkInterfaces:
        - AssociatePublicIpAddress: "true"
          DeviceIndex: "0"
          GroupSet:
            - Ref: "SGInternalDemo"
          SubnetId:
            Ref: "SBNDemo1"
      UserData:
        "Fn::Base64":
          !Sub |
            #!/bin/bash -xe
            # Start cfn-init
            /usr/local/bin/cfn-init -s ${AWS::StackId} -r myEC2 --region ${AWS::Region} || echo 'Failed to run cfn-init'
            # All done so signal success
            /usr/local/bin/cfn-signal -e $? --stack ${AWS::StackId} --resource myEC2 --region ${AWS::Region}
Run Code Online (Sandbox Code Playgroud)

有什么建议么?

小智 11

这可能会有点晚,但是我最近有一个相同的问题。

AWS文档中,您可以使用Fn :: If相应地设置属性。

该模板如下所示:

Properties:
  ImageId: !FindInMap [ MyAamiMap, 'myami', amiid ]
  InstanceType: "t2.2xlarge"
  # SubnetId: !Ref SBNDemo1
  # SecurityGroupIds: [!Ref SGInternalDemo]
  NetworkInterfaces:
    !If
    - YourCondition
    - 
      AssociatePublicIpAddress: "true"
      DeviceIndex: "0"
      GroupSet:
        - Ref: "SGInternalDemo"
      SubnetId:
        Ref: "SBNDemo1"
    - !Ref "AWS::NoValue"
Run Code Online (Sandbox Code Playgroud)

AWS :: NoValue表示将不设置NetworkInterfaces属性。

  • 这个“AWS::NoValue”是我几个月来一直在寻找的东西,用于根据参数为 CodeBuild 项目有条件地启用 Webhook。是只有我一个人还是这没有足够的记录?谢啦! (2认同)