Что такое CloudFormation (или Deployment Manager в GCP)?
Что это такое
CloudFormation (AWS) и Deployment Manager (GCP) — это сервисы «инфраструктура как код» (IaC) от облачных провайдеров. Они позволяют описать всю облачную инфраструктуру в виде шаблонов, а затем создавать, обновлять и удалять набор ресурсов атомарно — как «стэк»/«деплоймент». Цель — воспроизводимость, версияция, автоматизация и снижение ручных ошибок при развёртывании инфраструктуры.
Как это работает (рабочий цикл)
-
Пишете шаблон (YAML/JSON; в GCP можно ещё Jinja/Python шаблоны).
-
Валидируете и отправляете в сервис: создаёте Stack (CloudFormation) / Deployment (Deployment Manager).
-
Платформа создаёт ресурсы по порядку, учитывая зависимости (создаёт graph).
-
При обновлении вы создаёте change set / preview — видите, какие ресурсы будут изменены, и применяете изменения.
-
В случае ошибки платформа откатывает изменения (rollback) в большинстве сценариев.
Форматы и возможности
-
CloudFormation: шаблоны в YAML или JSON; поддерживает параметры, mappings, conditions, outputs, resources, metadata, transforms (например, серверлес-Transform), модульные вложенные стэки, StackSets (разворачивание по нескольким аккаунтам/регионам), change sets, drift detection, Hooks/Stack policies. Поддерживает расширяемость через Registry и кастомные resource types.
-
Deployment Manager: шаблоны в YAML с возможностью использовать Jinja2 или Python для логики; поддерживает imports и переиспользуемые шаблоны, preview mode, update/undo, параметризацию и outputs; взаимодействует с GCP API для создания ресурсов.
Примеры (микро)
CloudFormation (S3 bucket):
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-app-bucket-123
Deployment Manager (Compute instance, упрощённо):
resources:
\- name: vm-1
type: compute.v1.instance
properties:
zone: us-central1-a
machineType: zones/us-central1-a/machineTypes/n1-standard-1
disks: \[...\]
Чем полезны и ключевые фичи
-
Декларативность: описываете «что» нужно, не «как».
-
Change preview: видите отличия до применения (change sets / preview).
-
Идемпотентность и rollback при ошибках.
-
Тесная интеграция с облаком: IAM, tagging, managed services, validation.
-
Возможность модульности и повторного использования шаблонов.
Различия по сравнению с мульти-клауд IaC (коротко)
Оба — «родные» решения для своих облаков и дают глубинную интеграцию и удобные возможности (StackSets, IAM-роли, ресурсо-specific features). Для мульти-клауд-подхода многие предпочитают Terraform/ Pulumi, но CloudFormation/Deployment Manager остаются сильным выбором при фокусе на одном облаке.
Лучшие практики и типичные подводные камни
-
Параметризуйте шаблоны, не хардкодьте значения.
-
Выносите повторяющуюся логику в модули / nested stacks / шаблоны.
-
Не храните секреты прямо в шаблонах или параметрах — используйте Secret Manager / KMS.
-
Всегда проверяйте change set / preview перед apply.
-
Контролируйте права: IAM роль, под которой выполняется создание, должна быть минимально необходимой.
-
Используйте version control и CI для валидации шаблонов; тестируйте обновления в staging перед prod.
-
Следите за drift (ручные изменения в консоли) и корректируйте через шаблоны.
Это инструментальный уровень управления инфраструктурой, ориентированный на сильную интеграцию с соответствующим облаком и безопасный, воспроизводимый lifecycle ресурсов.