【问题标题】:AWS CloudFormation EC2 UserData - Using an "!If"AWS CloudFormation EC2 UserData - 使用“!如果”
【发布时间】:2021-12-31 01:05:18
【问题描述】:

我正在 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 中的任何其他技巧。像这样的:

      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 [UseNewJoinString, "export A=abc", "export A=xyz"]
  • @jarmod,这似乎不起作用...但感谢您的想法...有时这会导致最佳答案!

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢马尔科。这比我希望添加的复杂性更高,但我会接受你的回答,因为这可能是我能看到的唯一可以让我到达我要去的地方的路径。
  • 谢谢。我在这个链接 (singlestoneconsulting.com/blog/…) 后面看到了一个 UserData 中的 If 函数示例,它看起来与上面@jarmod 提出的非常相似。毕竟,也许可以在 CFn 模板中做到这一点。
【解决方案2】:

我选择将“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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2019-06-27
    • 2019-05-06
    • 2017-07-27
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    相关资源
    最近更新 更多