Мы хотели бы создать шаблон для довольно стандартного стека в AWS. Нам понадобится три слоя.
Уровень: эластичный балансировщик нагрузки
Уровень: несколько веб-серверов, которые создаются / уничтожаются в соответствии с сигналами тревоги, вызванными запросом на сайте.
Уровень: сервер базы данных
Экземпляры на уровне 2 должны знать имя хоста экземпляра базы данных. В идеале я хотел бы получить частный IP-адрес экземпляра базы данных и передать его через пользовательские данные на веб-серверы.
Fn :: GetAtt не поддерживает частный ip (только публичный)
Я полагаю, что альтернативой было бы создать стек, а затем вручную установить частный IP-адрес db. Однако это делает нашу настройку менее чистой. В идеале хотелось бы, чтобы все было описано в шаблоне. (даже если это связано с запуском скрипта через данные пользователя)
Какие-либо предложения?
Я делаю это сейчас, чтобы добавить новые узлы к своему хозяину марионеток. Например, я получаю частный IP-адрес главного экземпляра марионетки в разделе UserData моего нового узла:
"echo ", { "Fn::GetAtt" : [ "MasterOfPuppets", "PrivateIp" ] }, " ",
{ "Fn::GetAtt" : [ "MasterOfPuppets", "PrivateDnsName" ] } ," puppet
>> /etc/hosts\n","\n",
См. Стр. 119 Руководство пользователя CloudFormation.
В качестве альтернативы вы можете использовать экземпляр MetaData:
curl http://169.254.169.254/latest/meta-data/local-ipv4/