No final, usei alguns segundos de atraso durante a inicialização para permitir que o nome do host / ip real fosse resolvido antes de fazer a chamada REST durante a inicialização!
Estou usando um ip elástico em um modelo do CloudFormation
"ServerEIP" : {
"Type" : "AWS::EC2::EIP",
"Properties" : {
}
},
Mais tarde, tenho uma instância do EC2
"Server" : {
"Type" : "AWS::EC2::Instance",
...
Como desejo tornar o endereço IP de várias instâncias conhecidas entre si, consulte aqui , estou usando o EIPAssociation para vincular o Elastic IP à instância do EC2:
"ServerIPAssoc" : {
"Type" : "AWS::EC2::EIPAssociation",
"Properties" : {
"InstanceId" : { "Ref" : "Server" },
"EIP" : { "Ref" : "ServerEIP" }
}
},
Agora, no meu script de inicialização na instância que é executada como init.d-script, estou lendo o "nome do host público" da instância:
PUBLIC_HOSTNAME='curl http://169.254.169.254/latest/meta-data/public-hostname'
Agora, o que acontece aqui é que eu pareço inicialmente receber um nome de host incorreto! O mais provável é o do endereço IP público inicial que é atribuído à instância do EC2 antes da associação do ElasticIP ocorrer!
Eu já tentei esperar o nome do host público, mas ele não teve efeito quando o sono não era muito longo (ou seja, abaixo de 30 segundos).
Existe alguma outra maneira que eu possa garantir que eu recebo o "nome do host público" do endereço IP elástico e não aquele que é jogado fora?!?