如何解决如何将变量传递到AWS Cloudformation cfn-init文件内容
我想将实例UserData更改为MetaData:-> AWS :: CloudFormation :: Init:->文件:->内容。
我的困难在于我现有的UserData Bash脚本,因为它具有变量,并且我想在cfn-init文件的 content 部分中包含这些变量。
这是现有的UserData,这是我要转移到cfn-init的最后6行。在 content 部分中如何使用变量?
UserData:
Fn::Base64: |
#!/bin/bash -xe
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`
echo "This is Server * $ID * in AWS Region $REGION in AZ $AVAIL_ZONE<br>" > /var/www/html/index.html
EC2_AVAIL_ZONE=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
echo "<h1>Hello World from $(hostname -f) in AZ $EC2_AVAIL_ZONE </h1><br>" >> /var/www/html/index.html
解决方法
这可能有点棘手,但是您可以使用Fn::Sub
将参数插值到用户数据中:
UserData:
Fn::Base64:
Fn::Sub: |
#!/bin/bash -xe
echo "${ThisIsACloudFormationParameter}"
之所以挑剔,是因为CFN和Bash都可以使用${…}
样式进行变量替换,因此请确保仅对CFN参数使用该语法。
请注意,您可以将!Base64
和!Sub
速记用于其中一个功能,但不能同时使用两者,CFN不支持嵌套的速记功能调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。