Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Η συζήτησή μου σχετικά με τα μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειροκίνητης ρουτίνας σε μεγάλα και μακροπρόθεσμα έργα.

Βίντεο:

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Είμαι 40 ετών, έχω 20 χρόνια εμπειρίας στον τομέα της πληροφορικής. Εργάζομαι στην Ixtens εδώ και 12 χρόνια. Ασχολούμαστε με την ανάπτυξη μέσω ηλεκτρονικού εμπορίου. Και ασκώ πρακτικές DevOps εδώ και 5 χρόνια.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Ευχαριστούμε τον Matvey, που μας είπε χθες τι συνέβαινε στην Dodo Pizza. Αυτό μας συνέβη πριν από 4 χρόνια.

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

Οι πιο προφανείς λόγοι για τους οποίους αυτό ήταν απαραίτητο ήταν ότι υπήρχε χρόνος για την κυκλοφορία του στην αγορά. Ήταν απαραίτητο να διασφαλιστεί ότι η ομάδα DevOps δεν θα αποτελούσε εμπόδιο κατά την κυκλοφορία. Και επιπλέον, τα Terraform και Puppet χρησιμοποιήθηκαν στο πρώτο κιόλας επίπεδο.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Για παράδειγμα, χρειαζόμαστε εικονική μηχανήΘα περιγράψουμε και θα προσθέσουμε αρκετές απαιτούμενες παραμέτρους.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Μετά από αυτό, θα ρυθμίσουμε την πρόσβαση στο Amazon στην κονσόλα. Και θα ζητήσουμε ένα πρόγραμμα Terraform. Το πρόγραμμα Terraform θα λέει, "Εντάξει, μπορούμε να κάνουμε αυτά τα πράγματα για τον πόρο σας." Και θα προστεθεί τουλάχιστον ένας πόρος. Και δεν αναμένονται αλλαγές.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Μόλις είστε ικανοποιημένοι με όλα, μπορείτε να ζητήσετε από την Terraform να κάνει αίτηση και η Terraform θα δημιουργήσει μια παρουσία για εσάς και θα έχετε μια εικονική μηχανή στο cloud σας.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Στη συνέχεια, το έργο μας αναπτύσσεται. Προσθέτουμε κάποιες αλλαγές εκεί. Ζητάμε περισσότερες παρουσίες, προσθέτουμε 53 εγγραφές.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Και επαναλαμβάνουμε. Ζητάμε σχέδιο. Βλέπουμε ποιες αλλαγές έχουν προγραμματιστεί. Τις εφαρμόζουμε. Και έτσι η υποδομή μας αναπτύσσεται.

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Τώρα είναι δυνατό να χρησιμοποιήσετε το backend, δηλαδή το Terraform καθορίζεται σε ποιο bucket, με ποιο κλειδί θα πρέπει να αποθηκευτεί το αρχείο κατάστασης. Και το ίδιο το Terraform θα φροντίσει για τη λήψη αυτού του αρχείου κατάστασης, κάνοντας όλη τη μαγεία και επαναφέροντας το τελικό αποτέλεσμα.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Το Terraform σάς επιτρέπει να δημιουργήσετε κάτι σαν μια ενότητα, δηλαδή να περιγράψετε το ίδιο πράγμα σε κάποιον φάκελο.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Αυτό είναι ένα δέντρο καταλόγων που συνιστάται από την ίδια την HashiCorp εάν έχετε ένα μεγάλο έργο και είναι λογικό να διαιρέσετε ολόκληρη την υποδομή σε μερικά μικρά κομμάτια και να περιγράψετε κάθε κομμάτι σε ξεχωριστό φάκελο.

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Το Terraform φροντίζει για όλες τις εξαρτήσεις. Και δημιουργεί πάντα πόρους με τη σειρά που μπορείτε να λάβετε μια διεύθυνση IP, για παράδειγμα, από μια νεοδημιουργημένη παρουσία, και να λάβετε αυτήν τη διεύθυνση IP στην εγγραφή route53.

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

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

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

