Открыть сервис

AWS CloudFormation

AWS CloudFormation — это сервис инфраструктуры как кода (Infrastructure as Code, IaC), предоставляемый компанией Amazon Web Services (Amazon — американская транснациональная корпорация, не запрещена в РФ), который позволяет пользователям описывать, развёртывать и управлять облачными ресурсами AWS с помощью шаблонов, написанных в формате JSON или YAML. Сервис автоматизирует процесс создания и настройки взаимосвязанных компонентов облачной инфраструктуры, таких как виртуальные машины (EC2), базы данных (RDS), сети (VPC) и системы хранения (S3), обеспечивая воспроизводимость, версионирование и управляемость конфигураций.

История и развитие

AWS CloudFormation был запущен в 2011 году как один из первых сервисов для оркестрации облачных ресурсов. Его появление было связано с необходимостью упрощения и автоматизации развёртывания сложных многоуровневых приложений, которые ранее требовали ручного создания каждого компонента через консоль AWS или последовательного выполнения скриптов.

Первоначально CloudFormation поддерживал только базовые типы ресурсов и простые шаблоны. Со временем функциональность была значительно расширена. В 2015 году была добавлена поддержка вложенных стеков (nested stacks), что позволило создавать модульные и повторно используемые шаблоны. В 2018 году появилась функция Change Sets, позволяющая предварительно просматривать изменения, которые будут внесены в инфраструктуру перед их применением. В 2020 году была введена поддержка Git-подобного управления версиями шаблонов и интеграция с AWS CodePipeline для реализации конвейеров непрерывной доставки (CI/CD).

В 2022 году был анонсирован AWS CloudFormation Hooks — механизм для проверки конфигураций ресурсов на соответствие заданным политикам и стандартам безопасности до их фактического создания или обновления. Это позволило внедрять «шлюзы безопасности» (guardrails) на ранних этапах развёртывания.

Основные понятия и компоненты

Шаблон (Template)

Шаблон — это текстовый файл формата JSON или YAML, который описывает желаемое состояние облачной инфраструктуры. Он состоит из нескольких секций, ключевыми из которых являются:

  • AWSTemplateFormatVersion — версия формата шаблона.
  • Description — текстовое описание шаблона.
  • Parameters — входные параметры, которые пользователь может передавать при создании стека (например, имя экземпляра, размер диска, тип инстанса).
  • Mappings — статические таблицы соответствий (например, сопоставление региона AWS с идентификатором AMI).
  • Conditions — условия, определяющие, создавать ли определённый ресурс в зависимости от значений параметров.
  • Resources — обязательная секция, в которой перечисляются все создаваемые ресурсы AWS с их свойствами, зависимостями и конфигурациями.
  • Outputs — выходные значения, которые возвращаются после создания стека (например, DNS-имя созданного балансировщика нагрузки).

Стек (Stack)

Стек — это совокупность ресурсов AWS, созданных и управляемых как единое целое на основе одного шаблона. Пользователь может создавать, обновлять и удалять стек целиком. При удалении стека CloudFormation автоматически удаляет все ресурсы, входящие в его состав, что упрощает очистку тестовых сред.

Change Set

Change Set — это предварительный просмотр изменений, которые будут внесены в стек при обновлении шаблона. Он позволяет оценить, какие ресурсы будут добавлены, изменены или удалены, прежде чем изменения будут применены. Это снижает риск непреднамеренного разрушения инфраструктуры.

StackSet

StackSet — это механизм для развёртывания одного и того же шаблона в нескольких регионах AWS и/или нескольких аккаунтах AWS. Он используется для централизованного управления инфраструктурой в масштабах всей организации, например, для создания единой конфигурации безопасности или сетевой архитектуры.

Resource Provider

Resource Provider — это модуль, который определяет логику создания, чтения, обновления и удаления (CRUD) для конкретного типа ресурса AWS. AWS предоставляет встроенные провайдеры для всех своих сервисов, а также позволяет создавать собственные провайдеры (Custom Resource Provider) для интеграции с внешними системами или ресурсами, не входящими в экосистему AWS.

Процесс работы с CloudFormation

  1. Создание шаблона. Пользователь пишет шаблон, описывающий желаемую инфраструктуру.
  2. Загрузка шаблона. Шаблон загружается в сервис CloudFormation через консоль управления, AWS CLI (Command Line Interface) или API.
  3. Создание стека. CloudFormation анализирует шаблон, проверяет его синтаксис и зависимости, после чего начинает последовательное создание ресурсов в указанном порядке. Сервис отслеживает состояние каждого ресурса и, в случае ошибки, может откатить изменения (rollback) до предыдущего стабильного состояния.
  4. Управление стеком. После создания стека пользователь может обновлять его, загружая новую версию шаблона, или удалять, что приводит к уничтожению всех связанных ресурсов.

