4

В CloudFormation я создаю VPC, два экземпляра EC2 и Elasticache перед ними. В шаблоне я пытаюсь добавить эластику к vpc. Проблема происходит в создании AWS :: Elasticache :: SubnetGroupAWS CloudFormation: Как получить список подсети от VPC?

"CacheSubnetGroup" : { 
     "Type" : "AWS::ElastiCache::SubnetGroup", 
     "Properties" : { 
     "Description" : "Subnets available for the ElastiCache Cluster", 
     "SubnetIds" : [ ... ] 
     } 
    }, 

Я не хочу попросить пользователя ввести список подсетей, как предложено here, потому что я предполагаю, что пользователь не знает, что подсеть есть. Есть ли какая-либо функция, похожая на {"Fn :: GetAtt": ["myVpc", "SubnetList"]}?

Редактировать После ответа jarmod я создаю подсети, vpc и все остальное. Но одна проблема остается. Я могу запустить EC2 в созданном VPC, но экземпляры создаются и посередине при инициализации экземпляра завершаются, а новые экземпляры развернуты. Этот цикл продолжается до тех пор, пока я не удалю стек cf. Вот та часть, где я думаю, что проблема происходящая:

"WebServerGroup" : { 
    "Type" : "AWS::AutoScaling::AutoScalingGroup", 
    "Properties" : { 
    "VPCZoneIdentifier" : [{ "Ref" : "InstanceSubnet1" }, { "Ref" : "InstanceSubnet2" }, { "Ref" : "InstanceSubnet3" }, { "Ref" : "InstanceSubnet4" }], 
    "LaunchConfigurationName" : { "Ref" : "LaunchConfig" }, 
    "MinSize" : "1", 
    "MaxSize" : "4", 
    ... 
    } 
} 
+0

Если вы проверяете события стека, какую ошибку выполняет печать экземпляра? – Efren

ответ

2

Если шаблон создан VPC затем предположительно ваш шаблон также создал подсети для этого VPC. Не можете ли вы просто заполнить SubnetIds из отдельных идентификаторов подсети для каждой подсети, которую вы создали?

Что-то вроде этого:

"SubnetIds" : [ {"Ref":"mysubnet1"}, {"Ref":"mysubnet2"} ] 
+0

Хорошо, это имеет смысл. Я все еще ноуб и думал, что подсетей по умолчанию создавались при создании VPC. Поэтому я создал свои подсети, и все работает отлично, за исключением моей AutoScalingGroup. Мои EC2 создаются в VPC, но они запускаются и в середине инициализации они закрываются, и все новые экземпляры EC2 создаются. Это продолжается до тех пор, пока я не удалю стек CF. Я не знаю, почему это происходит, и любая помощь будет потрясающей. Я обновил сообщение с той частью, где я думаю, что проблема возникает. –

+0

Группы автоматического масштабирования предназначены для замены нездоровых экземпляров новыми, здоровыми экземплярами. Я бы предположил, что ваши экземпляры кажутся нездоровыми, независимо от того, являются они или нет, поэтому они не выполняют проверку работоспособности и прекращаются и заменяются группой автоматического масштабирования. Вам нужно будет понять, не проверены ли проверки состояния экземпляра или нет ошибок проверки работоспособности ELB (при условии, что вы используете ELB). Подробнее см. Http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/as-maintain-instance-levels.html. – jarmod

3

Есть три типичных способа обработки этой ситуации (в моем порядке предпочтения):

  1. Если подсеть будет использоваться только этот стек, создать их как часть стека и использовать ref.

  2. Если подсети будут использоваться несколькими стеками, создайте их в отдельном стеке, определите их как выходы, выполните описание-стек в определяющем стеке, чтобы получить значения, а затем передайте их в этот стек как параметры.

  3. Если подсети создаются в другом месте (за пределами CloudFormation), просто передайте их в качестве параметров.

Если вы действительно хотите использовать все подсети из VPC, который я бы не рекомендовал в случае создаются новые в будущем для других целей, то вы всегда можете сделать описать-подсетей и фильтр на VpcId сделайте свой список.

+0

Спасибо за ответ.Да, ошибка noob, я думал, что подсетей по умолчанию были созданы, когда я создаю VPC, но это не тот случай. Но возникла новая проблема, и я обновил свой пост, объяснив это. –