Terraform Modules

Terraform Modules



Στον κόσμο της παροχής και διαχείρισης υποδομής, η Terraform έχει αναδειχθεί ως δημοφιλής επιλογή μεταξύ των προγραμματιστών και των ομάδων επιχειρήσεων. Με τη δηλωτική σύνταξη (HCL – HashiCorp Configuration Language) και την υποστήριξη για διάφορους παρόχους υποδομής, το Terraform επιτρέπει πρακτικές υποδομής ως κώδικα (IaC).

Ένα από τα βασικά χαρακτηριστικά του είναι η χρήση μονάδων που επιτρέπουν τη δημιουργία και την επαναχρησιμοποίηση του αρθρωτού κώδικα υποδομής. Σε αυτό το άρθρο, θα διερευνήσουμε την έννοια των μονάδων Terraform και πώς μπορούν να βοηθήσουν στην οργάνωση και απλοποίηση του κώδικα υποδομής μας.







Εισαγωγή στα Terraform Modules

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



Οι ενότητες μπορούν να δημιουργηθούν και να χρησιμοποιηθούν εσωτερικά μέσα σε ένα έργο ή να μοιραστούν σε πολλά έργα ή ομάδες.



Οργάνωση της Ενότητας

Κατά την οργάνωση των ενοτήτων Terraform, είναι σύνηθες να υπάρχει μια ιεραρχική δομή που αποτελείται από ρίζες και θυγατρικές ενότητες. Ας εξερευνήσουμε πώς λειτουργεί αυτός ο οργανισμός.





Root Module



Η ρίζα αντιπροσωπεύει τη λειτουργική μονάδα ανώτατου επιπέδου στη διαμόρφωση Terraform. Είναι το σημείο εισόδου για τον καθορισμό της συνολικής υποδομής και τη διαχείριση των σχέσεων μεταξύ διαφορετικών πόρων.

Η ρίζα περιέχει συνήθως το αρχείο 'main.tf' όπου ορίζουμε τους πόρους και τις διαμορφώσεις που αποτελούν τη βάση της υποδομής μας. Προαιρετικά, μπορούμε να έχουμε μαζί του τα αρχεία 'variables.tf' και 'outputs.tf'. Επίσης, μπορούμε να ορίσουμε τον κατάλογο 'modules' μας στον ριζικό κατάλογο για εύκολη πρόσβαση στις θυγατρικές μονάδες.

Παιδικές Ενότητες

Οι θυγατρικές μονάδες είναι αρθρωτά στοιχεία που ενσωματώνουν συγκεκριμένα σύνολα πόρων ή διαμορφώσεων. Έχουν σχεδιαστεί για να είναι επαναχρησιμοποιήσιμα και αντιπροσωπεύουν τις αυτόνομες μονάδες λειτουργικότητας της υποδομής.

Οι θυγατρικές μονάδες μπορούν να χρησιμοποιηθούν εντός της ρίζας ή άλλων θυγατρικών λειτουργικών μονάδων που επιτρέπουν τη σύνθεση και τη δημιουργία πολύπλοκων υποδομών. Κάθε θυγατρική λειτουργική μονάδα έχει συνήθως τον κατάλογό της που περιέχει τα απαραίτητα αρχεία διαμόρφωσης, όπως τα 'main.tf', 'variables.tf' και 'outputs.tf'.

Τώρα, ας δούμε πώς μπορούμε να δημιουργήσουμε μια ενότητα Terraform.

Δημιουργία μιας Terraform Module

Κατά τη δημιουργία λειτουργικών μονάδων Terraform, πρέπει να δημιουργήσουμε έναν νέο κατάλογο για τη λειτουργική μονάδα με τα απαιτούμενα αρχεία διαμόρφωσης Terraform. Συνήθως, αυτός ο κατάλογος ονομάζεται 'modules'. Ο ορισμός του στον ριζικό κατάλογο του έργου μας είναι μια βέλτιστη πρακτική.

Ας πάρουμε ένα εύκολο παράδειγμα μιας απλής ενότητας για την παροχή ενός τοπικού διακομιστή web χρησιμοποιώντας το Docker. Αρχικά, ορίζουμε τη λειτουργική μονάδα στον κατάλογο 'modules' ως 'main.tf'.

πόρος 'docker_container' 'διακομιστής Ιστού' {
όνομα  = var.name
εικόνα = var.εικόνα
λιμάνια {
εσωτερικός = var.internal_port
εξωτερικό = var.external_port
}
}

Εδώ, δημιουργούμε μια λειτουργική μονάδα που ονομάζεται 'docker_container' που λαμβάνει το όνομα του κοντέινερ, την εικόνα Docker, την εσωτερική θύρα και την εξωτερική θύρα ως μεταβλητές εισόδου. Η ενότητα ενσωματώνει τη λογική για τη δημιουργία ενός πόρου κοντέινερ Docker και επιτρέπει στον καλούντα να προσαρμόσει τις ιδιότητες του κοντέινερ.

Όπως φαίνεται στην παρακάτω εικόνα, δημιουργούμε ένα ξεχωριστό αρχείο που ονομάζεται 'variables.tf' στον κατάλογο 'modules' για να ορίσουμε τις μεταβλητές εισόδου που μπορούν να προσαρμοστούν κατά τη χρήση της λειτουργικής μονάδας:

μεταβλητός 'όνομα' {
περιγραφή = 'Όνομα κοντέινερ Docker'
τύπος = χορδή
}

μεταβλητός 'εικόνα' {
περιγραφή = 'Εικόνα Docker'
τύπος = χορδή
}

μεταβλητός 'internal_port' {
περιγραφή = 'Εσωτερική θύρα στο κοντέινερ Docker'
τύπος = αριθμός
}