Преимущества и недостатки

Преимущества

  • Воспроизводимость. Один и тот же шаблон можно использовать для развёртывания идентичных сред в разных регионах или аккаунтах.
  • Версионирование. Шаблоны хранятся в виде текстовых файлов, что позволяет использовать системы контроля версий (Git, SVN) для отслеживания изменений.
  • Автоматизация. CloudFormation устраняет необходимость ручного создания ресурсов, снижая вероятность ошибок оператора.
  • Управление зависимостями. Сервис автоматически определяет порядок создания ресурсов на основе их взаимозависимостей (например, подсеть должна быть создана до виртуальной машины, которая в неё помещается).
  • Безопасность. Change Sets и Hooks позволяют проверять изменения на соответствие политикам безопасности до их применения.

Недостатки

  • Сложность синтаксиса. Шаблоны на YAML или JSON могут быть громоздкими и трудными для чтения, особенно для больших инфраструктур.
  • Ограниченная поддержка итеративной разработки. В отличие от некоторых более современных IaC-инструментов (например, Terraform), CloudFormation менее гибок в обработке частичных изменений и может требовать полного обновления стека даже при незначительных правках.
  • Привязка к AWS. CloudFormation является проприетарным сервисом и не поддерживает управление ресурсами других облачных провайдеров (Google Cloud, Microsoft Azure) без использования сторонних решений или Custom Resource Provider.
  • Время развёртывания. Создание или обновление стека может занимать значительное время, особенно если шаблон включает ресурсы, требующие длительной инициализации (например, базы данных).

Сравнение с альтернативами

На рынке инструментов IaC существуют и другие решения, которые часто сравнивают с AWS CloudFormation:

ИнструментПоддержка мультиоблачностиФормат описанияУправление состояниемЛицензия
AWS CloudFormationНет (только AWS)JSON/YAMLВстроенное (AWS)Проприетарная
Terraform (HashiCorp)Да (AWS, Azure, GCP и др.)HCL (HashiCorp Configuration Language)Внешнее (state-файл)Open Source (MPL 2.0)
PulumiДаОбщие языки программирования (TypeScript, Python, Go)Внешнее (state-файл)Open Source (Apache 2.0)
AWS CDK (Cloud Development Kit)Нет (только AWS)Общие языки программирования (TypeScript, Python, Java)Генерирует CloudFormation-шаблоныOpen Source (Apache 2.0)

Terraform, в отличие от CloudFormation, не привязан к одному провайдеру и поддерживает управление ресурсами множества облачных и локальных платформ. Однако CloudFormation обеспечивает более тесную интеграцию с экосистемой AWS, включая автоматическое управление ролями IAM (Identity and Access Management) и поддержку сервисов, которые могут быть недоступны через сторонние провайдеры.

Применение

AWS CloudFormation широко используется для:

  • Развёртывания сред разработки, тестирования и продакшена. Команды могут быстро создавать изолированные среды для каждого этапа разработки.
  • Управления сетевыми конфигурациями. Описание VPC, подсетей, таблиц маршрутизации и групп безопасности в виде кода.
  • Оркестрации микросервисных архитектур. Автоматизация развёртывания контейнеров в Amazon ECS (Elastic Container Service) или Amazon EKS (Elastic Kubernetes Service).
  • Настройки бэкапов и аварийного восстановления. Создание шаблонов для развёртывания инфраструктуры в регионе аварийного восстановления.
  • Управления политиками безопасности. Использование Hooks для автоматической проверки конфигураций на соответствие стандартам (например, обязательное шифрование S3-бакетов).

Интересные факты

  • CloudFormation поддерживает создание до 500 ресурсов в одном стеке. Для более крупных инфраструктур рекомендуется использовать вложенные стеки.
  • Сервис позволяет задавать политики стека (Stack Policy), которые запрещают изменение или удаление определённых критически важных ресурсов при обновлении.
  • AWS CloudFormation — один из старейших сервисов IaC, но его функциональность постоянно развивается, конкурируя с более молодыми инструментами, такими как Terraform.

Источники

  • Официальная документация AWS CloudFormation (AWS Documentation)
  • «Infrastructure as Code: Managing Servers in the Cloud» by Kief Morris (O'Reilly Media)
  • Документация HashiCorp Terraform (HashiCorp Learn)
  • AWS re:Invent презентации и блоги (AWS Architecture Blog)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →