Я создал шаблон AWS Cloudformation, и мне не удается преодолеть циклическую зависимость. Я создаю экземпляр EC2 и балансировщик нагрузки, балансировщик нагрузки зависит от экземпляра EC2, потому что он ссылается на него в своих свойствах экземпляров. Все работало нормально, пока мне не пришлось ссылаться на свойство DNSName балансировщика нагрузки в разделе инициализации экземпляра EC2.
"AppServer": {
"Type": "AWS::EC2::Instance",
"Metadata": {
"AWS::CloudFormation::Init" : {
"configSets" : {
"Install" : [ "Install" ]
},
...
...
...
"Install" : {
"commands" : {
"update hostname rmi" : {
"command" : { "Fn::Join" : [ "", [ "runuser -lm rlt -c \"/home/ec2-user/awscf/update-rmi.sh ", { "Fn::GetAtt" : [ "WebLoadBalancer", "DNSName" ] }, "\"" ] ] }
},
}
Итак, проблема здесь в том, что экземпляр EC2 не может ссылаться на балансировщик нагрузки, потому что он не был создан, и балансировщик нагрузки не может быть создан первым, потому что ему нужен идентификатор экземпляра EC2, чтобы его можно было связать с ним.
Я посмотрел на WaitConditions, а также на CreationPolicy, но, если я не понимаю, как они работают, я не думаю, что они мне помогут. По сути, мне нужно: а) создать экземпляр EC2, но не выполнять UserData, пока не будет создан LoadBalancer, или б) сначала создать LoadBalancer и не связывать его с экземпляром EC2, после создания экземпляра EC2 вернуться и обновите LoadBalancer, чтобы связать его с экземпляром EC2. Кто-нибудь знает, возможно ли что-то подобное? Помимо создания полного стека, а затем возврата и обновления его вручную? В идеале я бы хотел, чтобы это произошло при единственном создании стека.
instances
не является обязательным полем. Почему бы не удалить его, а ваш скрипт добавить себя в ELB? - person tedder42   schedule 04.06.2016