AWS CDK та Terraform: як обрати? Ця стаття допоможе вам зробити виважений вибір.
Хмарні технології кардинально змінили світ інформаційних технологій. Вони вплинули на все, від методів розгортання і підтримки додатків до підходів у розробці. Сучасні додатки створюються з урахуванням хмарних можливостей та інтеграції з хмарними сервісами.
Хмарні обчислення дозволяють створювати високонадійні, масштабовані та ефективні архітектури, що підвищує попит на хмарні послуги. Зі зростанням популярності хмарних обчислень виникає потреба в управлінні інфраструктурою як кодом (Infrastructure as Code, IaC). Ручне керування ресурсами через консоль може бути складним та важко відстежуваним процесом.
Інфраструктура як код (IaC) розв’язує цю проблему. За допомогою IaC ресурси описуються у вигляді коду, який використовується для надання хмарних сервісів. Це дозволяє розробникам спільно працювати над інфраструктурою та відстежувати внесені зміни.
Інфраструктура як код в AWS
AWS є провідним постачальником хмарних технологій у світі. Він має власний інструмент IaC – AWS CloudFormation, а також пропонує AWS CDK. Крім того, він дозволяє використовувати сторонні інструменти IaC, такі як Terraform. Обираючи інструмент IaC для AWS, Terraform, як сторонній інструмент, є серйозним конкурентом інструментам, розробленим AWS.
Оскільки кожен із цих інструментів має багато варіантів і функцій, зробити правильний вибір може бути непросто. У цій статті ми розглянемо відмінності між AWS CDK та Terraform. AWS CDK використовує CloudFormation всередині, тому для глибшого розуміння CloudFormation і Terraform зверніться до статті “Розуміння інструментів IaC: CloudFormation проти Terraform”.
Terraform
Terraform – це інструмент з відкритим вихідним кодом для “Інфраструктури як код”, розроблений Hashicorp. Це зрілий і потужний інструмент, який підтримує не тільки AWS, але й інших хмарних провайдерів. Terraform підтримує всі сервіси AWS, і спільнота розробників швидко додає підтримку будь-яких нових функцій, які AWS впроваджує. Він використовує мову, розроблену Hashicorp (HCL). HCL — це JSON-подібна мова для опису інфраструктурних ресурсів.
AWS CDK
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 Configuration Language) для опису ресурсів. Вона досить проста, а документацію легко зрозуміти навіть новачкам.
Розглянемо приклад коду для створення 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, але обидва є досить простими. Якщо ви плануєте використовувати IaC для невеликого проекту, Terraform і CDK є чудовими варіантами з точки зору мови та простоти використання.
Однак, для великого проекту з багатьма розробниками, Terraform має певний недолік. Terraform — це нова мова, і вам доведеться навчати розробників абсолютно нової мови, яка відрізняється від інших мов програмування. Що ще важливіше, маніпулювання даними в Terraform є менш зручним, ніж в інших мовах програмування. Наприклад, ітерація списків і об’єктів та перетворення значень не є такими простими, особливо для новачків.
Особисто я віддаю перевагу AWS CDK, зважаючи на простоту використання. При використанні Terraform мені іноді доводилося використовувати обхідні шляхи або складні сценарії для досягнення потрібного результату. Контроль над даними і можливість легко ними маніпулювати в AWS CDK є значною перевагою.
#2. Сфера застосування
Terraform — це мультихмарний інструмент IaC, який можна використовувати не тільки з AWS, але й з іншими хмарними провайдерами, такими як Azure або GCP. Terraform є чудовим інструментом для створення мультихмарних розгортань та використання будь-якої кількості хмарних провайдерів для вашого додатка.
Бували випадки, коли широко використовувані платформи виходили з ладу через проблеми в одного з хмарних провайдерів. В наш час розумно використовувати кілька хмарних провайдерів для ваших додатків.
AWS CDK є інструментом IaC від AWS, і він обмежений лише AWS Cloud, незважаючи на його потужність.
Якщо розглядати сферу застосування інструментів 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 Console контролюється 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 є чудовою альтернативою.