AWS CloudFormation EC2 用户数据 - 使用“!If”

AWS CloudFormation EC2 UserData - Using an "!If"

我正在 CloudFormation 模板的 UserData 部分创建一个 .bashrc 文件

      UserData:
        Fn::Base64:
          !Sub |
            #!/bin/bash -xe

此时,我想根据条件使用两个语句之一。要么

      UserData:
        Fn::Base64:
          !Sub |
            #!/bin/bash -xe
            echo "export JOIN_STR=${ExistingJoinString}" >> /home/ec2-user/.bashrc

      UserData:
        Fn::Base64:
          !Sub |
            #!/bin/bash -xe
            echo "export JOIN_STR=${CRDBIPNode01.PrimaryPrivateIpAddress},${CRDBIPNode02.PrimaryPrivateIpAddress},${CRDBIPNode03.PrimaryPrivateIpAddress}" >> /home/ec2-user/.bashrc

我已经定义了条件:

Conditions: 
  UseNewJoinString: !Equals [!Ref ExistingJoinString, NONE]

有谁知道使用“!If”语句的方法,或者我可以用来控制哪个语句最终出现在我的 .bashrc 中的任何其他 hack。像这样:

      UserData:
        Fn::Base64:
          !Sub |
            #!/bin/bash -xe
            !If
              - UseNewJoinString
              -
                echo "export JOIN_STR=${CRDBIPNode01.PrimaryPrivateIpAddress},${CRDBIPNode02.PrimaryPrivateIpAddress},${CRDBIPNode03.PrimaryPrivateIpAddress}" >> /home/ec2-user/.bashrc
              -
                echo "export JOIN_STR=${ExistingJoinString}" >> /home/ec2-user/.bashrc

在此先感谢您的帮助和见解。

我选择将“if”语句直接嵌入我的 .bashrc

            echo "if [ '${ExistingJoinString}' = 'NONE' ]; then"  >> /home/ec2-user/.bashrc
            echo "  export JOIN_STR=${CRDBIPNode01.PrimaryPrivateIpAddress},${CRDBIPNode02.PrimaryPrivateIpAddress},${CRDBIPNode03.PrimaryPrivateIpAddress}" >> /home/ec2-user/.bashrc
            echo "else"  >> /home/ec2-user/.bashrc
            echo "  export JOIN_STR=${ExistingJoinString}" >> /home/ec2-user/.bashrc
            echo "fi"  >> /home/ec2-user/.bashrc

对这个解决方案不是很满意,但它确实有效。仍在寻找更好的想法。

我目前正在学习 CloudFormation,并不知道所有的技巧,但是使用宏来修改模板是否是一个可能的解决方案?

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/macros-example.html