To Terraform είναι ένα ανοικτού κώδικα εργαλείο υποδομής ως κώδικα (infrastructure as code), το οποίο παρέχει μια συνεπή ροή εργασίας διεπαφής γραμμής εντολών (command line interface – CLI) για την διαχείριση εκατοντάδων υπηρεσιών νέφους. Ουσιαστικά κωδικοποιεί APIs νεφών σε δηλωτικά (declarative) αρχεία διαμόρφωσης. Αυτά συγγράφονται μέσω της γλώσσας HCL (HashiCorp Configuration Language), η οποία επιτρέπει την συνεπή περιγραφή πόρων με την χρήση μπλοκ, παραμέτρων και εκφράσεων. Επίσης, υπάρχει η δυνατότητα ελέγχου αν το πλάνο εκτέλεσης για μια διαμόρφωση, το οποίο προκύπτει από ένα αρχείο διαμόρφωσης, ταιριάζει με τις αντίστοιχες προσδοκίες πριν την τροφοδοσία ή αλλαγή της υποδομής. Τόσο η τροφοδοσία όσο και η αλλαγή της υποδομής εφαρμόζονται μέσω μιας απλής εντολής που λαμβάνει υπόψη ένα αρχείο διαμόρφωσης.
Τα κύρια χαρακτηριστικά του εργαλείου Terraform συνοψίζονται παρακάτω:
- Συγγραφή δηλωτικών αρχείων διαμόρφωσης: τα οποία επιτρέπουν το ορισμό υποδομής ως κώδικα για την πλήρη διαχείριση του κύκλου ζωής πόρων. Οπότε, είναι δυνατή η δημιουργία νέων πόρων, η διαχείριση υπαρχόντων και η καταστροφή εκείνων των πόρων που δεν χρειάζονται πια. Κι αυτό μέσω μιας πλούσια δηλωτικής γλώσσας περιγραφής πόρων.
- Εγκαταστάσιμες ενότητες: προσφορά δυνατότητας αυτόματης εκφόρτωσης (download) και εγκατάστασης ενοτήτων κοινότητας ή συνεργατών (community or partner modules) από το ευρετήριο (registry). Μια ενότητα είναι ένα δοχείο για πολλαπλούς πόρους που χρησιμοποιούνται μαζί. Μπορεί να χρησιμοποιηθεί για την δημιουργία ελαφριών αφαιρέσεων ώστε να περιγραφεί μια υποδομή με βάση την αρχιτεκτονική της και όχι απευθείας με βάση φυσικά αντικείμενα.
- Σχεδίαση και πρόβλεψη αλλαγών: επιτρέπεται η χρήση τελεστών για την ασφαλή και προβλέψιμη πραγματοποίηση αλλαγών στην υποδομή με καθαρά αντιστοιχισμένες εξαρτήσεις πόρων και τον διαχωρισμό της σχεδίασης από την εφαρμογή. Ουσιαστικά, μπορεί να εφαρμοστεί μια εντολή, η οποία οδηγεί στην δημιουργία ενός πλάνου εκτέλεσης. Το πλάνο αυτό προσδιορίζει τις ενέργειες που είναι απαραίτητες για την επίτευξη της επιθυμητής κατάστασης όπως έχει περιγραφεί στο αντίστοιχο αρχείο διαμόρφωσης.
- Δημιουργία γράφων εξαρτήσεων: το εργαλείο Terraform κατασκευάζει έναν γράφο εξαρτήσεων από τις διαμορφώσεις Terraform και τον επεξεργάζεται για την δημιουργία πλάνων και την ανανέωση της κατάστασης της υποδομής.
- Διαχείριση καταστάσεων: είναι δυνατή η αντιστοίχιση πραγματικών πόρων σε μια διαμόρφωση, η παρακολούθηση και ανανέωση των σχετικών μεταδεδομένων και η βελτίωση της απόδοσης για μεγάλες υποδομές.
- Εκτεταμένο ευρετήριο: προσφέρεται η δυνατότητα επιλογής από μια μεγάλη γκάμα από πλατφόρμες και υπηρεσίες νέφους (500+ παρόχων), προσθήκης αυτών σε μια διαμόρφωση και της χρήση των πόρων τους για την τροφοδοσία της σχετικής υποδομής.
Τα πλεονεκτήματα που προσφέρονται από το Terraform περιλαμβάνουν:
- Μείωση ανθρώπινων λαθών και αύξηση του βαθμού αυτοματοποίησης όσον αφορά την τροφοδοσία της υποδομής των εφαρμογών μέσω κώδικα
- Χρήση μιας ροής εργασίας για την τροφοδοσία υποδομής κατά μήκος 300+ δημόσιων νεφών και υπηρεσιών
- Δημιουργία αναπαραγώγιμης υποδομής μέσω της τροφοδοσίας συνεπών περιβαλλόντων δομικών και παραγωγής με την ίδια διαμόρφωση
Το εργαλείο Terraform μπορεί να εφαρμοστεί σε διάφορες περιοχές και τομείς. Συνοπτικά, μπορούν να αναφερθούν οι εξής:
- Ρύθμιση εφαρμογών σε PaaS περιβάλλοντα: σε τέτοια περιβάλλοντα, μια εφαρμογή θα πρέπει να δημιουργηθεί και να προσαρτηθούν σε αυτή πρόσθετα, όπως βάσεις δεδομένων. Σε αυτή την περίπτωση, το Terraform μπορεί να χρησιμοποιηθεί για την κωδικοποίηση της διαμόρφωσης της εφαρμογής, εξασφαλίζοντας πως όλα τα πρόσθετα είναι διαθέσιμα καθώς και ρυθμίζοντας CDN (Content-Delivery Networks) όπως το Cloudfare για αυτήν. Όλα αυτά μπορεί να γίνουν μέσω κώδικα διαμόρφωσης σε 30 δευτερόλεπτα.
- Εφαρμογές πολλαπλών επιπέδων: οι οποίες μπορεί να αποτελούνται από τουλάχιστον 2 επίπεδα, αυτό που αντιστοιχεί σε μια δεξαμενή από διαδικτυακούς εξυπηρετητές και το δεύτερο που αντιστοιχεί στην χρήση μιας βάσης δεδομένων που διαμοιράζεται από αυτούς. Επιπλέον επίπεδα μπορούν να προστεθούν για την ενοποίηση εξυπηρετητών εφαρμογών, κρυφής μνήμης, κλπ. Σε αυτή την περίπτωση, το Terraform είναι το ιδανικό εργαλείο για την ανάπτυξη και διαχείριση των απαιτούμενων υποδομών. Κάθε επίπεδο μπορεί να περιγραφεί ως μια συλλογή από πόρους και οι εξαρτήσεις μεταξύ των επιπέδων μπορούν να αντιμετωπισθούν αυτόματα. Συγκεκριμένα, το Terraform θα εξασφαλίσει πως το επίπεδο βάσεων δεδομένων θα είναι διαθέσιμο πριν την εκκίνηση των διαδικτυακών εξυπηρετητών και πως οι εξισορροπητές φορτίου έχουν γνώση των διαδικτυακών κόμβων. Κάθε επίπεδο μπορεί επίσης να κλιμακωθεί ξεχωριστά και εύκολα μέσω του Terraform λόγω της κωδικοποίησης και αυτοματοποίησης των σχετικών πόρων καθώς και των συνθηκών κλιμάκωσής τους.
- Δικτύωση οριζόμενη από το λογισμικό (software defined networking – SDN): χρησιμοποιείται ευρέως σε κέντρα δεδομένων διότι παρέχει περισσότερο έλεγχο σε λειτουργούς (operators) και προγραμματιστές και επιτρέπει το δίκτυο να υποστηρίζει καλύτερα τις εφαρμογές που τρέχουν πάνω από αυτό. Οι πιο πολλές υλοποιήσεις SDN έχουν 2 στρώματα: ελέγχου και υποδομής. Το Terraform μπορεί να κωδικοποιήσει την διαμόρφωση για τα SDNs. Αυτή η διαμόρφωση έπειτα μπορεί να χρησιμοποιηθεί από αυτό για την αυτοματοποίηση και ανανέωση των ρυθμίσεων (διαμόρφωσης) μέσω διεπαφής με το στρώμα ελέγχου. Με αυτόν τον τρόπο, επιτρέπεται η δημιουργία εκδόσεων για την διαμόρφωση και η αυτοματοποίηση των αλλαγών. Ως παράδειγμα, το AWS VPC είναι μια κοινά χρησιμοποιούμενη SDN υλοποίηση που μπορεί να διαμορφωθεί από το Terraform.
- Διάταξη πολλαπλών νεφών: Μπορεί να είναι δύσκολο να επιτευχθεί διότι τα περισσότερα εργαλεία για την διαχείριση υποδομών είναι εξειδικευμένα σε ένα νέφος. Απεναντίας, το Terraform είναι ανεξάρτητο νεφών και επιτρέπει μια μόνο διαμόρφωση να χρησιμοποιηθεί για την διαχείριση πολλαπλών παρόχων ή ακόμη και τον χειρισμό εξαρτήσεων κατά μήκος νεφών. Αυτό απλοποιεί την διαχείριση και ενορχήστρωση, βοηθώντας έτσι τους λειτουργούς να κατασκευάσουν υποδομές μεγάλης κλίμακας πολλαπλών νεφών.
Ολοκληρώνουμε την ανάλυση του Terraform παρέχοντας μια μελέτη περίπτωσης. Αυτή αφορά μια ευκίνητη, νεωτεριστική εταιρεία με βάση την Ινδία που ονομάζεται Rapyder. Περιλαμβάνει μια ομάδα από νεαρά και παθιασμένα στελέχη που εξειδικεύονται σε λύσεις υπολογιστικού νέφους, στα μεγάλα δεδομένα, στο μάρκετινγκ και το εμπόριο, καθώς και στις διαχειριζόμενες υπηρεσίες (managed services). Επίσης, είναι σημαντικός πάροχος συμβουλευτικής για στρατηγικές νέφους παρέχοντας υποστήριξη για την σχεδίαση και υλοποίηση λύσεων που είναι απρόσκοπτες, ασφαλής και κλιμακώσιμες.
Ένας πελάτης της Rapyder αναζητούσε ένα εργαλείο ανεξάρτητου συγκεκριμένου νέφους για την ενορχήστρωση της υποδομής του κατά μήκος πολλαπλών δημοσίων νεφών (AWS, Azure). Επιθυμούσε η υποδομή να είναι διαθέσιμη μέσα σε λίγα λεπτά. Επίσης, είχε διαφορετικά περιβάλλοντα, όπως παραγωγής και εξασφάλισης ποιότητας (quality assurance), να υποστηρίξει. Επιπλέον, η δημιουργία αντιγράφων βάσεων δεδομένων ήταν μέρος της ρύθμισης της υποδομής.
Οι μηχανικοί της Rapyder έλαβαν υπόψη τις προαναφερόμενες απαιτήσεις και επέλεξαν το Terraform για την κωδικοποίηση της αυτόματης τροφοδοσίας της υποδομής του πελάτη στα δημόσια νέφη, εξασφαλίζοντας έτσι την εξάλειψη της πιθανότητας ανθρώπινων λαθών. Η λύση που σχεδιάστηκε από την Rapyder επέτρεψε την δημιουργία αντιγράφων ασφάλειας στις περιπτώσεις που η υποδομή του πελάτη καταστρεφόταν. Ακόμη, η Rapyder μπόρεσε να αυτοματοποιήσει την διαδικασία διάταξης της εφαρμογής του πελάτη μέσω την ενοποίησης του Gitlab ώστε να βελτιωθεί η ανάπτυξη λογισμικού και να επιταχυνθεί η παράδοσή του. Με αυτό τον τρόπο, η εφαρμογή του πελάτη θα μπορούσε να γίνει διαθέσιμη άμεσα (στην υποκείμενη υποδομή) χωρίς ανθρώπινη παρέμβαση. Μέσω της παρεχόμενης λύσης, ο πελάτης μπορεί τώρα να δοκιμάσει την εφαρμογή του και να την διατάξει σε περιβάλλον παραγωγής χωρίς χρόνο μη διαθεσιμότητας. Ο χρόνος διάθεσης προς την αγορά (time-to-market) του πελάτη έχει επίσης σημαντικά περιοριστεί. Τέλος, η λύση αυτή παρέχει την ευελιξία στον πελάτη να ενορχηστρώνει την υποδομή του όποτε και όπως το επιθυμεί.
Πηγές: