Zrozumienie narzędzi IaC: AWS CDK a Terraform

AWS CDK i Terraform – nie wiesz, który wybrać? Ten artykuł pomoże Ci podjąć świadomą decyzję.

Cloud Computing zrewolucjonizował świat informacji i technologii. Od sposobu, w jaki wdrażamy i utrzymujemy aplikacje, po praktyki programistyczne, na wszystko w dużym stopniu wpłynęło Cloud Computing. Wszystkie nowe aplikacje są opracowywane tak, aby były natywne dla chmury i kompatybilne z usługami w chmurze.

Cloud Computing pomaga nam rozwijać wysoce dostępne, skalowalne i wydajne architektury, co sprawia, że ​​usługi w chmurze są coraz bardziej poszukiwane. Wraz z tym boomem w chmurze obliczeniowej pojawia się potrzeba utrzymywania infrastruktury jako kodu. Ręczne utrzymanie zasobów w chmurze za pomocą konsoli może być złożonym zadaniem, które może być bardzo trudne do śledzenia.

Infrastruktura jako kod, czyli IAC lub IAAC, rozwiązuje ten problem. Korzystając z IAC, możemy zdefiniować nasze zasoby jako kod i wykorzystać ten kod do świadczenia usług w chmurze. Używanie infrastruktury jako kodu pozwala wielu programistom współpracować nad infrastrukturą i śledzić zmiany wprowadzane przez programistów.

Infrastruktura jako kod w AWS

AWS jest największym i najczęściej używanym dostawcą chmury na świecie. Ma własne narzędzie IAC, AWS CloudFormation lub AWS CDK, a także umożliwia zewnętrznym narzędziom IAC, takim jak Terraform, udostępnianie zasobów. Wybierając narzędzia IAC dla AWS, Terraform, narzędzie innej firmy, stanowi solidną konkurencję dla narzędzi AWS-Managed, AWS CloudFormation i AWS CDK.

Przy tak wielu możliwościach wyboru i funkcjach, jakie zapewnia każde z tych narzędzi, wybór odpowiedniego narzędzia IAC może być trudny. W tym artykule omówimy różnicę między AWS CDK a Terraform. AWS CDK używa wewnętrznie Cloudformation, więc aby uzyskać głębszy wgląd w Cloudformation i Terraform, zapoznaj się z powiązanym artykułem Zrozumienie narzędzi IAC: CloudFormation vs. Terraform.

Terraforma

Terraform to infrastruktura o otwartym kodzie źródłowym jako narzędzie kodu początkowo opracowane przez Hashicorp. Jest to bardzo dokładne i dojrzałe narzędzie, które obsługuje nie tylko AWS, ale także innych dostawców chmury. Terraform obsługuje wszystkie usługi AWS, a społeczność programistów szybko wychwytuje każdą nową funkcję, którą AWS dodaje do swoich usług. Pozwala nam pisać kod w opracowanym przez Hashicorp języku (HCL). HCL to podobny do JSON język do definiowania zasobów infrastruktury.

AWS CDK

AWS CDK to wrapper wokół AWS CloudFormation. Aby zrozumieć działanie AWS CDK, powinieneś wiedzieć trochę o AWS CloudFormation. AWS CloudFormation to narzędzie zarządzane przez AWS, które pozwala nam definiować infrastrukturę AWS w formacie YML lub JSON. Mimo że czytanie JSON i YML jest łatwe, nie są to rzeczywiste języki programowania. Nie ma natywnego wsparcia dla pętli i funkcji, co sprawia, że ​​utrzymanie dużych infrastruktur jest coraz trudniejsze. Tutaj wkracza AWS CDK.

AWS CDK to wrapper wokół AWS CloudFromation, który umożliwia korzystanie ze znanych języków programowania, takich jak JAVA lub Python, do udostępniania infrastruktury. Ułatwia to pisanie i utrzymanie kodu.

Terraform vs. AWS CDK: różnice

#1. Język i łatwość użycia

Język i łatwość użycia są niezbędne do zrozumienia różnicy między AWS CDK a Terraform.

Porozmawiajmy najpierw o Terraformie. Terraform używa języka podobnego do JSON do definiowania zasobów i innych danych, HCL lub języka konfiguracji HashiCorp. Jest to dość proste, a dokumentacja jest łatwa do zrozumienia i śledzenia, nawet dla początkujących.

Zobaczmy kod do utworzenia wiadra S3.

resource "aws_s3_bucket" "my_s3_bucket" {
  bucket = "my-tf-bucket"

  tags = {
    Name        = "My bucket"
    Environment = "Dev"
  }
}

Kod jest dość prosty do odczytania i możesz zobaczyć inne parametry obsługiwane przez ten zasób w Dokumentacja Terraform.

Jak wspomniano wcześniej, AWS CDK to wrapper CloudFormation, który pozwala nam definiować nasze zasoby w językach programowania. Zobaczmy kod AWS CDK do utworzenia zasobnika 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',
    });
 }
}

Kod Terraform może wyglądać nieco schludniej niż CDK, ale zarówno kody Terraform, jak i CDK są dość proste. Jeśli planujesz używać IAC do małego projektu, zarówno Terraform, jak i CDK są świetnymi opcjami, jeśli chodzi o język i łatwość użycia.

