在 CloudFormation 中使用 Sub 函数是否会妨碍 bash 脚本的使用?

Does using the Sub function in CloudFormation hinder the use of bash scripts?

我在 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,但是将它放在 #!/bin/bash 之前似乎只是将用户锁定在创建的实例之外(密钥不被接受?)子功能。

非常感谢您的帮助!

您正在将脚本复制到 /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}