Como obter IP público de instância no modelo do CloudFormation ao usar o LaunchConfig

1

Eu tenho um modelo do CloudFormation com LaunchConfig . Em UserData , preciso referenciar o IP público da instância que está sendo criada. Eu queria usar Fn::GetAtt , mas requer nome lógico e não sei como defini-lo quando uso LaunchConfig .

"LaunchConfig": {
  "Type" : "AWS::AutoScaling::LaunchConfiguration",
  "Metadata" : {"..."},
  "Properties": {
    "ImageId" : "...",
    "InstanceType" : { "Ref" : "InstanceType" },
    "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ],
    "KeyName" : { "Ref" : "KeyName" },
    "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
      "..."
    ]]}}
  }
},
    
por arnaslu 02.05.2016 / 07:53

2 respostas

5

Se o seu UserData contém um shell script e tudo que você precisa fazer é referenciar o IP público da instância dentro desse script, você pode obter esse valor consultando a categoria public-ipv4 do Metadados da instância com curl ou qualquer outro utilitário http:

curl http://169.254.169.254/latest/meta-data/public-ipv4
    
por 03.05.2016 / 06:01
1

Não é possível recuperar diretamente o endereço IP público de uma instância do EC2 gerada por um grupo do Auto Scaling. O motivo é que a instância do EC2 não é gerenciada pelo modelo do CloudFormation. O modelo não tem conhecimento da instância do EC2.

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 mesmo por meio do script de inicialização.

É quase simples de fazer se o seu grupo 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 um WaitCondition com dados personalizados que incluam o endereço IP da 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 sinalize o WaitCondition quando estiver pronto. Inclui o endereço IP dentro do campo "Data" do sinal.

Referências: link

    
por 03.05.2016 / 04:04