Και μετά υπήρχαν και άλλα βήματα στα οποία δεν θέλω να αναφερθώ.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

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

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

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

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

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

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Υπάρχει μια ιστορία για έναν μαθητή σε ένα σεμινάριο που σχεδιάζει δύο τέλειους κύκλους στον πίνακα με κιμωλία. Και ο δάσκαλος εκπλήσσεται πώς κατάφερε να τους σχεδιάσει τόσο ομοιόμορφα χωρίς διαβήτη. Ο μαθητής απαντά: «Είναι πολύ απλό, πέρασα δύο χρόνια στον στρατό γυρίζοντας μια μηχανή κοπής κιμά».

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Πού δεν λειτουργούν τα Symlinks; Όπως είπα, το Terraform έχει αρχεία κατάστασης. Και είναι πραγματικά, πραγματικά ωραία. Αλλά το θέμα είναι ότι το Terraform αρχικοποιεί το backend στο πρώτο κιόλας. Και δεν μπορεί να χρησιμοποιήσει καμία μεταβλητή σε αυτές τις παραμέτρους, πρέπει πάντα να γράφονται σε κείμενο.

Και ως αποτέλεσμα, όταν κάποιος δημιουργεί έναν νέο πόρο, αντιγράφει κώδικα από άλλους φακέλους. Και μπορεί να κάνει λάθος με το κλειδί ή με τον κάδο. Για παράδειγμα, δημιουργεί ένα sandbox από το sandbox και στη συνέχεια το κάνει στην παραγωγή. Και μπορεί να αποδειχθεί ότι ο κάδος στην παραγωγή θα χρησιμοποιηθεί από το sandbox. Φυσικά, αυτό θα βρεθεί γρήγορα. Θα είναι δυνατό να διορθωθεί με κάποιο τρόπο, αλλά παρ' όλα αυτά, αυτό είναι χάσιμο χρόνου και, σε κάποιο βαθμό, πόρων.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Τι μπορούμε να κάνουμε στη συνέχεια; Πριν εργαστούμε με το Terraform, πρέπει να το αρχικοποιήσουμε. Τη στιγμή της αρχικοποίησης, το Terraform κατεβάζει όλα τα πρόσθετα (plugins). Κάποια στιγμή, αυτά χωρίστηκαν από το μονόλιθο σε μια αρχιτεκτονική που περισσεύει περισσότερο από μικροϋπηρεσίες. Και πάντα πρέπει να κάνετε την εντολή init του Terraform έτσι ώστε να εμφανίζει όλες τις ενότητες, όλα τα πρόσθετα (plugins).

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Από πού θα βρω τα δεδομένα; Αρχείο JSON. Το Terraform σάς επιτρέπει να γράφετε υποδομή όχι μόνο σε hcl (HashiCorp Configuration Language), αλλά και σε JSON.

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Γιατί είναι σημαντικό να υπάρχει ένας κάδος για το Terraform; Επειδή υπάρχει κάτι τέτοιο όπως τα απομακρυσμένα αρχεία κατάστασης. Δηλαδή, όταν δημιουργώ κάποιον πόρο, για να πω στην Amazon: "Παρακαλώ δημιουργήστε μια παρουσία", πρέπει να καθορίσω πολλές υποχρεωτικές παραμέτρους.

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

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Δεν είναι πάντα απαραίτητο να αποθηκεύετε το αρχείο κατάστασης στο cloud. Για παράδειγμα, κατά τη δοκιμή μονάδων, μπορείτε να χρησιμοποιήσετε την αρχικοποίηση backend, όπου το αρχείο θα αποθηκευτεί απλώς στον δίσκο κατά τη στιγμή της δοκιμής.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Τώρα, λίγα πράγματα για τις δοκιμές. Τι μπορεί να δοκιμαστεί στο Terraform; Πιθανώς, πολλά μπορούν να δοκιμαστούν, αλλά θα μιλήσω για αυτά τα 4 πράγματα.

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

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

Το παράλληλο είναι πολύ ωραίο πράγμα, χρησιμοποίησέ το.

