Понимание инструментов IaC: CloudFormation против Terraform

AWS CloudFormation и Terraform — не уверены, что выбрать? Эта статья поможет вам принять обоснованное решение.

Облачные вычисления революционизировали мир DevOps. Это уже не просто модное слово; они пришли, чтобы изменить способ, которым мы разрабатываем и поддерживаем наши приложения. Хотя есть бесчисленные причины, почему вам следует использовать облачные вычисления для всех масштабов бизнеса, есть небольшое ограничение: вам придется настраивать вашу инфраструктуру вручную.

Вам нужно будет перейти на панели управления ваших облачных поставщиков и точно сообщить им, что вам нужно. Это хорошо работает для небольших случаев использования, но что, если разные люди вносят изменения в конфигурацию в консоли? Вы можете получить излишне сложную инфраструктуру, которая будет только становиться все труднее и труднее поддерживать. Нет эффективного способа совместной работы или отслеживания изменений в облачной инфраструктуре. Что ж, здесь на помощь приходит Инфраструктура как Код.

Инфраструктура как Код (IaC) — модный термин в облачных вычислениях. Это процесс управления вашей IT IaC. Да, вы все правильно поняли. Вместо того чтобы идти на консоль и делать все вручную, IaC позволяет вам написать файлы конфигурации для настройки вашей облачной инфраструктуры. IaC дает нам преимущества, такие как однородность, легкость и быструю поддержку, а также отсутствие места для человеческих ошибок.

Использование IaC с Amazon Web Services

AWS является ведущим облачным вычислительным сервисом в мире, с удвоенной долей рынка по сравнению с следующим облачным провайдером. Он предлагает более 200 услуг, которые могут удовлетворить сотни и тысячи случаев использования.

При начале использования IaC с AWS вы часто будете сужать свой выбор до AWS CloudFormation и инструмента с открытым исходным кодом Terraform. Если вы хотите выбрать между этими двумя, понимание множества функций, которые предлагают оба инструмента, может быть подавляющим. В этой статье мы рассмотрим различия между AWS CloudFormation и Terraform, чтобы помочь вам решить, какой инструмент лучше соответствует вашим потребностям.

Terraform против AWS CloudFormation: различия

Модульность

При использовании IaC в крупных организациях модульность может быть значительным фактором при выборе правильного инструмента.

CloudFormation

CloudFormation не имеет встроенной поддержки модулей. Вместо этого он позволяет использовать то, что называется вложенными стеком, в качестве модулей.

Например, вы можете создать стандартный шаблон CloudFormation для предоставления S3-ведра в вашей организации. Когда конечные пользователи захотят создать ведро S3, они могут использовать этот шаблон CloudFormation в качестве вложенного стека для предоставления стандартного ведра S3.

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

Давайте быстро разберем это на примере. Если не использовать правильно, ведра S3 могут стать катастрофическими для ваших конфиденциальных данных. Давайте возьмем тот же пример. Вы хотите иметь стандартный способ использования S3 в вашей организации. Первый вариант – создать шаблон вложенного стека, который можно использовать в других стеках CloudFormation и также хорошо подходит.

Кроме того, вы можете использовать AWS Service Catalog, который позволяет пользователям использовать этот стандартный шаблон из консольного интерфейса и указать некоторые параметры для небольших настроек. Это позволит вам контролировать способ предоставления инфраструктуры в ваших учетных записях AWS и предотвращать нежелательные сценарии.

Использование вложенных стеков CloudFormation и AWS Service Catalog также может поддерживать стандартные конфигурации в крупных организациях, хотя это может потребовать большего количества ручной настройки.

Terraform

Terraform имеет встроенную поддержку модулей. Он позволяет создавать стандартные конфигурации, аналогичные AWS CloudFormation, и использовать их в других конфигурациях Terraform.

Поскольку Terraform является инструментом с открытым исходным кодом, вы также можете найти и использовать готовые модули с открытым исходным кодом в реестре Terraform. Вы также можете создавать свои собственные модули с вашими собственными конфигурациями и размещать их в частном реестре модулей.

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

Использование вложенного стека в CloudFormation не так просто, как использование модулей в Terraform. Основной фактор заключается в том, что передача данных из шаблона CFN во вложенный стек может быть сложной.

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

