我需要动态发现我的实例的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