Αλλά κάθε φορά που το Terraform αρχικοποιείται, πηγαίνει στο HashiCorp και ρωτάει: "Ποιες είναι οι πιο πρόσφατες εκδόσεις των plugins; Είναι το plugin που έχω στην προσωρινή μνήμη μου το σωστό ή όχι;" Και αυτό επιβράδυνε τα πράγματα σε κάθε βήμα.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Αν πείτε στο Terraform πού βρίσκονται τα πρόσθετα, το Terraform θα πει: «Εντάξει, αυτό είναι ίσως το πιο πρόσφατο πράγμα που υπάρχει. Δεν θα πάω πουθενά, απλώς θα ξεκινήσω την επικύρωση του κώδικά σας Terraform».

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Για να γεμίσουμε τον φάκελο με τα απαραίτητα πρόσθετα (plugins), έχουμε έναν πολύ απλό κώδικα Terraform που χρειάζεται μόνο να αρχικοποιηθεί. Εδώ, φυσικά, πρέπει να καθορίσετε όλους τους παρόχους που συμμετέχουν με κάποιο τρόπο στον κώδικά σας, διαφορετικά το Terraform θα πει: "Δεν γνωρίζω κάποιον πάροχο, επειδή δεν βρίσκεται στην προσωρινή μνήμη".

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

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

Αυτό μπορεί να γίνει με έξυπνο τρόπο. Για παράδειγμα, γράψαμε ένα σενάριο Python που επιλύει τις εξαρτήσεις. Και ανάλογα με το τι άλλαξε: μια ενότητα Terraform ή απλώς ένα συγκεκριμένο στοιχείο, κάνει σχέδια για όλους τους εξαρτημένους φακέλους.

Το σχέδιο Terraform θα πρέπει να γίνεται κατόπιν ζήτησης. Τουλάχιστον αυτό κάνουμε εμείς.

Φυσικά, είναι καλό να κάνουμε δοκιμές για κάθε αλλαγή, για κάθε υποβολή, αλλά τα σχέδια είναι αρκετά ακριβά. Και σε ένα αίτημα έλξης λέμε: "Παρακαλώ δώστε μου σχέδια." Το ρομπότ ξεκινά. Και στέλνει όλα τα σχέδια που υποτίθεται ότι προέρχονται από τις αλλαγές σας σε σχόλια ή για επισύναψη.

Ένα σχέδιο είναι αρκετά ακριβό. Παίρνει χρόνο επειδή το Terraform πηγαίνει στο Amazon και ρωτάει: "Υπάρχει ακόμα αυτό το στιγμιότυπο; Έχει αυτή η αυτόματη κλιμάκωση ακριβώς τις ίδιες παραμέτρους;" Και για να επιταχύνετε αυτό, μπορείτε να χρησιμοποιήσετε μια παράμετρο όπως refresh=false. Αυτό σημαίνει ότι το Terraform θα κατεβάσει την κατάσταση από το S3. Και θα εμπιστευτεί ότι η κατάσταση θα ταιριάζει ακριβώς με αυτήν που υπάρχει στο Amazon.

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

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Το επόμενο πράγμα για το οποίο θα ήθελα να μιλήσω είναι ο έλεγχος δεδομένων χρήστη.

Τι είναι τα δεδομένα χρήστη; Στο Amazon, όταν δημιουργούμε μια παρουσία, μπορούμε να στείλουμε κάποιο email με την παρουσία - μεταδεδομένα. Όταν ξεκινά μια παρουσία, συνήθως το cloud init είναι πάντα παρόν σε αυτές τις περιπτώσεις. Το Cloud init διαβάζει αυτό το email και λέει: "Εντάξει, σήμερα είμαι εξισορροπητής φορτίου". Και σύμφωνα με αυτές τις αρχές, εκτελεί ορισμένες ενέργειες.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Και αν δεν δώσετε προσοχή σε αυτό, τότε κάποιο κατεστραμμένο αρχείο κειμένου μπορεί να καταλήξει στο Amazon, στην πραγματική υποδομή.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Μια άλλη επιλογή είναι να χρησιμοποιήσετε μια ενότητα για τη δημιουργία δεδομένων χρήστη. Εφαρμόζετε αυτήν την ενότητα. Λαμβάνετε ένα αρχείο στο δίσκο. Το συγκρίνετε με την αναφορά. Έτσι, αν κάποιος νεότερος αποφασίσει να διορθώσει λίγο τα δεδομένα χρήστη, τότε οι δοκιμές σας θα πουν: "Εντάξει, εδώ και εκεί υπάρχουν κάποιες αλλαγές - αυτό είναι φυσιολογικό."

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Το επόμενο πράγμα για το οποίο θα ήθελα να μιλήσω είναι η εφαρμογή Automate Terraform.

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

Για ένα περιβάλλον δοκιμών, όλα αυτά είναι φυσιολογικά. Δηλαδή, μια εργασία που δημιουργεί ένα περιβάλλον δοκιμών είναι αυτό που χρειάζονται όλοι οι προγραμματιστές. Και μια έκφραση όπως «όλα λειτούργησαν για μένα» δεν είναι ένα αστείο meme, αλλά απόδειξη ότι ένα άτομο μπήκε στον κόπο, σήκωσε μια στοίβα, ξεκίνησε κάποιες δοκιμές σε αυτήν τη στοίβα. Και βεβαιώθηκε ότι όλα ήταν φυσιολογικά εκεί και είπε: «Εντάξει, ο κώδικας που κυκλοφορώ δοκιμάστηκε».

Στην παραγωγή, στο sandbox και σε άλλα περιβάλλοντα που είναι πιο σημαντικά για τις επιχειρήσεις, μπορείτε να εφαρμόσετε εν μέρει ορισμένους πόρους με αρκετή ασφάλεια, επειδή αυτό δεν οδηγεί στο θάνατο κάποιου. Αυτά είναι: ομάδες αυτόματης κλιμάκωσης, ομάδες ασφαλείας, ρόλοι, route53 και εκεί η λίστα μπορεί να είναι αρκετά μεγάλη. Αλλά προσέξτε τι συμβαίνει, διαβάστε τις αναφορές για τις αυτόματες εφαρμογές.

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

Η Amazon έχει αυτό που ονομάζεται προστασία τερματισμού. Και μπορεί να σας προστατεύσει σε ορισμένες περιπτώσεις από αλλαγές που δεν χρειάζεστε. Έτσι, η Terraform πηγαίνει στην Amazon και λέει: «Πρέπει να τερματίσω αυτήν την παρουσία για να δημιουργήσω μια άλλη». Και η Amazon λέει: «Συγγνώμη, όχι σήμερα. Έχουμε προστασία τερματισμού».

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Και καλώντας αυτήν την ενότητα, μπορείτε να δημιουργήσετε ένα δέντρο που δημιουργείται σε μία κοινή ενότητα, δηλαδή σε μια κοινή ενότητα που λειτουργεί το ίδιο για ολόκληρη την υποδομή.

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Αυτά είναι όλα τα καλύτερα ευρήματα που έχω. Και θα ήθελα να πω μια ιστορία για τον Κολόμβο. Όταν έψαχνε χρήματα για την αποστολή του να ανακαλύψει την Ινδία (όπως νόμιζε τότε), κανείς δεν τον πίστεψε και νόμιζε ότι ήταν αδύνατο. Τότε είπε: «Φροντίστε να μην πέσει το αυγό». Όλοι οι τραπεζίτες, πολύ πλούσιοι και πιθανώς έξυπνοι άνθρωποι, προσπάθησαν με κάποιο τρόπο να κάνουν το αυγό να σταθεί όρθιο, και αυτό συνέχισε να πέφτει. Τότε ο Κολόμβος πήρε το αυγό, το πίεσε λίγο. Το κέλυφος τσαλακώθηκε και το αυγό έμεινε ακίνητο. Είπαν: «Ω, αυτό είναι πολύ εύκολο!» Και ο Κολόμβος απάντησε: «Ναι, αυτό είναι πολύ εύκολο. Και όταν ανακαλύψω την Ινδία, όλοι θα χρησιμοποιήσουν αυτήν την εμπορική οδό».

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Ας συνοψίσουμε:

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

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

  • Αμετάβλητη υποδομή. Προγραμματισμένη παράδοση AMI.
  • Δομή για τη διαδρομή 53 όταν έχετε πολλές καταχωρήσεις και θέλετε να είναι σε συνεπή σειρά.
  • Η μάχη κατά των ορίων ρυθμού API. Αυτό συμβαίνει όταν η Amazon λέει, «Εντάξει, δεν μπορώ να δεχτώ άλλα αιτήματα, παρακαλώ περιμένετε». Και η μισή εταιρεία περιμένει μέχρι να μπορέσει να λανσάρει την υποδομή της.
  • Spot events. Το Amazon δεν είναι μια φθηνή εκδήλωση και τα spots σας επιτρέπουν να εξοικονομήσετε αρκετά. Και εκεί μπορείτε να δώσετε μια ολόκληρη αναφορά σχετικά με αυτό.
  • Ρόλοι ασφαλείας και IAM.
  • Αναζητώντας χαμένους πόρους, όταν έχετε αντίγραφα άγνωστης προέλευσης στο Amazon, αυτά καταναλώνουν χρήματα. Ακόμα κι αν τα αντίγραφα κοστίζουν 100-150 δολάρια το μήνα - σε διάστημα ενός έτους είναι πάνω από 1 δολάρια. Η αναζήτηση τέτοιων πόρων είναι μια κερδοφόρα επιχείρηση.
  • Και δεσμευμένες περιπτώσεις.