С другой стороны, у Terraform есть набор методов для создания, поддержки и обмена модулями. Вы можете увидеть точные требования модулей в реестре модулей Terraform и легко использовать их в ваших файловых системах Terraform.

Контроль и управление инфраструктурой

Если вы хотите ограничить то, что ваши сотрудники могут создавать в ваших учетных записях AWS, AWS CloudFormation и Terraform позволяют вам сделать это.

CloudFormation

CloudFormation обеспечивает управление через политики IAM, позволяя вам управлять доступом пользователей к ресурсам. Однако это управление специфично для AWS, что может быть идеальным, если ваша инфраструктура полностью сосредоточена в AWS.

В нашем примере с корзиной S3 вы можете ограничить все разрешения “Создание S3” для пользователей и разрешить им создавать только корзины S3 из каталога услуг AWS или вложенных стеков.

Terraform

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

Управление состоянием

AWS CloudFormation и Terraform должны отслеживать ресурсы, которыми они управляют.

Terraform

Terraform хранит состояние вашей инфраструктуры в файле состояния. Этот файл по умолчанию хранится локально, однако вы можете хранить его в удаленных бэкэндах, таких как S3, и позволять нескольким пользователям вносить изменения в один и тот же набор инфраструктуры.

CloudFormation

CloudFormation поддерживает состояние внутри системы, поэтому пользователям не нужно беспокоиться о ручном управлении файлом состояния. Это хорошо для тех, кто хочет получить полностью управляемый сервис.

Как AWS CloudFormation, так и Terraform позволяют вам проверить, какие изменения будут внесены в вашу инфраструктуру. В Terraform вы можете выполнить команду “terraform plan”, чтобы увидеть, как Terraform планирует применить ваши изменения конфигурации. В CloudFormation пользователи могут увидеть эту информацию через Change Sets.

Язык

Terraform

Terraform использует язык конфигурации HashiCorp, HCL, созданный компанией HashiCorp. Он очень похож на JSON, с дополнительными встроенными функциями и возможностями.

CloudFormation

Шаблоны CloudFormation написаны в форматах YAML или JSON.

Журналирование и откат

Как AWS CloudFormation, так и Terraform имеют хорошие возможности журналирования. По моему опыту, ошибки и проблемы были понятными (в большинстве случаев).

CloudFormation

По умолчанию CloudFormation откатывает все ваши изменения в случае неудачи изменения стека. Это хорошая функция, но ее можно отключить для целей отладки.

Terraform

Terraform не будет автоматически откатывать ваши изменения, если произойдет сбой. Это не проблема, так как вы всегда можете выполнить команду Terraform destroy, чтобы удалить частично созданную конфигурацию и снова запустить выполнение Terraform.

Область применения

Terraform

Мультиоблачная поддержка Terraform позволяет вам развертывать инфраструктуру на AWS, Azure, Google Cloud и других платформах и предоставляет гибкость, если вы работаете в мультиоблачной среде.

CloudFormation

CloudFormation тесно интегрирован с AWS, что делает его хорошим вариантом для инфраструктур только на AWS, но ограничивает возможности для многоблачных решений.

Поддержка функций

CloudFormation

AWS CloudFormation обычно получает обновления для новых услуг и функций в первую очередь благодаря своей тесной интеграции с AWS.

Terraform

В случаях, когда Terraform не поддерживает определенные функции AWS, вы можете интегрировать стеки CloudFormation непосредственно в ваш код Terraform в качестве обходного решения.

Техническая поддержка

CloudFormation

Платный план технической поддержки AWS также включает поддержку CloudFormation.

Terraform

У HashiCorp есть платные планы для технической поддержки Terraform.

Заключение

Как AWS CloudFormation, так и Terraform являются надежными и полностью развитыми инструментами, каждый из которых имеет свои преимущества. Приведенные выше различия могут помочь вам определить, какой инструмент лучше всего подходит для ваших нужд. Если вы планируете использовать несколько облачных платформ, Terraform предлагает поддержку многоблачных решений, в то время как AWS CloudFormation является отличным выбором для сред, специфичных для AWS. В конечном итоге оба инструмента могут эффективно управлять инфраструктурой как кодом (IaC). Правильный выбор зависит от ваших требований, будь то работа только с AWS или с несколькими облачными провайдерами.

Source:
https://dzone.com/articles/understanding-iac-tools-cloudformation-vs-terraform