Πηγή: https://github.com/antonbabenko/terraform-best-practices/tree/master/examples/large-terraform
Αυτό το παράδειγμα περιέχει κώδικα ως παράδειγμα δόμησης των ρυθμίσεων της Terraform για μια υποδομή μεγάλου μεγέθους που χρησιμοποιεί:
2 λογαριασμούς AWS
2 regions
2 ξεχωριστά περιβάλλοντα (prod
και stage
που δεν διαμοιράζονται τίποτα). Κάθε περιβάλλον ζει σε ξεχωριστό λογαριασμό AWS και καλύπτει πόρους μεταξύ 2 regions
Κάθε περιβάλλον χρησιμοποιεί διαφορετική έκδοση της έτοιμης μονάδας υποδομής (alb
) που προέρχεται από το Terraform Registry.
Κάθε περιβάλλον χρησιμοποιεί την ίδια έκδοση μιας εσωτερικής μονάδας modules/network
, καθώς προέρχεται από έναν τοπικό κατάλογο.
Σε ένα μεγάλο έργο όπως αυτό που περιγράφεται εδώ, τα οφέλη από τη χρήση της Terragrunt γίνονται πολύ ορατά. Ανατρέξτε στην ενότητα Παραδείγματα Δομών Κώδικα με Terragrunt.
Ιδανικό για έργα όπου η υποδομή είναι λογικά διαχωρισμένη (ξεχωριστοί λογαριασμοί AWS)
Καλό όταν δεν υπάρχει ανάγκη τροποποίησης πόρων που διαμοιράζονται μεταξύ λογαριασμών AWS (ένα περιβάλλον = ένας λογαριασμός AWS = ένα αρχείο κατάστασης)
Καλό όταν δεν υπάρχει ανάγκη για την ενορχήστρωση των αλλαγών μεταξύ των περιβαλλόντων
Καλό όταν οι πόροι υποδομής είναι διαφορετικοί ανά περιβάλλον επίτηδες και δεν μπορούν να γενικευτούν (π.χ. κάποιοι πόροι απουσιάζουν από ένα περιβάλλον ή από ορισμένες περιοχές)
Καθώς το έργο μεγαλώνει, θα είναι πιο δύσκολο να διατηρούνται αυτά τα περιβάλλοντα ενημερωμένα μεταξύ τους. Εξετάστε το ενδεχόμενο χρήσης μονάδων υποδομής (έτοιμων ή εσωτερικών) για επαναλαμβανόμενες εργασίες.
Τα παρακάτω είναι τα άρθρα αυτής της ενότητας:
Υποδομή μικρού μεγέθους με Terraform
Υποδομή μεσαίου μεγέθους με Terraform
Υποδομή μεγάλου μεγέθους με Terraform
Πηγή: https://github.com/antonbabenko/terraform-best-practices/tree/master/examples/small-terraform
Αυτό το παράδειγμα περιέχει κώδικα ως παράδειγμα δόμησης των ρυθμίσεων του Terraform για μια υποδομή μικρού μεγέθους, όπου δεν χρησιμοποιούνται εξωτερικές εξαρτήσεις.
Ιδανικό για να ξεκινήσετε και να αναδιαμορφώσετε καθώς προχωράτε
Ιδανικό για μικρές ενότητες πόρων
Καλό για μικρές και γραμμικές ενότητες υποδομής (π.χ. terraform-aws-atlantis)
Καλό για μικρό αριθμό πόρων (λιγότερους από 20-30)
Το ενιαίο αρχείο κατάστασης για όλους τους πόρους μπορεί να κάνει τη διαδικασία εργασίας με το Terraform αργή αν ο αριθμός των πόρων αυξάνεται (εξετάστε το ενδεχόμενο να χρησιμοποιήσετε ένα όρισμα -target
για να περιορίσετε τον αριθμό των πόρων)
Αυτά τα παραδείγματα δείχνουν τον πάροχο AWS, αλλά η πλειονότητα των αρχών που παρουσιάζονται στα παραδείγματα μπορούν να εφαρμοστούν σε άλλους παρόχους δημόσιου cloud καθώς και σε άλλα είδη παρόχων (DNS, DB, Monitoring κ.λπ.).
Λίγοι πόροι, χωρίς εξωτερικές εξαρτήσεις. Ενιαίος λογαριασμός AWS. Μία μόνο περιοχή. Ενιαίο περιβάλλον.
Ναι
Διάφοροι λογαριασμοί και περιβάλλοντα AWS, έτοιμες μονάδες υποδομής με χρήση της Terraform.
Ναι
Πολλοί λογαριασμοί AWS, πολλά regions, επείγουσα ανάγκη μείωσης της αντιγραφής-επικόλλησης, προσαρμοσμένες ενότητες υποδομής, έντονη χρήση συνθέσεων. Χρήση της Terraform.
Σε εξέλιξη
πολύ μεγάλος
Εγκαταστάσεις πολλαπλών παρόχων cloud. Χρήση της Terraform.
Όχι
μεσαίος
Διάφοροι λογαριασμοί και περιβάλλοντα AWS, έτοιμες μονάδες υποδομής, σύνθεση με χρήση της Terragrunt.
Όχι
μεγάλος
Πολλοί λογαριασμοί AWS, πολλά regions, επείγουσα ανάγκη μείωσης της αντιγραφής-επικόλλησης, προσαρμοσμένες ενότητες υποδομής, έντονη χρήση συνθέσεων. Χρήση της Terragrunt.
Όχι
πολύ μεγάλος
Διάφοροι πάροχοι (AWS, GCP, Azure). Εγκαταστάσεις πολλαπλών cloud. Χρήση της Terragrunt.
Όχι
Πηγή: https://github.com/antonbabenko/terraform-best-practices/tree/master/examples/medium-terraform
Αυτό το παράδειγμα περιέχει κώδικα ως παράδειγμα δόμησης των ρυθμίσεων Terraform για μια μεσαίου μεγέθους υποδομή που χρησιμοποιεί:
2 λογαριασμούς AWS
2 ξεχωριστά περιβάλλοντα (prod
και stage
που δεν διαμοιράζονται τίποτα). Κάθε περιβάλλον ζει σε ξεχωριστό λογαριασμό AWS
Κάθε περιβάλλον χρησιμοποιεί διαφορετική έκδοση της έτοιμης μονάδας υποδομής (alb
) που προέρχεται από το Terraform registry
Κάθε περιβάλλον χρησιμοποιεί την ίδια έκδοση μιας εσωτερικής μονάδας modules/network
, καθώς προέρχεται από έναν τοπικό κατάλογο.
Ιδανικό για έργα όπου η υποδομή διαχωρίζεται λογικά (ξεχωριστοί λογαριασμοί AWS)
Καλό όταν δεν υπάρχει ανάγκη τροποποίησης πόρων που διαμοιράζονται μεταξύ λογαριασμών AWS (ένα περιβάλλον = ένας λογαριασμός AWS = ένα αρχείο κατάστασης)
Καλό όταν δεν υπάρχει ανάγκη ενορχήστρωσης των αλλαγών μεταξύ των περιβαλλόντων
Καλό όταν οι πόροι υποδομής είναι διαφορετικοί ανά περιβάλλον επίτηδες και δεν μπορούν να γενικευτούν (π.χ. κάποιοι πόροι απουσιάζουν από ένα περιβάλλον ή από ορισμένες περιοχές)
Καθώς το έργο μεγαλώνει, θα είναι πιο δύσκολο να διατηρούνται αυτά τα περιβάλλοντα ενημερωμένα μεταξύ τους. Εξετάστε το ενδεχόμενο χρήσης μονάδων υποδομής (έτοιμων ή εσωτερικών) για επαναλαμβανόμενες εργασίες.