Κατανόηση των εργαλείων IaC: AWS CDK εναντίον Terraform

AWS CDK και Terraform – δεν είστε σίγουροι ποιο να επιλέξετε; Αυτό το άρθρο θα σας βοηθήσει να πάρετε μια τεκμηριωμένη απόφαση.

Το Cloud Computing έχει φέρει επανάσταση στον κόσμο της πληροφορίας και της τεχνολογίας. Από τον τρόπο που αναπτύσσουμε και διατηρούμε τις εφαρμογές μέχρι τις πρακτικές ανάπτυξης, τα πάντα έχουν επηρεαστεί σε μεγάλο βαθμό από το Cloud Computing. Όλες οι νέες εφαρμογές έχουν αναπτυχθεί για να είναι εγγενείς στο cloud και συμβατές με υπηρεσίες cloud.

Το Cloud Computing μας βοηθά να αναπτύξουμε εξαιρετικά διαθέσιμες, επεκτάσιμες και αποτελεσματικές αρχιτεκτονικές, γεγονός που καθιστά τις υπηρεσίες cloud όλο και πιο απαιτητικές. Με αυτήν την έκρηξη στο cloud computing προκύπτει η ανάγκη διατήρησης της υποδομής ως κώδικα. Η χειροκίνητη διατήρηση πόρων cloud μέσω της κονσόλας μπορεί να είναι μια πολύπλοκη εργασία που μπορεί να είναι πολύ δύσκολη η παρακολούθηση.

Η υποδομή ως κωδικός, γνωστός και ως IAC ή IAAC, λύνει αυτό το πρόβλημα. Χρησιμοποιώντας το IAC, μπορούμε να ορίσουμε τους πόρους μας ως κώδικα και να χρησιμοποιήσουμε αυτόν τον κώδικα για την παροχή υπηρεσιών cloud. Η χρήση της υποδομής ως κώδικα επιτρέπει σε πολλούς προγραμματιστές να συνεργάζονται στην υποδομή και να παρακολουθούν τις αλλαγές που πραγματοποιούν οι προγραμματιστές.

Η υποδομή ως κώδικας στο AWS

Το AWS είναι ο μεγαλύτερος και ο πιο ευρέως χρησιμοποιούμενος πάροχος cloud παγκοσμίως. Διαθέτει το δικό του εργαλείο 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

Το Terraform είναι ένα εργαλείο ανοιχτού κώδικα Υποδομή ως Κώδικα που αναπτύχθηκε αρχικά από τη Hashicorp. Είναι ένα εξαιρετικά ακριβές και ώριμο εργαλείο που υποστηρίζει όχι μόνο το AWS αλλά και άλλους παρόχους cloud. Η Terraform υποστηρίζει όλες τις υπηρεσίες AWS και η κοινότητα ανάπτυξης γνωρίζει γρήγορα κάθε νέα δυνατότητα που προσθέτει το AWS στις υπηρεσίες του. Μας επιτρέπει να γράφουμε κώδικα σε αναπτυγμένη γλώσσα Hashicorp (HCL). Η HCL είναι μια γλώσσα τύπου JSON για τον ορισμό πόρων υποδομής.

  Πώς να φορτώσετε τον ιστότοπο Balance μεταξύ GCP και AWS χρησιμοποιώντας το Cloudflare;

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. Είναι αρκετά απλό και η τεκμηρίωση είναι εύκολο να κατανοηθεί και να ακολουθηθεί, ακόμη και για αρχάριους.

Ας δούμε έναν κωδικό για τη δημιουργία ενός κάδου 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 είναι εξαιρετικές επιλογές όσον αφορά τη γλώσσα και την ευκολία χρήσης.

  8 καλύτερα εργαλεία δοκιμών ηλεκτρονικού ταχυδρομείου που μπορείτε να χρησιμοποιήσετε για τις καμπάνιες σας

