Розуміння інструментів IaC: AWS CDK проти Terraform

AWS 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-подібна мова для визначення ресурсів інфраструктури.

  Як дивитися Disney+ віддалено з друзями за допомогою GroupWatch

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"
  }
}

Код досить простий для читання, і ви можете побачити інші параметри, які підтримує цей ресурс Тераформна документація.

Як згадувалося раніше, 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 є чудовими варіантами з точки зору мови та простоти використання.

  Як вимкнути пропозиції Siri на екрані блокування вашого iPhone

Однак, якщо вибрати правильний інструмент 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 Cloud.

Якщо розглядати обсяг інструментів IAC, Terraform є очевидним переможцем з двох. Це має сенс, щоб ваші розробники використовували єдиний інструмент для всіх хмарних платформ.

#3. Продуктивність

Продуктивність зазвичай не є найважливішим критерієм при виборі правильного інструменту IAC, але це може мати значення у великих проектах. Terraform розгортає ресурси за допомогою AWS SDK, тоді як код CDK спочатку перетворюється на шаблони CloudFormation, а потім застосовується.

Terraform працюватиме трохи швидше, ніж AWS CDK, зокрема через час, потрібний CDK для перетворення коду в шаблон CloudFormation.

  Як створити вікторину в Google Classroom

#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 є чудовою альтернативою.