如何在cron启动的Bash脚本中获取EC2实例的私有/公有IP?
获取EC2实例私有IP和公有IP的简便方法
私有IP获取方法
最可靠且通用的方式是利用AWS EC2实例元数据服务,完全不依赖hostname格式,适用于所有EC2实例:
# 推荐:通过EC2元数据服务获取私有IP(cron环境下建议用curl绝对路径) private_ip=$(/usr/bin/curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
如果不想依赖元数据服务,也可以通过系统网络命令直接提取:
# 从默认网卡(如eth0)提取私有IP,需根据实例网卡名称调整 private_ip=$(ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -n1) # 或通过hostname命令提取(仅当实例hostname映射到私有IP时有效) private_ip=$(hostname -I | awk '{print $1}')
公有IP获取方法
同样通过EC2元数据服务获取,这是官方推荐的标准方式:
# 获取公有IP(无弹性IP/私有子网实例会返回空值) public_ip=$(/usr/bin/curl -s http://169.254.169.254/latest/meta-data/public-ipv4)
说明
你之前通过hostname提取的方法受限于实例hostname的命名规则,一旦hostname自定义或格式变化就会失效。而元数据服务是EC2实例内置的本地服务,启动后即可访问,在@reboot场景下稳定性更高,且适用于所有EC2实例配置。
内容的提问来源于stack exchange,提问作者Neil C. Obremski
相关产品推荐
相关产品推荐

