Что такое CloudFormation (или Deployment Manager в GCP)?

Что это такое

CloudFormation (AWS) и Deployment Manager (GCP) — это сервисы «инфраструктура как код» (IaC) от облачных провайдеров. Они позволяют описать всю облачную инфраструктуру в виде шаблонов, а затем создавать, обновлять и удалять набор ресурсов атомарно — как «стэк»/«деплоймент». Цель — воспроизводимость, версияция, автоматизация и снижение ручных ошибок при развёртывании инфраструктуры.

Как это работает (рабочий цикл)

  1. Пишете шаблон (YAML/JSON; в GCP можно ещё Jinja/Python шаблоны).

  2. Валидируете и отправляете в сервис: создаёте Stack (CloudFormation) / Deployment (Deployment Manager).

  3. Платформа создаёт ресурсы по порядку, учитывая зависимости (создаёт graph).

  4. При обновлении вы создаёте change set / preview — видите, какие ресурсы будут изменены, и применяете изменения.

  5. В случае ошибки платформа откатывает изменения (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 ресурсов.