Eu tenho um modelo CloudFormation com LaunchConfig
. Em UserData
preciso fazer referência ao IP público da instância que está sendo criada. Eu queria usar Fn::GetAtt
, mas requer um nome lógico e não tenho certeza de como posso defini-lo ao usar LaunchConfig
.
"LaunchConfig": {
"Type" : "AWS::AutoScaling::LaunchConfiguration",
"Metadata" : {"..."},
"Properties": {
"ImageId" : "...",
"InstanceType" : { "Ref" : "InstanceType" },
"SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ],
"KeyName" : { "Ref" : "KeyName" },
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"..."
]]}}
}
},
Se o seu UserData contiver um script de shell e tudo o que você precisa fazer é referenciar o próprio IP público da instância dentro desse script, você pode obter esse valor consultando a
public-ipv4
categoria dos metadados da instância comcurl
ou qualquer outro utilitário http:Não é possível recuperar diretamente o endereço IP público de uma instância do EC2 gerada por um grupo de Auto Scaling. O motivo é que a instância EC2 não é gerenciada pelo modelo CloudFormation. O modelo não tem conhecimento da instância do EC2.
No entanto, existem algumas soluções alternativas.
Opção 1: alocar e atribuir um endereço IP elástico.
Em vez de detectar o endereço IP atribuído automaticamente, aloque um endereço IP elástico e atribua-o aos dados do usuário de sua instância do EC2 e faça com que a instância do EC2 o atribua a si mesma por meio de seu script de inicialização.
É quase simples de fazer se o seu grupo de Auto Scaling estiver criando apenas uma única instância do EC2. Isso ainda pode ser feito com 2 ou mais instâncias do EC2, mas você terá que criar um pool de endereços IP elásticos para extrair.
Opção 2: use uma WaitCondition com dados personalizados que incluam o endereço IP da sua instância do EC2.
Crie uma WaitCondition na qual seu modelo do CloudFormation aguarda. Em sua instância do EC2, recupere seu próprio endereço IP público e, em seguida, sinalize o WaitCondition quando estiver pronto. Inclua o endereço IP no campo "Dados" do sinal.
Referências: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html