【发布时间】:2019-06-25 02:30:24
【问题描述】:
我有一个设置 Ubuntu 服务器的 YAML 脚本。在它的 UserData 部分下,我有一个包含信息的 HTML 文档。我希望服务器的 AWS 区域和公共 DNS 名称在创建后显示在网页上。
我在第 8、9 行有变量,它们应该找到 EC2 可用区并通过它解析以找到特定区域。第 11 行包含公共 DNS 的变量。最初,我尝试使用“sed”命令将 HTML 页面上的值(%AWS_REGION% 和 %DNS_HOSTNAME%)替换为变量。当我在运行脚本后检查页面时,没有任何东西被替换。 (即显示“AWS 区域:%AWS_REGION%”。)
然后我尝试了下面的代码,我用 $EC2_REGION 替换了 %AWS_REGION%,希望该变量会被替换,但是当我运行脚本时,它是空白的(即在“AWS 区域:”之后什么都没有,上次 %AWS_REGION% 在那里。)
UserData:
'Fn::Base64': |
#!/bin/bash -x
# set timezone
timedatectl set-timezone America/New_York
# get region
EC2_AVAIL_ZONE=curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed 's/[a-z]$//'`"
# get DNS
EC2_DNS=`curl http://169.254.169.254/latest/meta-data/public-hostname`
# install and setup apache
apt-get update
apt-get install -y nginx
cd /var/www/html
echo "<title>Jonah Ryder</title> <h1>Jonah Ryder</h1> <p>AWS region: $EC2_REGION</p> <p>Public hostname: %DNS_HOSTNAME%</p>" > index.html
sed 's/%AWS_REGION%/EC2_REGION/g' index.html
sed 's/%DNS_HOSTNAME%/EC2_DNS/g' index.html
service nginx start
我希望 HTML 页面获取变量并显示它们。我不知道我的错误在哪里。
【问题讨论】:
-
您是否验证过 index.html 中的内容发生了变化? index.html 位于何处? EC2 启动序列中的用户数据脚本由“root”用户运行。您不应该使用 index.html 的完整绝对路径吗?
-
@marekful 我通过在 AWS 上创建堆栈来验证内容的变化。索引文件获得它自己的 IP 地址并且可以访问。 Index.html 位于 AWS IIRC 上的 Ubuntu 18.04 服务器上的目录中,但根据我给出的示例代码,我认为我不需要完整路径。
标签: amazon-web-services amazon-ec2 yaml