Понимание инструментов IaC: AWS CDK и Terraform
Опубликовано: 2022-03-31AWS CDK и Terraform — не знаете, что выбрать? Эта статья поможет вам принять взвешенное решение.
Облачные вычисления произвели революцию в мире информации и технологий. Облачные вычисления сильно повлияли на все, от того, как мы развертываем и поддерживаем приложения, до методов разработки. Все новые приложения разрабатываются так, чтобы быть облачными и совместимыми с облачными сервисами.
Облачные вычисления помогают нам разрабатывать высокодоступные, масштабируемые и эффективные архитектуры, что делает облачные услуги все более востребованными. С этим бумом облачных вычислений возникла необходимость поддерживать инфраструктуру как код. Обслуживание облачных ресурсов вручную через консоль может быть сложной задачей, которую очень трудно отследить.
Инфраструктура как код, она же IAC или IAAC, решает эту проблему. Используя IAC, мы можем определить наши ресурсы как код и использовать этот код для предоставления облачных сервисов. Использование инфраструктуры как кода позволяет нескольким разработчикам совместно работать над инфраструктурой и отслеживать изменения, внесенные разработчиками.
Инфраструктура как код в AWS
AWS — крупнейший и наиболее широко используемый поставщик облачных услуг в мире. Он имеет собственный инструмент IAC, AWS CloudFormation или AWS CDK, а также позволяет сторонним инструментам IAC, таким как Terraform, выделять ресурсы. При выборе инструментов IAC для AWS Terraform, сторонний инструмент, составляет серьезную конкуренцию инструментам, управляемым AWS, AWS CloudFormation и AWS CDK.
С таким большим выбором и функциями, которые предоставляет каждый из этих инструментов, выбор правильного инструмента IAC может быть сложной задачей. В этой статье мы обсудим разницу между AWS CDK и Terraform. AWS CDK использует Cloudformation для внутреннего использования, поэтому для более подробного ознакомления с Cloudformation и Terraform см. соответствующую статью Общие сведения об инструментах IAC: CloudFormation и Terraform.
Терраформ
Terraform — это инструмент «Инфраструктура как код» с открытым исходным кодом, первоначально разработанный Hashicorp. Это очень точный и зрелый инструмент, который поддерживает не только AWS, но и других облачных провайдеров. Terraform поддерживает все сервисы AWS, и сообщество разработчиков быстро улавливает любую новую функцию, которую AWS добавляет к своим сервисам. Это позволяет нам писать код на языке, разработанном Hashicorp (HCL). HCL — это язык, похожий на JSON, для определения ресурсов инфраструктуры.
CDK AWS
AWS CDK — это оболочка для AWS CloudFormation. Чтобы понять, как работает AWS CDK, вам нужно немного узнать об AWS CloudFormation. AWS CloudFormation — это управляемый AWS инструмент, который позволяет нам определять инфраструктуру AWS в формате YML или JSON. Несмотря на то, что читать JSON и YML легко, они не являются настоящими языками программирования. Нет встроенной поддержки циклов и функций, что усложняет обслуживание больших инфраструктур. Здесь на помощь приходит AWS CDK.
AWS CDK — это оболочка для AWS CloudFromation, которая позволяет использовать знакомые языки программирования, такие как JAVA или Python, для предоставления инфраструктуры. Это упрощает написание и сопровождение кода.
Terraform и AWS CDK: отличия
№1. Язык и простота использования
Язык и простота использования жизненно важны для понимания различий между AWS CDK и Terraform.
Давайте сначала поговорим о Terraform. Terraform использует язык, подобный JSON, для определения ресурсов и других данных, HCL или язык конфигурации HashiCorp. Это довольно просто, а документацию легко понять и следовать даже новичкам.
Давайте посмотрим код для создания корзины S3.
resource "aws_s3_bucket" "my_s3_bucket" { bucket = "my-tf-bucket" tags = { Name = "My bucket" Environment = "Dev" } }
Код довольно прост для чтения, и вы можете увидеть другие параметры, которые поддерживает этот ресурс, в документации Terraform.
Как упоминалось ранее, AWS CDK — это оболочка CloudFormation, которая позволяет нам определять наши ресурсы на языках программирования. Давайте посмотрим код AWS CDK для создания корзины S3.
import * as cdk from '@aws-cdk/core'; import * as s3 from '@aws-cdk/aws-s3'; export class BucketStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); new s3.Bucket(this, 'MyFirstBucket', { bucketName: 'my-first-bucket', }); } }
Код Terraform может выглядеть немного аккуратнее, чем код CDK, но коды Terraform и CDK довольно просты. Если вы планируете использовать IAC для небольшого проекта, Terraform и CDK — отличные варианты с точки зрения языка и простоты использования.

