@classmethod скажи пожалуйста, если не секрет, а как у тебя организован ci/cd для serverless (и не для serverless тоже:) )?
Используешь ли что-то специальное, или может быть просто кастомный код который AWS SDK дергает, или километры cloud formation, или может что-то ещё? Как оно вообще выглядит концептуально?
Сори за много вопросов, но я знаю что у тебя это точно есть и наверняка все сделано хорошо:)
У меня был долгий путь чтобы понять как не нужно делать CI/CD для serverless приложений. Правда я до сих пор не уверен, что подход описаный ниже является правильным, но мне его удалось проверить в бою в кровавом enterprise и в стартапах.
Первый делом разделяем resource provisioning и deployment.
Когда мы впервые деплоим приложение или поднимаем dev environment под проект, то используя CloudFormation template создаем новый стек. На этом шаге наша цель создать пустые ресурсы, необходимые IAM сущности и зарезервировать имя стека.
Весь код проходит через ci пайплайн: build -> test -> scan -> pack. Полученные артефакты подают в бинарный репозиторий или S3.
Депломеймент построен на базе AWS Step Function + свои вспомогательные лямбды, аналог aws lambda update-function-code для лямбд и aws update-service —force-new-deployment для ECS
Step Function был выбран потому что процесс деплоймента в некоторые окружения может занимать несколько дней и требовать ручного аппрува.
Если в CloudFormation шаблонах нет никаких изменений, то сразу деплоим артефакты. А вот если CF шаблон изменился, то вначале нам нужно перед внести изменения стек. Для этого создаем CloudFormation Change Set.
В нижних окружениях change-set применяются автоматически, а для всего что выше staging окружения опс должен посмотреть на change set и одобрить изменения. Пока ждем аппрува step function стоит на паузе.
В кровавом enterprise у нас была договоренность, что ничего автоматически не аппрувится, если меняются IAM сущности. Поэтому вся команда ждала несколько дней очередного мудака из InfoSec, который с важным видом нажимал на кнопку Approve.
Благодаря тому что CloudFormation поддерживает nested stacks, то мы смогли отдельно вынести все что не относится к IAM и трогали IAM политики только в случае необходимости.
InfoSec своего добились - вместо того чтобы мы команда создавала least privileges политики для новых ресурсов, команда стала создавать IAM с широкими правами лишь бы не быть заблокированной.