Μοτίβα στο Terraform για την καταπολέμηση του χάους και της χειρωνακτικής ρουτίνας. Μαξίμ Κοστρίκιν (Ίξτενς)

Αυτά από εμένα. Το Terraform είναι πραγματικά ωραίο, χρησιμοποίησέ το. Ευχαριστώ!

ερωτήσεις

Ευχαριστώ για την αναφορά! Έχετε ένα αρχείο κατάστασης στο S3, αλλά πώς λύνεται το πρόβλημα ότι πολλά άτομα μπορούν να πάρουν αυτό το αρχείο κατάστασης και να προσπαθήσουν να το αναπτύξουν;

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

Χρησιμοποιείτε την έκδοση ανοιχτού κώδικα ή την έκδοση για επιχειρήσεις;

Χωρίς επιχειρήσεις, δηλαδή όλα όσα μπορείτε να κατεβάσετε δωρεάν.

Το όνομά μου είναι Stanislav. Ήθελα να κάνω μια μικρή προσθήκη. Μίλησες για τη λειτουργία του Amazon που σου επιτρέπει να κάνεις μια παρουσία μη αδρανής. Αυτό υπάρχει και στο ίδιο το Terraform, στο μπλοκ Life Second μπορείτε να ορίσετε μια απαγόρευση αλλαγής ή μια απαγόρευση καταστροφής.

Είχα περιορισμένο χρόνο. Καλό σχόλιο.

Ήθελα επίσης να ρωτήσω δύο πράγματα. Πρώτον, μιλήσατε για δοκιμές. Χρησιμοποιήσατε κάποια εργαλεία δοκιμών; Άκουσα για το πρόσθετο Test Kitchen. Ίσως υπάρχει κάτι άλλο. Και θα ήθελα επίσης να ρωτήσω για τις Τοπικές Τιμές. Πώς διαφέρουν από τις Μεταβλητές Εισόδου; Και γιατί δεν μπορώ να παραμετροποιήσω κάτι μόνο μέσω των Τοπικών Τιμών; Προσπάθησα να το καταλάβω μόνος μου, αλλά για κάποιο λόγο δεν το κατάλαβα.

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

Όσον αφορά τις Τοπικές Αξίες, ας συνεχίσουμε τη συζήτηση έξω από την αίθουσα.

Γεια! Ευχαριστώ για την ομιλία! Πολύ κατατοπιστική. Είπατε ότι έχετε πολύ παρόμοιο κώδικα για να περιγράψετε την υποδομή. Έχετε σκεφτεί την επιλογή δημιουργίας αυτού του κώδικα;