Ωστόσο, όταν επιλέγετε το σωστό εργαλείο IAC για ένα μεγάλο έργο με πολλούς προγραμματιστές, το Terraform έχει ένα μειονέκτημα. Όσο απλή και αν είναι η Terraform, είναι μια νέα γλώσσα και θα χρειαστεί να εκπαιδεύσετε τους προγραμματιστές σας σε μια εντελώς νέα γλώσσα που δεν είναι παρόμοια με τις άλλες γλώσσες προγραμματισμού που χρησιμοποιούνται. Το πιο σημαντικό, ο χειρισμός δεδομένων στο Terraform δεν είναι τόσο απλός όσο σε άλλες γλώσσες προγραμματισμού. Για παράδειγμα, η επανάληψη μέσω λιστών και αντικειμένων και η μετατροπή τιμών δεν είναι τόσο απλή, ειδικά για αρχάριους.

Προσωπικά, θα προτιμούσα το AWS CDK από το Terraform αν λάβω υπόψη την ευκολία χρήσης. Όταν χρησιμοποιούσα το Terraform, υπήρξαν φορές που χρειάστηκε να χρησιμοποιήσω εναλλακτικούς τρόπους αντιμετώπισης ή πολύπλοκα σενάρια για να έχω τα επιθυμητά αποτελέσματα. Ο έλεγχος που έχουμε στα δεδομένα και η δυνατότητα να χειριζόμαστε εύκολα δεδομένα σε γλώσσες AWS CDK είναι μια μεγάλη νίκη για το AWS CDK.

#2. Πεδίο εφαρμογής

Το Terraform είναι ένα εργαλείο IAC με πολλά νέφη, που σημαίνει ότι μπορείτε όχι μόνο να χρησιμοποιήσετε το Terraform με AWS αλλά και με άλλους παρόχους cloud όπως το Azure ή το GCP. Το Terraform είναι ένα εξαιρετικό εργαλείο για να δημιουργήσετε αναπτύξεις πολλαπλών νέφους και να έχετε οποιονδήποτε αριθμό παρόχων cloud για την εφαρμογή σας.

Υπήρξαν στιγμές που οι ευρέως χρησιμοποιούμενες παγκόσμιες πλατφόρμες κατέρρευσαν λόγω προβλήματος στις υπηρεσίες του Cloud Provider. Στη σημερινή εποχή, είναι μια έξυπνη απόφαση να έχετε περισσότερους από έναν παρόχους cloud για τις εφαρμογές σας.

Το AWS CDK είναι μια προσφορά AWS για το IAC. Όσο ισχυρό και ώριμο μπορεί να είναι το CDK, περιορίζεται μόνο στο AWS Cloud.

Όταν εξετάζουμε το εύρος των εργαλείων IAC, το Terraform είναι ο προφανής νικητής από τα δύο. Είναι πολύ λογικό να βάζετε τους προγραμματιστές σας να χρησιμοποιούν ένα μόνο εργαλείο για όλες τις πλατφόρμες cloud.

#3. Εκτέλεση

Η απόδοση συνήθως δεν είναι το πιο σημαντικό κριτήριο κατά την επιλογή του σωστού εργαλείου IAC, αλλά μπορεί να έχει σημασία σε μεγάλα έργα. Το Terraform αναπτύσσει πόρους χρησιμοποιώντας το AWS SDK, ενώ ο κώδικας CDK πρώτα μετατρέπεται σε πρότυπα CloudFormation και στη συνέχεια εφαρμόζεται.

  Πώς να ρυθμίσετε το Mac σας ώστε να ενεργοποιείται αυτόματα κάθε μέρα

Το 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 vs. Terraform για να κατανοήσετε καλύτερα τις διαφορές μεταξύ του AWS CDK και του Terraform.

Συνολικά, τόσο το AWS CDK όσο και το Terraform είναι ώριμα και ισχυρά εργαλεία. Το Terraform έχει ένα μικρό μειονέκτημα όσον αφορά τον χειρισμό δεδομένων. Ωστόσο, από την εμπειρία μου, μόλις νιώσετε πιο άνετα με τη σύνταξη Terraform, η χρήση εναλλακτικών λύσεων και η εκτέλεση μετασχηματισμών δεδομένων γίνεται ευκολότερη. Για λειτουργίες πολλαπλών νέφους, το Terraform είναι μια προφανής επιλογή. Ωστόσο, εάν θέλετε να χρησιμοποιήσετε το AWS ως πάροχο cloud, το AWS CDK είναι μια εξαιρετική εναλλακτική λύση.