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

AWS CodePipeline - как развернуть десятки ресурсов CloudFormation / Stackset / Lambda без ручного создания действия конвейера для каждого файла

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

В AWS у меня есть архитектура с несколькими аккаунтами, в которой работает организация AWS. Я хочу, чтобы конвейер работал в одной учетной записи. Этот конвейер будет развертывать шаблоны CloudFormation для одной или нескольких учетных записей в Организации.

На данный момент я нашел следующие варианты:

В идеале я бы хотел, чтобы CodePipeline развертывал каждый файл с определенными расширениями в репозитории CodeCommit или, что еще лучше, развертывал то, что указано в файле манифеста. Однако я не думаю, что это возможно.

Я бы предпочел избегать любых технологий или услуг, в которых нет необходимости. Я также предпочел бы не использовать Jenkins, Ansible, Teraform и т. Д., Поскольку этот сценарий можно развернуть на нескольких сайтах клиентов, и я не хочу навязывать им какие-либо сторонние технологии. Если мне нужно использовать стороннюю организацию, я бы предпочел иметь что-то, что может работать в контейнере CodeBuild, чем запускать на экземпляре, таком как Jenkins.

-

Опыт с тех пор, как я задал этот вопрос

Я собираюсь оставить этот вопрос открытым на тот случай, если кто-то найдет отличный ответ.

-

Информация из службы поддержки AWS

AWS дал следующий совет (я перефразировал его, отфильтровав свое понимание, любые ошибки - мои собственные, а не неправильные советы от AWS):

Я бы посмотрел на развертывание всех шаблонов через один Ansible playbook. в playbook.yml у вас может быть много задач, по одной на шаблон CFN, давать каждому шаблону необходимые параметры, передавать выходные данные из одного стека в другой и т. д. Также Ansible идемпотентен, поэтому при повторном запуске playbook он (повторно) развертывает только то, что было изменено.

Все это может быть одним шагом в CodePipeline.

Теперь, как его запустить? CodePipeline может выполнять CodeBuild, CodeDeploy, ECS Task или Elastic Beanstalk. Я бы, вероятно, выбрал CodeBuild с изображением докера Ansible. Почему вы не хотите использовать CodeBuild?

Если вы действительно хотите выполнить развертывание CodePipeline с помощью метода CloudFormation, вы, вероятно, можете создать некоторый настраиваемый ресурс, который выполняет доступную playbook, но это кажется довольно запутанным.

Мой выбор было бы CodePipeline ➜ CodeBuild ➜ Ansible playbook ➜ развертывание множества стеков CloudFormation.


Кстати для отладки сбои вложенных шаблонов вы всегда можете изменить Фильтр в консоли, чтобы Не смогли или Удалено и изучите там события сбойных стеков. Когда они удаляются, они исчезают только из представления по умолчанию, но детали остаются там.

Однако мне не нравятся сложные вложенные шаблоны, мне труднее управлять и обновлять, чем с помощью Ansible.

Надеюсь, это поможет :)