μεταβλητός 'external_port' {
περιγραφή = 'Εξωτερική θύρα για αντιστοίχιση'
τύπος = αριθμός
}

Εδώ, δηλώσαμε τέσσερις μεταβλητές, η καθεμία με 'περιγραφή' και 'τύπο' ως χαρακτηριστικά και σχετικές τιμές με αυτές.

Χρήση μιας μονάδας Terraform

Εφόσον δημιουργήσαμε την ενότητα μας, μπορούμε πλέον να τη χρησιμοποιήσουμε στην κύρια διαμόρφωση Terraform αναφέροντας την πηγή της. Ας δημιουργήσουμε το κύριο αρχείο ρυθμίσεων που είναι 'main.tf' στον ριζικό κατάλογο.

μονάδα μέτρησης 'webserver_container' {
πηγή = '../modules/docker_container'
όνομα            = 'mywebserver'
εικόνα           = 'nginx:latest'
εσωτερική_θύρα   = 80
εξωτερική_θύρα   = 8080
}

Χρησιμοποιούμε το μπλοκ 'module' στον προηγούμενο κώδικα για να δημιουργήσουμε τη μονάδα κοντέινερ Docker. Παρέχουμε τις απαραίτητες τιμές εισόδου για τη μονάδα, όπως το όνομα κοντέινερ, την εικόνα Docker και τη διαμόρφωση θύρας. Η παράμετρος 'source' καθορίζει τη σχετική διαδρομή προς τον κατάλογο 'module'.

Στη συνέχεια, ας δούμε πώς να χρησιμοποιήσουμε τις εξόδους Terraform για χρήση με λειτουργικές μονάδες.

Έξοδοι μονάδας

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

παραγωγή 'container_id' {
περιγραφή = 'Αναγνωριστικό του δημιουργημένου κοντέινερ Docker'
τιμή       = docker_container.webserver.id
}

Εδώ, δημιουργήσαμε ένα αρχείο 'outputs.tf' μέσα στον κατάλογο 'modules'. Αυτή η μεταβλητή εξόδου εκθέτει το αναγνωριστικό του κοντέινερ Docker που δημιουργείται από τον πόρο 'docker_container' που ονομάζεται 'webserver' εντός της λειτουργικής μονάδας.

Τώρα, μπορούμε να έχουμε πρόσβαση στο αναγνωριστικό κοντέινερ στο αρχείο ρυθμίσεων ρίζας μας. Ανατρέξτε στον ακόλουθο ενημερωμένο κώδικα του αρχείου 'main.tf' στον ριζικό κατάλογο:

μονάδα μέτρησης 'webserver_container' {
πηγή = '../modules/docker_container'
όνομα            = 'mywebserver'
εικόνα           = 'nginx:latest'
εσωτερική_θύρα   = 80
εξωτερική_θύρα   = 8080
}

πόρος 'docker_volume' 'δεδομένα' {
# Τα υπόλοιπα επιχειρήματα πηγαίνουν εδώ
δένω = module.webserver_container.container_id
}

Χρησιμοποιώντας το 'module.webserver_container.container_id' ως τιμή για το όρισμα 'bind', δίνουμε εντολή στην Terraform να δεσμεύσει τον τόμο Docker στη θέση που καθορίζεται από το αναγνωριστικό κοντέινερ της λειτουργικής μονάδας 'web_container'. Αυτό δημιουργεί μια σχέση μεταξύ του πόρου τόμου Docker και του κοντέινερ που δημιουργείται από τη λειτουργική μονάδα 'webserver_container', διασφαλίζοντας ότι ο τόμος έχει τοποθετηθεί στην κατάλληλη θέση.

Βέλτιστες πρακτικές για ενότητες Terraform

Modularize για επαναχρησιμοποίηση

Θα πρέπει να λάβουμε υπόψη την επαναχρησιμοποίηση κατά το σχεδιασμό των μονάδων. Επίσης, πρέπει να αναγνωρίσουμε τα λογικά στοιχεία ή τα μοτίβα της υποδομής μας και να τα ενσωματώσουμε σε ξεχωριστές ενότητες. Αυτό προωθεί την επαναχρησιμοποίηση κώδικα, την τυποποίηση και την ευκολότερη συνεργασία μεταξύ των ομάδων.

Σαφής και συνεπής ονομασία

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

Απομόνωση Εξαρτήσεων

Πρέπει να αποφύγουμε τη στενή σύζευξη μεταξύ των μονάδων. Κάθε ενότητα θα πρέπει να περιλαμβάνει τους δικούς της πόρους και εξαρτήσεις. Αυτό διασφαλίζει ότι οι μονάδες μπορούν να επαναχρησιμοποιηθούν ανεξάρτητα και προάγει την καλύτερη απομόνωση και ενθυλάκωση.

Έλεγχος έκδοσης και Μητρώο μονάδας

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

συμπέρασμα

Κάναμε μια σύντομη εισαγωγή στις ενότητες Terraform και μάθαμε πώς να τις δημιουργήσουμε με ένα απλό παράδειγμα. Στη συνέχεια, εξετάσαμε πώς να χρησιμοποιήσουμε τις μεταβλητές και τις εξόδους με την ενότητα μας για να βελτιώσουμε την ευελιξία, τη δυνατότητα επαναχρησιμοποίησης και τη συντηρησιμότητα. Συμπερασματικά, οι μονάδες Terraform είναι ισχυρά εργαλεία για την οργάνωση και την απλοποίηση του κώδικα υποδομής. Μας επιτρέπουν να ενσωματώσουμε ένα σύνολο πόρων ή διαμορφώσεων σε επαναχρησιμοποιήσιμα στοιχεία προάγοντας τη σπονδυλωτή, την επαναχρησιμοποίηση και τη συνεργασία στα έργα υποδομής ως κώδικας.