Понимание инструментов IaC: Cloudformation vs Terraform

Опубликовано: 2022-03-10

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

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

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

Инфраструктура как код — очень популярный термин в облачных вычислениях. Это процесс управления вашей ИТ-инфраструктурой с помощью кода. Да, именно так. Вместо того, чтобы идти в консоль и делать все вручную; Инфраструктура как код, также известная как IAAC или IAC, позволяет вам писать файлы конфигурации, которые затем обеспечивают вашу облачную инфраструктуру. IAC дает нам такие преимущества, как согласованность, простота и быстрота обслуживания и отсутствие права на человеческий фактор.

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

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

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

Terraform и AWS CloudFormation: различия

Модульность

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

CloudFormation

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

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

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

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

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

Терраформ

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

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

Лично я предпочел бы использовать Terraform, а не CloudFormation, если бы модульность была большим требованием.

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

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

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

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

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

Давайте сначала поговорим о CloudFormation. CloudFormation сам по себе не предлагает никакого контроля над использованием шаблонов, но вы можете использовать политики AWS IAM, чтобы разрешить пользователям вашей учетной записи AWS использовать только стандартные шаблоны CloudFormation для создания ресурсов. В нашем примере корзины S3 вы можете ограничить все разрешения «Создание S3» для пользователей и разрешить им создавать корзины S3 только из каталога сервисов AWS или вложенных стеков.

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

Государственное управление

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

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

CloudFormation не поддерживает файл состояния, по крайней мере, тот, который мы видим. CloudFormation — это управляемая служба, поэтому она выполняет все операции по обслуживанию и проверкам состояния в фоновом режиме.

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

Язык

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

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

Логирование и откаты

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

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

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

Сфера

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

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

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

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

Вы также можете создать стек CloudFormation в своем коде Terraform. Итак, если вы используете Terraform и у него нет функции, вы можете временно настроить стек CloudFormation внутри своего кода Terraform.

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

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

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

Вывод

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

Если вы заинтересованы в изучении Terraform, ознакомьтесь с этими онлайн-курсами.