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
我正在 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