如何在 CloudFormation 模板中使用 ElasticIP 时获取正确的主机名

如何在 CloudFormation 模板中使用 ElasticIP 时获取正确的主机名

我在 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 调用之前稳定下来!

相关内容