Назад | Перейти на главную страницу

Как получить публичный IP-адрес экземпляра в шаблоне CloudFormation при использовании LaunchConfig

У меня есть шаблон CloudFormation с LaunchConfig. В UserData Мне нужно указать общедоступный IP-адрес создаваемого экземпляра. Я хотел использовать Fn::GetAtt, но для него требуется логическое имя, и я не уверен, как его определить при использовании LaunchConfig.

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

Если ваши UserData содержат сценарий оболочки и все, что вам нужно сделать, это указать собственный общедоступный IP-адрес экземпляра в этом сценарии, вы можете получить это значение, запросив public-ipv4 категория метаданные экземпляра с участием curl или любая другая утилита http:

curl http://169.254.169.254/latest/meta-data/public-ipv4

Невозможно напрямую получить общедоступный IP-адрес экземпляра EC2, созданного группой Auto Scaling. Причина в том, что экземпляр EC2 не управляется шаблоном CloudFormation. Шаблон не знает об экземпляре EC2.

Однако есть несколько обходных путей.

Вариант 1. Выделите и назначьте эластичный IP-адрес.

Вместо того, чтобы определять автоматически назначаемый IP-адрес, выделите эластичный IP-адрес и назначьте его пользовательским данным вашего экземпляра EC2, а экземпляр EC2 назначит его самому себе через сценарий запуска.

Это очень просто сделать, если ваша группа Auto Scaling создает только один экземпляр EC2. Это все еще можно сделать с двумя или более экземплярами EC2, но вам нужно будет создать пул эластичных IP-адресов для извлечения.

Вариант 2. Используйте WaitCondition с настраиваемыми данными, включая IP-адрес вашего экземпляра EC2.

Создайте условие ожидания, которое будет ожидать ваш шаблон CloudFormation. В вашем экземпляре EC2 попросите его получить свой собственный общедоступный IP-адрес, а затем сигнализируйте WaitCondition, когда он будет готов. Включите IP-адрес в поле "Данные" сигнала.

Ссылки: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-waitcondition.html