Cloudformation / Serverless против Terraform в AWS

Aug 25 2020

Я хотел бы понять необходимость таких инструментов, как Terraform. Когда у нас есть доступный шаблон Cloudformation и с его помощью можно создавать / обновлять все сервисы AWS, в чем смысл использования такого сервиса, как Terraform. Пожалуйста, предложите.

Ответы

Marcin Aug 25 2020 at 15:56

CloudFormation (CFN) и Terraform (CF) являются инструментами разработки Infrastructure as Code (IaC).

Однако CFN предназначен только для AWS . Вы не можете использовать его с Azure, GCP или чем-либо еще за пределами экосистемы AWS. Напротив, TF не зависит от облака . Вы можете использовать его не только у нескольких облачных провайдеров, но и для работы с не облачными продуктами, такими как докеры, различные базы данных и даже пицца домино, если хотите.

Таким образом, главное преимущество TF заключается в том, что, изучив его только один раз , вы можете применить его к ряду облачных провайдеров. CFN полезен только в AWS, и как только вы перестанете использовать CFN, вам придется изучить что-то новое для работы с другим облаком.

Также есть разница в том, как работают TF и ​​CFN. У обоих есть свои сильные стороны и уикэнды . Например:

  • при развертывании с использованием CFN все ресурсы доступны для просмотра в одном центральном месте в AWS вместе с исходным кодом шаблона. А с TF такого места нет. Если вы войдете в консоль AWS, вы не поймете, что было создано TF, какой использовался исходный код и т. Д.

  • TF имеет циклы и сложные структуры данных и условия, а CFN - нет.

  • CFN имеет политики создания и обновления, а TF - нет.

  • Вы можете контролировать доступ к CFN с помощью политик CFN и политик IAM. Вы не можете сделать то же самое с TF, поскольку он «живет» за пределами AWS.

1 Blokje5 Aug 25 2020 at 15:56

Есть несколько причин, по которым вы можете выбрать Terraform вместо CloudFormation:

  1. Независимость от поставщика: в будущем может быть момент, когда вам потребуется мигрировать облачную инфраструктуру. Это может быть связано с несколькими причинами (например, с затратами, соблюдением нормативных требований и т. Д.). С Terraform вы по-прежнему можете использовать тот же инструмент для развертывания новой инфраструктуры. Благодаря разумному использованию модулей Terraform вы даже можете оставить большие части своей инфраструктуры в качестве репозитория кода.
  2. Поддержка других инструментов: это также немного основано на предыдущем пункте, но Terraform может развернуть гораздо больше, чем просто ресурсы AWS. Например, вы можете использовать Terraform для организации развертывания машины EC2, которая затем настраивается с помощью Ansible. Или вы можете использовать Terraform для развертывания приложений поверх вашего кластера Kubernetes. Хотя CloudFormation поддерживает настраиваемые ресурсы посредством создания настраиваемых лямбда-выражений, поддерживать это довольно сложно.
  3. Более широкая экосистема: благодаря природе Terraform с открытым исходным кодом существует огромная экосистема инструментов, которые помогают решать всевозможные проблемы, такие как тестирование инфраструктуры в виде кода или непрерывное построение в соответствии с требованиями.
  4. Возможно, лучший язык: лично я считаю, что Terraform больше подходит для инфраструктуры как кода, чем CloudFormation. Terraform имеет гораздо большую гибкость, встроенную в язык (HCL), а их модульная система обеспечивает гораздо большую компоновку, чем то, что может быть достигнуто в CloudFormation.