Я использую эластичный IP-адрес в шаблоне CloudFormation
"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`
Теперь то, что здесь происходит, заключается в том, что я сначала получаю неправильное имя хоста! Скорее всего, это тот, который соответствует начальному общедоступному IP-адресу, который назначен экземпляру EC2 до того, как произойдет ассоциация ElasticIP!
Я уже пытался немного подождать, чтобы разрешить общедоступное имя хоста, но это не повлияло на то, когда сон был не слишком длинным (т.е. менее 30 секунд).
Есть ли другой способ убедиться, что я получу «общедоступное имя хоста» с эластичного IP-адреса, а не с того, который выброшен?!?
В конце концов, я использовал задержку в несколько секунд во время запуска, чтобы позволить фактическому ip / имени хоста определиться, прежде чем делать вызов REST во время запуска!