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

我在CloudFormation模板中使用弹性IP

"ServerEIP" : { "Type" : "AWS::EC2::EIP", "Properties" : { } }, 

稍后我有一个EC2实例

 "Server" : { "Type" : "AWS::EC2::Instance", ... 

因为我想让多个实例的IP地址相互之间已知,请参阅此处 ,我正在使用EIPAocociation实际将弹性IP绑定到EC2实例:

 "ServerIPAssoc" : { "Type" : "AWS::EC2::EIPAssociation", "Properties" : { "InstanceId" : { "Ref" : "Server" }, "EIP" : { "Ref" : "ServerEIP" } } }, 

现在在我作为init.d-script运行的实例上的启动脚本中,我正在读取实例的“public hostname”:

 PUBLIC_HOSTNAME=`curl http://169.254.169.254/latest/meta-data/public-hostname` 

现在这里发生的是我最初似乎收到一个不正确的主机名! 最有可能是在ElasticIP关联发生之前分配给EC2实例的初始公共IP地址的那个!

我已经试着让公众主机名解决一些问题,但是当睡眠时间不是很长的时候(即30秒以下)没有效果。

有没有其他方法可以确保我从弹性IP地址获得“公共主机名”而不是丢弃的?

最后,我在启动过程中使用了几秒钟的延迟,以便在启动过程中进行REST调用之前允许实际的IP /主机名解决!