Jim*_*lor 2 sed ipv4 amazon-ec2 amazon-web-services
我需要动态发现实例的 ip4v 地址(在 userdata 脚本执行期间并使用它来替换一些 XML。我已经尝试了以下方法,但它不起作用。大概是因为我们实例时网络不可用运行用户数据脚本?
此外,为了增加复杂性,假设此实例没有外部互联网访问权限(因此建议的其他解决方案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
Run Code Online (Sandbox Code Playgroud)
curl http://169.254.169.254/latest/meta-data/public-ipv4
Run Code Online (Sandbox Code Playgroud)
您可以从该 ip 获取有关当前实例的一堆数据
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |