在 CloudFormation 中使用 Sub 函数会妨碍 bash 脚本的使用吗?
Posted
技术标签:
【中文标题】在 CloudFormation 中使用 Sub 函数会妨碍 bash 脚本的使用吗?【英文标题】:Does using the Sub function in CloudFormation hinder the use of bash scripts? 【发布时间】:2021-11-11 18:01:47 【问题描述】:我在 Auto Scaling 组的 CloudFormation LaunchTemplate 中有以下 UserData。前两个命令没有问题,第三个没有被调用。没有 Sub 函数,一切顺利,但是我们的代码已经发展到需要将该 EBS 变量传递到某个地方(但不一定在 bash 脚本中)。我这样做的方式是不好的做法吗?如果没有,我如何确保最后一行被执行?
Fn::Base64:
!Sub
- |
#!/bin/bash
echo $EBS > /home/ubuntu/test.txt
aws s3 cp s3://s3url/script.sh /home/ubuntu
bash script.sh "$(curl http://169.254.169.254/latest/meta-data/local-ipv4)" "$(cat /home/ubuntu/test.txt)"
- EBS: !Ref DevEBS
我使用过 cloud-boothook,但是在与 Sub 函数一起使用时,将其放在 #!/bin/bash 之前似乎会将用户锁定在创建的实例之外(密钥不被接受?)。
非常感谢您的帮助!
【问题讨论】:
使用set -x
这样你就可以得到错误的调试输出。
@jordanm 的语法是什么样的?
字面意思是set -x
在#!/bin/bash
之后。
【参考方案1】:
您正在将脚本复制到/home/ubuntu
。但是您的用户数据在 根文件夹 中运行。因此,您的后续命令将不起作用。你必须 cd 进入 /home/ubuntu
:
Fn::Base64:
!Sub
- |
#!/bin/bash
echo $EBS > /home/ubuntu/test.txt
aws s3 cp s3://s3url/script.sh /home/ubuntu
cd /home/ubuntu
bash script.sh "$(curl http://169.254.169.254/latest/meta-data/local-ipv4)" "$(cat /home/ubuntu/test.txt)"
- EBS: !Ref DevEBS
【讨论】:
以上是关于在 CloudFormation 中使用 Sub 函数会妨碍 bash 脚本的使用吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 Cloudformation YAML 中,在多行字符串中使用 Ref(?使用 Fn:Sub)
如何在 cloudformation“Fn::Sub”中转义“$”
AWS CloudFormation:结合 ImportValue 和 Sub 函数会导致错误