Μοτίβα στο 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 θα δημιουργήσει μια παρουσία για εσάς και θα λάβετε μια εικονική μηχανή στο σύννεφο.

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

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

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

Και επαναλαμβάνουμε. Παρακαλώ προγραμματίστε. Βλέπουμε τι αλλαγές σχεδιάζονται. Εμείς κάνουμε αίτηση. Και έτσι μεγαλώνουν οι υποδομές μας.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Μοτίβα στο 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 και ρωτά: «Ποιες είναι οι πιο πρόσφατες εκδόσεις προσθηκών; Και το πρόσθετο που έχω στην προσωρινή μνήμη – είναι το σωστό ή το λάθος;» Και αυτό επιβραδύνθηκε σε κάθε βήμα.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ερωτήσεις

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

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

Χρησιμοποιείτε ανοιχτό κώδικα ή επιχείρηση;

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

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

Ο χρόνος ήταν περιορισμένος. Σωστή παρατήρηση.

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

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

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

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

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

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

Όχι.

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

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

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

Το όνομά μου είναι Maxim, είμαι από τη Sberbank. Μιλήσατε λίγο για το πώς προσπαθούσατε να φέρετε την Terraform στο ισοδύναμο μιας γλώσσας προγραμματισμού. Δεν είναι πιο εύκολο να χρησιμοποιήσετε το Ansible;

Αυτά είναι πολύ διαφορετικά πράγματα. Μπορείτε να δημιουργήσετε πόρους στο Ansible και το Puppet μπορεί να δημιουργήσει πόρους στο Amazon. Αλλά το 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 χρόνια, τότε μάλλον θα είχα απαντήσει στην ερώτησή σας.

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

Ταξιδεύουμε με ένα μεγάλο τρένο που κινείται με μεγάλη ταχύτητα. Και δεν μπορείτε απλώς να πάρετε μερικά αυτοκίνητα και να τα πετάξετε.

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

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

Δηλαδή δεν λειτουργεί;

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

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

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

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

Δηλαδή δεν έχει λυθεί ακόμα;

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

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

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

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

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

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

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

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

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

Αποδεικνύεται ότι η μόνη λύση είναι η δοκιμή;

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

Το όνομά μου είναι Timur. Είναι πολύ ωραίο που υπάρχουν αναφορές για το πώς να οργανώσετε σωστά το 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 δεν μπορεί να αλλάξει τίποτα. Δεν μπορούμε να αλλάξουμε τίποτα ούτε με τα χέρια μας. Θα ζήσουμε με αυτό προς το παρόν.

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

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

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

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

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

Τι άλλο ήταν το ερώτημα;

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

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

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

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

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

Όχι μόνο.

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

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

Όχι τώρα, αλλά οι δουλειές θα έρθουν και θα πουν: «Έλα».

Μετάβαση σε άλλο σύννεφο - ναι, αλλά υπάρχει ένα ελαφρώς διαφορετικό κόλπο εδώ. Πρέπει να γράψετε κώδικα Terraform με τέτοιο τρόπο ώστε να μπορείτε να μεταβείτε σε κάποιο άλλο cloud με λιγότερη προσπάθεια.

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

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

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

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

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

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

Πηγή: www.habr.com