Εξαιρετική ερώτηση, ευχαριστώ! Το θέμα είναι ότι, όταν χρησιμοποιούμε υποδομή ως κώδικα, υποθέτουμε ότι εξετάζουμε τον κώδικα και καταλαβαίνουμε ποια υποδομή βρίσκεται πίσω από αυτόν. Εάν ο κώδικας δημιουργηθεί, τότε πρέπει να φανταστούμε τι κώδικας θα δημιουργηθεί για να κατανοήσουμε ποια υποδομή θα υπάρχει εκεί. Ή δημιουργούμε τον κώδικα, τον υποβάλλουμε και, στην πραγματικότητα, παίρνουμε το ίδιο πράγμα. Γι' αυτό το λόγο ακολουθήσαμε τον τρόπο που το γράψαμε, το πήραμε. Επιπλέον, οι γεννήτριες εμφανίστηκαν λίγο αργότερα, όταν αρχίσαμε να το κάνουμε. Και ήταν πολύ αργά για να το αλλάξουμε.

Έχετε ακούσει τίποτα για το jsonnet;

Όχι.

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

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

Απλώς κοιτάξτε. Ευχαριστώ!

Ονομάζομαι Μαξίμ και είμαι από την Sberbank. Μου είπες λίγα πράγματα για το πώς προσπάθησες να κάνεις το Terraform παρόμοιο με μια γλώσσα προγραμματισμού. Δεν είναι πιο εύκολο να χρησιμοποιήσεις το Ansible;

Αυτά είναι πολύ διαφορετικά πράγματα. Μπορείτε να δημιουργήσετε πόρους με το Ansible και μπορείτε να δημιουργήσετε πόρους στο Amazon με το Puppet. Αλλά το Terraform είναι ειδικά σχεδιασμένο για αυτό.

Μόνο Amazon έχεις;

Δεν είναι ότι έχουμε μόνο Amazon. Σχεδόν έχουμε μόνο Amazon. Αλλά το βασικό χαρακτηριστικό είναι ότι το Terraform θυμάται. Στο Ansible, αν πείτε, "Φέρτε μου 5 παρουσίες", θα το κάνει, και μετά πείτε, "Τώρα χρειάζομαι 3". Και το Terraform θα πει, "Εντάξει, θα σκοτώσω 2" και το Ansible θα πει, "Εντάξει, ορίστε 3". Άρα αυτό είναι 8.

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

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

Το ερώτημα είναι: Χρησιμοποιείτε το Remote backend, χρησιμοποιείτε το S 3. Γιατί δεν χρησιμοποιείτε το επίσημο backend;

Επίσημος ανώτερος υπάλληλος;

Terraform Cloud.

Πότε εμφανίστηκε;

Πριν από περίπου 4 μήνες.

Αν είχε εμφανιστεί πριν από 4 χρόνια, τότε μάλλον θα είχα απαντήσει στην ερώτησή σου.

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

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

Μιλούσες για νιφάδες χιονιού, γιατί δεν χρησιμοποίησες το branch; Γιατί δεν μπορούσες να το κάνεις με αυτόν τον τρόπο;

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

Άρα δεν λειτουργεί;

Αυτό δεν λειτουργεί καθόλου.

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

Γεια σας! Το όνομά μου είναι Γιούρα! Σας ευχαριστώ για την αναφορά! Ερώτηση σχετικά με τις ενότητες. Λέτε ότι χρησιμοποιείτε ενότητες. Πώς λύνετε το πρόβλημα εάν γίνουν αλλαγές σε μια ενότητα που δεν είναι συμβατές με τις αλλαγές ενός άλλου ατόμου; Προσαρμόζετε με κάποιο τρόπο τις εκδόσεις των ενοτήτων ή προσπαθείτε να φέρετε ένα θαυματουργό όπλο για να ικανοποιήσετε δύο απαιτήσεις;

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

Άρα δεν έχει λυθεί ακόμα;

Φτιάξτε καθολικές ενότητες. Αποφύγετε τις νιφάδες χιονιού. Και όλα θα πάνε καλά. Το δεύτερο μισό της έκθεσης αφορά το πώς να το αποφύγετε αυτό.

Γεια σας! Ευχαριστώ για την κουβέντα! Θα ήθελα να διευκρινίσω. Υπάρχει ένα μεγάλο σωρό πράγματα που έχουν απομείνει στο παρασκήνιο για τα οποία ήρθα. Πώς ενσωματώνονται οι μαριονέτες και η κατανομή ρόλων;

