用户数据脚本中的AWS公共IPv4

时间:2017-07-07 11:49:37

标签: amazon-web-services amazon-ec2 sed ipv4

我需要动态发现我的实例的ip4v地址(在用户数据脚本执行期间使用它来替换一些XML。我已经尝试了以下但是它没有工作。大概是因为网络不是&#39 ;当实例运行userdata脚本时可用?

此外,为了增加复杂性,假设此实例没有外部互联网访问权限(因此其他解决方案表明curl http://checkip.amazonaws.com/无法正常工作)。

sudo sed -i -e "s,<listenaddress address=\",<listenaddress address=\"$(wget -qO- http://instance-data/latest/meta-data/public-ipv4),g" /tmp/my.config.xml

我使用默认的Amazon AMI(Amazon Linux AMI 2017.03.1(HVM),SSD卷类型 - ami-ed100689)

有什么想法吗?

编辑:完整用户数据脚本

#!/bin/bash
# This script starts a extra small service with 512MB heap.
# USE ONLY FOR DEMOS
sudo useradd myuser
sudo groupadd myuser
sudo usermod -a -G myuser myuser
sudo yum update -y
sudo yum install java-1.8.0-openjdk wget -y
sudo wget https://files.mysite.com/downloads/service/whatever.jar -P /opt
sudo /usr/bin/java8 -jar /opt/whatever.jar -b 64 -t /opt/software
sudo chown -R myuser:myuser /opt/software
sudo cp /opt/software/init.d/serviceFile /etc/init.d

# Other SED commands on /etc/init.d/serviceFile which ARE working

sudo chkconfig --add /etc/init.d/serviceFile

# Start service to generate XML config file
sudo service serviceFile start

# Stop service to release file locks
sudo service serviceFile stop

# Lookup IP and do replacement <-- Problem here 
sudo sed -i -e "s,<listenaddress address=\",<listenaddress address=\"$(wget -qO- http://instance-data/latest/meta-data/public-ipv4),g" /opt/software/conf/collector.config.xml

# Restart service
sudo service serviceFile start

2 个答案:

答案 0 :(得分:0)

执行脚本后可能会创建/tmp/my.config.xml。请记住,在启动实例时,/tmp中的所有内容都将被清除。

我尝试使用/home/ec2-user/my.config.xml并且它有效。

答案 1 :(得分:0)

curl http://169.254.169.254/latest/meta-data/public-ipv4

您可以从此ip

获取有关当前实例的大量数据

enter image description here

/var/log/cloud-init-output.log