我有一个带cfn-init的CFN,用于使用指定的虚拟主机部署Apache Web服务器。在模板中,我使用AWS :: CloudFormation :: Init配置集将本地IP替换为实例的私有IP。
config:
packages:...
files:...
services:...
commands:
replacePrivateIP:
cwd: "/etc/httpd/conf"
command: !Sub |
sed -i 's@127.0.0.1@$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)@g' httpd.conf
sed命令在CFN模板之外可以正常工作。但是,在CFN-init进程中,它只是用整个$(curl -s http://..。)字符串替换了“ 127.0.0.1”。
如何通过cfn-init将实例专用IP正确地输入到httpd.conf文件中?
答案 0 :(得分:1)
命令替换语法$(..)
在用单引号引起来时{em>不不起作用,这在bash
或大多数其他shell中都是预期的,因为它们保留了内部的文字值。为了进行替换,请将其放在双引号内
sed -i 's@127.0.0.1@'"$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)"'@g' httpd.conf
比较echo '$(date)'
和echo "$(date)"
的输出,以得出简单的案例。