Однако при выборе правильного инструмента IAC для большого проекта со многими разработчиками у Terraform есть недостаток. Какой бы простой ни была Terraform, это новый язык, и вам нужно будет обучать своих разработчиков совершенно новому языку, который не похож на другие используемые языки программирования. Что еще более важно, манипулирование данными в Terraform не так просто, как в других языках программирования. Например, перебирать списки и объекты и преобразовывать значения не так просто, особенно для новичков.
Лично я бы предпочел AWS CDK Terraform, учитывая простоту использования. При использовании Terraform были времена, когда мне приходилось использовать обходные пути или сложные сценарии, чтобы получить желаемые результаты. Наш контроль над данными и возможность легко манипулировать данными на языках AWS CDK — это большая победа для AWS CDK.
№ 2. Сфера
Terraform — это мультиоблачный инструмент IAC, что означает, что вы можете использовать Terraform не только с AWS, но и с другими облачными провайдерами, такими как Azure или GCP. Terraform — отличный инструмент для создания мультиоблачных развертываний и использования любого количества облачных провайдеров для вашего приложения.
Были времена, когда широко используемые глобальные платформы отключались из-за проблем в сервисах облачного провайдера. В настоящее время разумным решением будет иметь более одного облачного провайдера для ваших приложений.
AWS CDK — это предложение AWS для IAC. Каким бы мощным и зрелым ни был CDK, он ограничен только облаком AWS.
При рассмотрении возможностей инструментов IAC Terraform является очевидным победителем из двух. Целесообразно, чтобы ваши разработчики использовали один инструмент для всех облачных платформ.
№3. Производительность
Обычно производительность не является самым важным критерием при выборе правильного инструмента IAC, но в крупных проектах она может иметь значение. Terraform развертывает ресурсы с помощью AWS SDK, тогда как код CDK сначала преобразуется в шаблоны CloudFormation, а затем применяется.
Terraform будет работать немного быстрее, чем AWS CDK, особенно из-за времени, которое требуется CDK для преобразования кода в шаблон CloudFormation.
№ 4. Модульность
Для создания модулей можно использовать как Terraform, так и AWS CDK. Terraform имеет встроенную поддержку модулей. Вы можете создавать свои собственные модули и размещать их в частном реестре модулей для использования в вашей организации. Terraform также имеет общедоступный реестр модулей для размещения и использования общедоступных модулей.
В AWS CDK вы можете создавать повторно используемые функции, классы и делиться этим кодом в своей организации для достижения того же результата. Это большой плюс AWS CDK, как и другого инструмента AWS IAC — CloudFormation не позволяет создавать и повторно использовать код в виде модулей. Вы можете использовать вложенные стеки в CloudFormation для выполнения этого требования, но использование AWS CDK является гораздо более подходящей альтернативой.
В целом, оба инструмента похожи в этом аспекте.
№ 5. Контроль и управление
В конечном итоге весь доступ к консоли AWS контролируется IAM, службой управления идентификацией от AWS. Вы можете использовать политики IAM как с AWS CDK, так и с Terraform, чтобы разрешать и запрещать определенные действия. IAM позволяет вам детально контролировать действия, которые можно выполнять с вашей учетной записью.
Помимо использования IAM для управления доступом к ресурсам аккаунта, Terraform предлагает политику в виде фреймворка кода Sentinel . Sentinel позволяет вам писать подробные политики для правильного управления действиями пользователя через Terraform.
Вывод
Поскольку AWS CDK внутри использует CloudFormation, я предлагаю вам ознакомиться со статьей CloudFormation и Terraform, чтобы лучше понять различия между AWS CDK и Terraform.
В целом и AWS CDK, и Terraform являются зрелыми и мощными инструментами. Terraform имеет небольшой недостаток, когда дело доходит до манипулирования данными. Однако, по моему опыту, как только вы освоитесь с написанием Terraform, использование обходных путей и выполнение преобразований данных станет проще. Для многооблачных операций Terraform — очевидный выбор; однако, если вы хотите использовать AWS в качестве облачного провайдера, AWS CDK — отличная альтернатива.