Δεδομένα χρήστη.

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

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

Δηλαδή, πρόκειται για κάποιο είδος ξεχωριστής διαδικασίας που δίνεται;

Δεν το εφηύραμε εμείς. Το χρησιμοποιούμε.

Γεια σας! Έχω μια ερώτηση σχετικά με τα δεδομένα χρήστη. Είπατε ότι υπάρχουν προβλήματα εκεί, ότι κάποιος μπορεί να μεταφέρει κάτι σε λάθος μέρος. Υπάρχει τρόπος να αποθηκεύσουμε δεδομένα χρήστη στο ίδιο Git, ώστε να είναι πάντα σαφές σε τι αναφέρονται τα δεδομένα χρήστη;

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

Άρα η μόνη λύση είναι η δοκιμή;

Ναι, βλέπετε το πρόβλημα, προσθέτετε βήματα δοκιμής εκεί. Δηλαδή, μπορείτε επίσης να κάνετε δοκιμή με έξοδο. Ίσως δεν είναι τόσο βολικό, αλλά μπορείτε επίσης να βάλετε μερικές σημάνσεις - ελέγξτε ότι τα δεδομένα χρήστη είναι σωστά τοποθετημένα εδώ.

Το όνομά μου είναι Τιμούρ. Είναι πραγματικά ωραίο που γίνονται συζητήσεις για το πώς να οργανωθεί σωστά το Terraform.

Δεν έχω καν ξεκινήσει.

Νομίζω ότι στο επόμενο συνέδριο ίσως υπάρξει. Έχω μια απλή ερώτηση. Γιατί κωδικοποιείτε την τιμή σε ξεχωριστή ενότητα αντί να χρησιμοποιείτε tfvars, δηλαδή πώς είναι μια ενότητα με τιμές καλύτερη από τις tfvars;

Δηλαδή, θα έπρεπε να γράψω εδώ (διαφάνεια: Production/environment/settings.tf): domain = variable, domain vpcnetwork, variable vpcnetwork και stvars – προκύπτει το ίδιο πράγμα;

Κάνουμε ακριβώς το ίδιο. Αναφερόμαστε, για παράδειγμα, στη μονάδα πηγαίου κώδικα ρυθμίσεων.

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

Λοιπόν, όλα είναι σε ένα μέρος;

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

Γεια σας! Έχετε αντιμετωπίσει ποτέ καταστάσεις όπου ένας πάροχος cloud παρεμβαίνει σε αυτό που κάνατε με το Terraform; Ας υποθέσουμε ότι επεξεργαζόμαστε μεταδεδομένα. Υπάρχουν κλειδιά ssh εκεί. Και η Google συνεχώς στέλνει τα μεταδεδομένα της, τα κλειδιά της εκεί. Και η Terraform γράφει πάντα ότι έχει αλλαγές. Μετά από κάθε εκτέλεση, ακόμα κι αν δεν αλλάξει τίποτα, λέει πάντα ότι θα ενημερώσει αυτό το πεδίο τώρα.

Με κλειδιά, αλλά - ναι, μέρος της υποδομής επηρεάζεται από κάτι τέτοιο, δηλαδή το Terraform δεν μπορεί να αλλάξει τίποτα. Ούτε εμείς μπορούμε να αλλάξουμε τίποτα χειροκίνητα. Προς το παρόν, το αποδεχόμαστε.

Δηλαδή, το έχεις αντιμετωπίσει αυτό, αλλά δεν έχεις καταλήξει σε τίποτα, πώς το κάνει και το κάνει ο ίδιος;

Δυστυχώς ναι.

Γεια σας! Το όνομά μου είναι Stanislav Starkov. Mail. ru Group. Πώς λύνεται το πρόβλημα με τη δημιουργία μιας ετικέτας στο ..., πώς την περνάτε μέσα; Από όσο καταλαβαίνω, μέσω των δεδομένων χρήστη, για να καθορίσετε το όνομα του κεντρικού υπολογιστή, ορίστε το Puppet σε αυτό; Και το δεύτερο μέρος της ερώτησης. Πώς λύνεται αυτό το πρόβλημα στο SG, δηλαδή όταν δημιουργείτε SG, εκατό παρόμοιες περιπτώσεις, πώς τις ονομάζετε σωστά;

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

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

