Как запустить функцию AWS Lambda, чтобы сообщить мне, что CloudFormation завершила создание всего стека

Я хотел бы сделать автоматический вызов API пользовательской программы, как только CloudFormation завершит создание всего стека (развертывание экземпляров, настройка VPC, сценарии Puppet и т. Д.).

Как правильно это сделать?

После некоторого исследования кажется, что хорошим вариантом будет запуск функции AWS Lambda, запускаемой событием, когда создание стека было успешно завершено, но я понятия не имею, как к этому подойти.

Любые идеи или советы будут оценены.


person cameronliam    schedule 29.03.2016    source источник
comment
Вы используете SDK или CLI?   -  person helloV    schedule 29.03.2016


Ответы (1)


Вы можете подготовить и координировать многое из того, о чем вы говорите (настройка VPC и т. Д.), С помощью CloudFormation, атрибута DependsOn и вложенных стеков CloudFormation. Таким образом, вы можете заказать выполнение стеков CloudFormation, чтобы, например, сначала создавался ваш VPC, а затем запускались ваши экземпляры EC2, а затем развертывалось программное обеспечение на экземплярах.

Вы также можете координировать выполнение другого упомянутого вами поведения (развертывание [на] экземплярах, [вызов] сценариев Puppet и т. Д.) С помощью AWS :: CloudFormation :: Init. Таким образом, вы можете вызывать свои сценарии Puppet из своего экземпляра EC2 в шаблоне CloudFormation. Фактическое выполнение ваших сценариев Puppet происходит в экземплярах EC2.

Если вы хотите увидеть пример вызова инструмента управления конфигурацией из CloudFormation (в данном случае мы используем Chef Solo), см. app-instance.json. Если вы хотите увидеть пример использования вложенных стеков, см. dromedary-master.json.

В нашем блоге также есть несколько примеров использования Lambda (Stelligent), но не похоже, что вам нужно использовать Lambda в этом случае, исходя из проблемы, которую вы пытаетесь решить.

P.S. Вы также не должны использовать вложенные стеки, но это может немного упростить жизнь. Но вы действительно хотите контролировать порядок создания ресурсов, поэтому атрибут DependsOn поможет вам в этом.

person Paul Duvall    schedule 29.03.2016
comment
Большое спасибо. Однако как обеспечить выполнение сценариев только после того, как все будет полностью и успешно настроено? У меня раньше была проблема: когда я пытаюсь смонтировать раздел в / dev / xvdf с помощью скриптов в AWS :: CloudFormation :: Init, расположение не существует, но как только я смогу войдите в систему, местоположение существует, и команда выполняется безупречно. - person cameronliam; 30.03.2016
comment
Итак, я нашел решение проблемы монтирования здесь: ссылка. Однако есть ли способ узнать, что CloudFormation полностью и успешно выполнила все задачи? Я думал использовать Amazon SNS, а затем подписаться на событие CREATE_COMPLETE, кажется ли это жизнеспособным вариантом? - person cameronliam; 30.03.2016
comment
@cameronliam Рад, что вы получили ответ на конкретную проблему с установкой. На будущее вы также можете посмотреть Используйте CreationPolicy для ожидания конфигураций на экземпляре, чтобы гарантировать создание ресурсов на экземпляре до выполнения других действий. Обратите внимание на использование "/opt/aws/bin/cfn-init ", и "/opt/aws/bin/cfn-signal -e $? ", - person Paul Duvall; 30.03.2016
comment
@cameronliam Да, вы можете использовать тему Amazon SNS и подписаться на электронную почту или другую конечную точку. Однако я не уверен, что вы можете подписаться на конкретное событие, такое как CREATE_COMPLETE. Если можешь, я тоже воспользуюсь им! Я использую SNS, чтобы получать уведомления о событиях CloudFormation, но он отправляет все. В любом случае, выполняя свой стек CloudFormation, вы должны ввести что-то вроде: aws cloudformation create-stack --stack-name MyStackName --template-url YOURTEMPLATEURL --region REGION --disable-rollback --capabilities="CAPABILITY_IAM" --notification-arns "arn:aws:sns:REGION:YOURACCOUNTID:YOURSNSTOPIC" - person Paul Duvall; 30.03.2016
comment
Еще раз спасибо! Очень близко к решению моей проблемы. И последнее, причина, по которой я хочу сделать POST, - это сообщить конечной точке API, что экземпляр был успешно создан, а затем предоставить ему общедоступный IP-адрес (и, вероятно, дополнительную информацию) этого экземпляра, есть ли способ облегчить это используя соцсети? Или мне нужен другой подход? - person cameronliam; 31.03.2016