Jednak przy wyborze odpowiedniego narzędzia IAC dla dużego projektu z wieloma programistami Terraform ma wadę. Tak prosty, jak Terraform, jest to nowy język i będziesz musiał wyszkolić swoich programistów w zupełnie nowym języku, który nie jest podobny do innych używanych języków programowania. Co ważniejsze, manipulowanie danymi w Terraform nie jest tak proste, jak w innych językach programowania. Na przykład iteracja przez listy i obiekty oraz przekształcanie wartości nie jest tak proste, szczególnie dla początkujących.

Osobiście wolałbym AWS CDK od Terraform, biorąc pod uwagę łatwość użycia. Podczas korzystania z Terraform zdarzały się sytuacje, w których musiałem użyć obejść lub skomplikowanych skryptów, aby uzyskać pożądane wyniki. Kontrola, jaką mamy nad danymi i możliwość łatwej manipulacji danymi w językach AWS CDK to duża wygrana dla AWS CDK.

#2. Zakres

Terraform to wielochmurowe narzędzie IAC, co oznacza, że ​​możesz używać Terraform nie tylko z AWS, ale także z innymi dostawcami chmury, takimi jak Azure czy GCP. Terraform to doskonałe narzędzie do tworzenia wdrożeń w wielu chmurach i korzystania z dowolnej liczby dostawców chmury dla Twojej aplikacji.

Zdarzały się sytuacje, w których powszechnie używane globalne platformy padały z powodu problemu w usługach Cloud Provider. W dzisiejszych czasach posiadanie więcej niż jednego dostawcy chmury dla aplikacji to mądra decyzja.

AWS CDK to oferta AWS dla IAC. Jakkolwiek potężny i dojrzały CDK może być, jest ograniczony tylko do AWS Cloud.

Rozważając zakres narzędzi IAC, Terraform jest oczywistym zwycięzcą tych dwóch. To ma sens, aby programiści używali jednego narzędzia dla wszystkich platform w chmurze.

#3. Wydajność

Wydajność zwykle nie jest najważniejszym kryterium przy wyborze odpowiedniego narzędzia IAC, ale może mieć znaczenie w dużych projektach. Terraform wdraża zasoby przy użyciu zestawu AWS SDK, podczas gdy kod CDK jest najpierw konwertowany na szablony CloudFormation, a następnie stosowany.

Terraform działałby nieco szybciej niż AWS CDK, szczególnie ze względu na czas potrzebny na konwersję kodu do szablonu CloudFormation przez CDK.

#4. Modułowość

Do tworzenia modułów można używać zarówno Terraform, jak i AWS CDK. Terraform ma natywną obsługę modułów. Możesz tworzyć własne moduły i hostować je w prywatnym rejestrze modułów do użytku w Twojej organizacji. Terraform posiada również publiczny rejestr modułów do hostowania i używania modułów publicznych.

W AWS CDK możesz tworzyć funkcje wielokrotnego użytku, klasy i udostępniać ten kod w swojej organizacji, aby osiągnąć ten sam wynik. To duży plus w AWS CDK, podobnie jak w innym narzędziu AWS IAC – CloudFormation nie pozwala na tworzenie i ponowne wykorzystywanie kodu jako modułów. Możesz użyć zagnieżdżonych stosów w CloudFormation, aby osiągnąć to wymaganie, ale użycie AWS CDK jest o wiele bardziej odpowiednią alternatywą.

W sumie oba narzędzia są pod tym względem podobne.

#5. Kontrola i zarządzanie

Ostatecznie cały dostęp do konsoli AWS jest kontrolowany przez IAM, usługę zarządzania tożsamością z AWS. Możesz użyć zasad uprawnień zarówno z AWS CDK, jak i Terraform, aby zezwolić i odmówić pewnych działań. Uprawnienia pozwalają Ci mieć szczegółową kontrolę nad tym, jakie działania można podjąć na Twoim koncie.

Oprócz korzystania z uprawnień do kontroli dostępu do zasobów konta Terraform oferuje politykę jako strukturę kodu Sentinel. Sentinel umożliwia pisanie szczegółowych zasad, aby poprawnie kontrolować działania użytkownika za pośrednictwem Terraform.

Wniosek

Ponieważ AWS CDK wewnętrznie używa CloudFormation, sugeruję zapoznanie się z artykułem CloudFormation vs. Terraform, aby lepiej zrozumieć różnice między AWS CDK i Terraform.

Ogólnie rzecz biorąc, zarówno AWS CDK, jak i Terraform są dojrzałymi i potężnymi narzędziami. Terraform ma niewielką wadę, jeśli chodzi o manipulację danymi. Jednak z mojego doświadczenia wynika, że ​​gdy nauczysz się pisać Terraform, korzystanie z obejść i przeprowadzanie transformacji danych staje się łatwiejsze. W przypadku operacji w wielu chmurach Terraform jest oczywistym wyborem; jeśli jednak chcesz używać AWS jako dostawcy chmury, AWS CDK jest doskonałą alternatywą.