Τι άλλο περιείχε η ερώτηση;

Όταν το SG δημιουργεί εκατοντάδες στιγμιότυπα, χρειάζεται να διακριθούν με κάποιο τρόπο;

Όχι, δεν χρειάζεται. Κάθε στιγμιότυπο έχει έναν agent που αναφέρει ότι έχω κάποιο πρόβλημα. Εάν ένας agent αναφέρει, τότε ο agent το γνωρίζει και, τουλάχιστον, η διεύθυνση IP του υπάρχει. Μπορείτε να εκτελέσετε τώρα. Δεύτερον, χρησιμοποιούμε το Consul για το Discovery, ενώ το Kubernetes δεν υπάρχει. Και το Consul δείχνει επίσης τη διεύθυνση IP του στιγμιότυπου.

Δηλαδή, εστιάζετε συγκεκριμένα στην IP και όχι στο όνομα του κεντρικού υπολογιστή;

Είναι αδύνατο να πλοηγηθείτε με βάση το όνομα του κεντρικού υπολογιστή, δηλαδή υπάρχουν πάρα πολλά από αυτά. Υπάρχουν αναγνωριστικά στιγμιότυπων – AE, κ.λπ. Μπορείτε να τα βρείτε κάπου, μπορείτε να τα βάλετε στην αναζήτηση.

Γεια! Συνειδητοποίησα ότι το Terraform είναι κάτι καλό, προσαρμοσμένο για cloud.

Όχι μόνο.

Αυτό είναι το ερώτημα που με ενδιαφέρει. Αν αποφασίσετε να κάνετε μαζική μετεγκατάσταση, ας πούμε, στο Bare Metal με όλες τις παρουσίες σας; Θα υπάρξουν προβλήματα; Ή θα πρέπει να χρησιμοποιήσετε άλλα προϊόντα, για παράδειγμα, το ίδιο Ansible που αναφέρθηκε εδώ;

Το Ansible είναι λίγο διαφορετικό. Δηλαδή, το Ansible λειτουργεί όταν η παρουσία έχει ήδη ξεκινήσει. Και το Terraform λειτουργεί πριν ξεκινήσει η παρουσία. Μετάβαση σε Bare Metal – όχι.

Όχι τώρα, αλλά οι επιχειρήσεις θα έρθουν και θα πουν: «Ας το κάνουμε».

Μετεγκατάσταση σε άλλο cloud – ναι, αλλά υπάρχει ένα ελαφρώς διαφορετικό κόλπο εδώ. Ο κώδικας Terraform πρέπει να γραφτεί με τέτοιο τρόπο ώστε να είναι δυνατή η μετεγκατάσταση σε άλλο cloud με λιγότερη αιματοχυσία.

Αρχικά, τέθηκε ως στόχος ολόκληρη η υποδομή μας να είναι αγνωστικιστική, δηλαδή οποιοδήποτε cloud θα έπρεπε να είναι κατάλληλο, αλλά κάποια στιγμή η επιχείρηση ενέδωσε και είπε: «Εντάξει, δεν πάμε πουθενά τα επόμενα N χρόνια, μπορούμε να χρησιμοποιήσουμε υπηρεσίες από την Amazon».

Το Terraform σάς επιτρέπει να δημιουργείτε εργασίες Front-End, να ρυθμίζετε το PagerDuty, το έγγραφο δεδομένων κ.λπ. Έχει πολλές ουρές. Μπορεί πρακτικά να ελέγχει ολόκληρο τον κόσμο.

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

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

Εάν υπάρχει κάποιο σφάλμα, κάνετε επαναφορά; Έχετε δοκιμάσει να το κάνετε αυτό;

Όχι, είναι απόφαση ενός ατόμου τη στιγμή που βλέπει ένα πρόβλημα.

Πηγή: www.habr.com

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster