![如何在 CloudFormation 模板中使用 ElasticIP 时获取正确的主机名](https://linux22.com/image/609382/%E5%A6%82%E4%BD%95%E5%9C%A8%20CloudFormation%20%E6%A8%A1%E6%9D%BF%E4%B8%AD%E4%BD%BF%E7%94%A8%20ElasticIP%20%E6%97%B6%E8%8E%B7%E5%8F%96%E6%AD%A3%E7%A1%AE%E7%9A%84%E4%B8%BB%E6%9C%BA%E5%90%8D.png)
我在 CloudFormation 模板中使用弹性 IP
"ServerEIP" : {
"Type" : "AWS::EC2::EIP",
"Properties" : {
}
},
后来我有一个 EC2 实例
"Server" : {
"Type" : "AWS::EC2::Instance",
...
因为我想让多个实例之间的 IP 地址相互知道,所以请参阅这里,我使用 EIPAssociation 将弹性 IP 实际绑定到 EC2 实例:
"ServerIPAssoc" : {
"Type" : "AWS::EC2::EIPAssociation",
"Properties" : {
"InstanceId" : { "Ref" : "Server" },
"EIP" : { "Ref" : "ServerEIP" }
}
},
现在,在作为 init.d-script 运行的实例上的启动脚本中,我正在读取该实例的“公共主机名”:
PUBLIC_HOSTNAME=`curl http://169.254.169.254/latest/meta-data/public-hostname`
现在发生的事情是,我最初似乎收到了一个错误的主机名!最有可能是在 ElasticIP 关联发生之前分配给 EC2 实例的初始公共 IP 地址!
我已经尝试等待一段时间以让公共主机名稳定下来,但是当睡眠时间不太长(即低于 30 秒)时它没有效果。
还有其他方法可以确保我从弹性 IP 地址获取“公共主机名”而不是被丢弃的主机名吗?!?
答案1
最后,我在启动期间使用了几秒钟的延迟,以便实际的 ip/主机名能够在启动期间进行 REST 调用之前稳定下来!