Όταν ανοίγεις το Slack το πρωί, οι διακομιστές που σου απαντούν δεν έχουν δημιουργηθεί με το χέρι σε μια κονσόλα. Έχουν περιγραφεί σε αρχεία κειμένου, έχουν αναθεωρηθεί σε ένα αίτημα συγχώνευσης και έχουν κατασκευαστεί από το Terraform. Το ίδιο συμβαίνει στο GitHub, στη Decathlon, και σε χιλιάδες μικρότερες ομάδες. Ακολουθούν τέσσερα δημόσια, επαληθεύσιμα γεγονότα, με την πηγή τους.
| Ποιος | Τι κάνει με το Terraform | Πηγή |
|---|---|---|
| Slack | Μία μοναδική σύνταξη για AWS, DigitalOcean, NS1 και Google Cloud. Περίπου 1.400 αρχεία state, το καθένα στην κατοχή της ομάδας που κατέχει την υπηρεσία. Το state αποθηκεύεται στο S3 με versioning, κλειδωμένο με DynamoDB. Ένα εσωτερικό εργαλείο δημοσιεύει το terraform plan σε κάθε pull request πριν από τη συγχώνευση. | How We Use Terraform At Slack, άρθρο μηχανικής του Slack, 25 Οκτωβρίου 2022 |
| GitHub | «Σχεδόν όλοι οι διακομιστές μας, συμπεριλαμβανομένων αυτών του κέντρου δεδομένων, διαχειρίζονται από το Terraform και κατασκευάζονται με τον ίδιο τρόπο, είτε στο Azure, στο AWS είτε σε άλλη πλατφόρμα.» Η δημιουργία πρωτοτύπου μιας νέας υπηρεσίας απαιτούσε πολλές ημέρες· με το Terraform, λιγότερο από μία ώρα. | Μελέτη περίπτωσης HashiCorp — GitHub, δηλώσεις του Aaron Brown, μηχανικού υποδομών |
| Decathlon | Πριν: πάνω από μία εβδομάδα για την απόκτηση μιας υποδομής, λόγω της διέλευσης από πολλές ομάδες και μια CMDB. Μετά: «αυτό που χρειαζόταν πάνω από μία εβδομάδα γίνεται τώρα σε λιγότερο από 30 λεπτά», και κάθε επωνυμία κατασκευάζει μόνη της ό,τι χρειάζεται. | Μελέτη περίπτωσης HashiCorp — Decathlon, δηλώσεις του Kévin Defives, μηχανικού πληροφοριακών συστημάτων |
| Ολόκληρη η κοινότητα | Το Terraform Registry μετρά πάνω από 7.200 providers (τα πρόσθετα που μιλούν με τα API) και πάνω από 24.000 επαναχρησιμοποιήσιμα modules. Μόνο ο provider AWS έχει ξεπεράσει τα 5 δισεκατομμύρια λήψεις: οκτώ χρόνια για το πρώτο δισεκατομμύριο, δύο χρόνια για τα επόμενα τέσσερα. | Terraform Registry (μετρητής του API του Registry, καταγραφή στις 15 Σεπτεμβρίου 2026) · HashiCorp, 24 Νοεμβρίου 2025 |
Το κοινό σημείο αυτών των ομάδων: έχουν πάντα μια κονσόλα cloud, και τη χρησιμοποιούν για να παρατηρούν. Όμως η πηγή αλήθειας, αυτό που λέει τι πρέπει να υπάρχει, είναι ο κώδικας. Κανείς δεν δημιουργεί έναν διακομιστή κάνοντας κλικ. Αυτό ακριβώς θα κάνεις σε αυτό το μάθημα, σε μικρή κλίμακα: πρώτα ένα αρχείο κειμένου στο μηχάνημά σου, μετά ένα bucket S3, μετά τέσσερις πλατφόρμες ταυτόχρονα.
Έξι λέξεις θα επανέρχονται σε κάθε μάθημα. Δίνονται εδώ με τον ορισμό που δίνει η HashiCorp, μεταφρασμένο, και τον σύνδεσμο προς την επίσημη σελίδα.
| Όρος | Τι είναι | Επίσημη αναφορά |
|---|---|---|
| Infrastructure as Code (IaC) | Η διαχείριση της υποδομής μέσα σε ένα ή περισσότερα αρχεία, αντί να ρυθμίζεται με το χέρι σε μια διεπαφή. Εικονικά μηχανήματα, ομάδες ασφάλειας, δικτυακές διεπαφές, buckets, αποθετήρια Git: οτιδήποτε έχει API μπορεί να περιγραφεί σε ένα αρχείο. | Γλωσσάρι Terraform — Infrastructure as Code |
| Δηλωτικό (σε αντίθεση με το προστακτικό) | Ένα δηλωτικό αρχείο περιγράφει το αποτέλεσμα που αναμένεται: «αυτό το bucket πρέπει να υπάρχει, με αυτές τις ετικέτες». Ένα προστακτικό script περιγράφει τα βήματα: «κάλεσε το create-bucket, μετά το put-bucket-tagging…». Τα αρχεία Terraform είναι δηλωτικά: δεν γράφεις τα βήματα, το Terraform τα συνάγει. | What is Terraform — δηλωτική διαμόρφωση |
| Ιδεμποτεντικότητα | Η επανεκτέλεση της ίδιας λειτουργίας πολλές φορές δίνει το ίδιο αποτέλεσμα με μία μόνο φορά. Αν η υποδομή ταιριάζει ήδη με τον κώδικα, το terraform plan ανακοινώνει ότι δεν απαιτείται καμία ενέργεια (No changes. Your infrastructure matches the configuration.) και το apply δεν αγγίζει τίποτα. Ένα script που αλυσιδώνει κλήσεις create-…, αν επανεκτελεστεί, αποτυγχάνει σε κάτι που υπάρχει ήδη ή δημιουργεί διπλότυπο. | Αναφορά του terraform plan |
| Απόκλιση (drift) | Η διαφορά ανάμεσα σε αυτό που πιστεύει το state και σε αυτό που πραγματικά υπάρχει, επειδή κάποιος τροποποίησε έναν πόρο εκτός Terraform (στην κονσόλα, με ένα script, με το χέρι). Το Terraform την εντοπίζει τη στιγμή του plan, ξαναδιαβάζοντας την πραγματική υποδομή. | Οδηγός — Manage resource drift |
| State | Το αρχείο (terraform.tfstate) όπου το Terraform σημειώνει ποιο μπλοκ κώδικα αντιστοιχεί σε ποιο πραγματικό αντικείμενο (με το αναγνωριστικό του, τις ιδιότητές του). Χωρίς αυτό, το Terraform δεν θα ξέρει ότι ένα bucket που υπάρχει ήδη είναι «δικό του» και θα το ξανακατασκεύαζε. Είναι ευαίσθητο: μπορεί να περιέχει κωδικούς πρόσβασης και διευθύνσεις. | Terraform state |
| Provider | Ένα plugin που γνωρίζει το API μιας πλατφόρμας (AWS, Azure, Google Cloud, GitHub, ή ακόμα και τον τοπικό δίσκο) και εκθέτει τα αντικείμενά της ως τύπους πόρων. Το Terraform τα κατεβάζει κατά το terraform init. Ο provider κάνει τις κλήσεις API, όχι το Terraform το ίδιο. | Providers |
Φανταστείτε έναν αρχιτέκτονα υπεύθυνο για ένα κτίριο. Έχει τρία πράγματα στη διάθεσή του.
.tf.Κάθε φορά που του ζητείται να επέμβει, ο αρχιτέκτονας κάνει το ίδιο πράγμα. Ξαναδιαβάζει το σχέδιο. Ανοίγει την καταγραφή του. Πηγαίνει να δει το κτίριο. Στη συνέχεια συγκρίνει τα τρία και γράφει μια προσφορά εργασιών: αυτός ο τοίχος λείπει, πρέπει να κατασκευαστεί· αυτή η πόρτα δεν είναι στο σχέδιο, πρέπει να αφαιρεθεί· αυτό το παράθυρο είναι στη σωστή θέση, δεν το αγγίζουμε. Η προσφορά υπογράφεται από τον πελάτη, και μόνο τότε τα επαγγέλματα (οι providers) εκτελούν κάθε γραμμή. Τίποτα περισσότερο, τίποτα λιγότερο από την προσφορά.
Αυτή η εικόνα επανέρχεται σε όλο το μάθημα. Όταν ένα μάθημα μιλά για το σχέδιο, την καταγραφή και το κτίριο, μιλά για τον κώδικα, το state και την πραγματική υποδομή.
Η ουσιαστική διαφορά ανάμεσα στο «σχέδιο» και το
terraform plan. Στην εικόνα, το σχέδιο είναι το σχέδιο του αρχιτέκτονα, δηλαδή ο κώδικάς σου. Η εντολήterraform plan, από την άλλη, παράγει την προσφορά εργασιών: τη λίστα με όσα θα αλλάξουν ώστε το κτίριο να συμβαδίσει με το σχέδιο. Δύο σημασίες για την ίδια λέξη. Στο μάθημα, γράφουμε «το σχέδιο (ο κώδικας)» ή «η προσφορά (η έκδοση τουterraform plan)» όταν υπάρχει κίνδυνος σύγχυσης.
Μπορείς να δημιουργήσεις ένα bucket S3 με τρεις τρόπους χωρίς Terraform: κάνοντας κλικ, εκτελώντας ένα script, ή ακολουθώντας μια γραπτή διαδικασία. Καθένας έχει τη θέση του. Κανένας δεν κάνει τη δουλειά του αρχιτέκτονα.
| Μέθοδος | Τι κάνει καλά | Τι δεν κάνει |
|---|---|---|
| Η κονσόλα (AWS, Azure, GCP στον περιηγητή) | Εξερεύνηση, κατανόηση μιας υπηρεσίας, παρατήρηση ενός συγκεκριμένου αντικειμένου, ταχεία αντιμετώπιση προβλημάτων. | Ακριβή αναπαραγωγή. Δύο άτομα που κάνουν κλικ «το ίδιο» παίρνουν δύο διαφορετικά αποτελέσματα. Δεν υπάρχει αναγνώσιμο ιστορικό για ποιος άλλαξε τι. Τίποτα να ξαναδιαβάσεις πριν την επικύρωση. |
Ένα script bash ή PowerShell (aws ec2 run-instances …, aws s3api create-bucket …) | Επανάληψη μιας δημιουργίας με τον ίδιο ακριβώς τρόπο, ενσωμάτωση σε ένα pipeline. | Να γνωρίζει τι υπάρχει ήδη. Αν επανεκτελεστεί δεύτερη φορά, προσπαθεί να ξανακατασκευάσει και σταματά σε ένα σφάλμα, ή δημιουργεί διπλότυπο. Δεν συγκρίνει τίποτα, δεν εντοπίζει ότι ένας κανόνας άλλαξε με το χέρι, και δεν ξέρει να καταστρέψει αυτό που δημιούργησε χωρίς ένα δεύτερο, χειρόγραφο script. |
| Ένα runbook (γραπτή διαδικασία, στιγμιότυπα οθόνης) | Μετάδοση μιας πρόθεσης, εκπαίδευση κάποιου, διατήρηση ίχνους της απόφασης. | Απόδειξη ότι η υποδομή εξακολουθεί να ταιριάζει με το κείμενο. Την επόμενη μέρα μιας τροποποίησης στην κονσόλα, το runbook είναι ψεύτικο και κανείς δεν το ξέρει. |
Το Terraform κάνει αυτό που αυτές οι τρεις μέθοδοι δεν κάνουν, και το κάνει με αυτή τη σειρά: διαβάζει το υπάρχον, συγκρίνει με τον κώδικα, ανακοινώνει τι θα αλλάξει, εφαρμόζει μόνο ό,τι λείπει, σημειώνει τι έκανε στο state, και ξέρει να καταστρέφει τα πάντα καθαρά με το terraform destroy. Κάθε έργο του μαθήματος τελειώνει με αυτή την καταστροφή: τίποτα δεν παραμένει ενεργό, τίποτα δεν παραμένει χρεωμένο.
Φανταστείτε ότι μια επιχείρηση πρέπει να ξεκινήσει μια διαδικτυακή εφαρμογή. Ίσως χρειαστεί να δημιουργήσει:
Μπορείς να δημιουργήσεις τα πάντα με το χέρι σε μια κονσόλα AWS, Azure ή Google Cloud. Λειτουργεί για μια πρώτη δοκιμή. Γίνεται εύθραυστο μόλις το περιβάλλον μεγαλώνει.
Ξαναδιάβασε τον πίνακα με τα πραγματικά παραδείγματα: η Decathlon περιγράφει το κόστος της χειροκίνητης μεθόδου (πάνω από μία εβδομάδα, πολλές ομάδες και μια CMDB που έπρεπε να συμπληρωθεί για έναν μόνο διακομιστή), το GitHub απαντά στη δυσκολία 1 (διακομιστές κατασκευασμένοι «με τον ίδιο τρόπο» παντού), το Slack στη δυσκολία 5 (η προσφορά αναθεωρείται στο pull request πριν από κάθε συγχώνευση).
Το Infrastructure as Code, σε συντομογραφία IaC, συνίσταται στην περιγραφή της υποδομής σε αρχεία που αντιμετωπίζονται ως κώδικας. Η HashiCorp ορίζει το Terraform ως ένα εργαλείο IaC που επιτρέπει τον ορισμό πόρων cloud και on-premise σε αναγνώσιμα αρχεία διαμόρφωσης, τα οποία μπορείς να εκδώσεις σε σύστημα ελέγχου εκδόσεων, να επαναχρησιμοποιήσεις και να μοιραστείς. Επίσημη αναφορά — Εισαγωγή στο Terraform
Αντί να γράφεις μια μακροσκελή διαδικασία όπως «κάνε κλικ εδώ, επίλεξε αυτή την περιοχή, δημιούργησε μετά αυτό το δίκτυο», περιγράφεις την επιθυμητή κατάσταση:
resource "aws_s3_bucket" "documents" {
bucket = "entreprise-documents-exemple"
}Αυτό το μπλοκ δεν περιγράφει κάθε κλήση API. Λέει: «αυτό το bucket πρέπει να υπάρχει με αυτή τη διαμόρφωση». Αυτό είναι το σχέδιο του αρχιτέκτονα. Το Terraform καθορίζει στη συνέχεια τις απαραίτητες εργασίες.
Ο ίδιος κώδικας χρησιμεύει για τη δημιουργία ενός περιβάλλοντος ανάπτυξης, δοκιμής ή παραγωγής. Οι τιμές που αλλάζουν τοποθετούνται σε μεταβλητές αντί να αντιγράφονται με το χέρι.
Το terraform plan παρουσιάζει τις προβλεπόμενες δημιουργίες, τροποποιήσεις και καταστροφές: αυτή είναι η προσφορά εργασιών. Η ομάδα αναθεωρεί την πρόθεση πριν το Terraform αγγίξει την υποδομή. Τα σύμβολα καθορίζονται από την επίσημη τεκμηρίωση. Επίσημη αναφορά — terraform plan
+ δημιουργία
~ τροποποίηση επί τόπου
-/+ αντικατάσταση (καταστροφή, μετά ανακατασκευή)
- καταστροφήΠροσοχή: ένα plan μειώνει τον κίνδυνο, δεν εγγυάται την απουσία επίπτωσης. Μια τροποποίηση δικτύου, βάσης δεδομένων ή ταυτότητας παραμένει επικίνδυνη και πρέπει να εξεταστεί γραμμή προς γραμμή.
Τα αρχεία .tf ζουν στο Git. Κάθε αλλαγή συνδέεται με ένα κλάδο, ένα αίτημα συγχώνευσης, μια αναθεώρηση και έναν συγγραφέα. Αυτό κάνει το Slack: η προσφορά δημοσιεύεται στο pull request, και κανείς δεν συγχωνεύει χωρίς να την έχει διαβάσει.
Ένας οργανισμός εγκλείει τους κανόνες του σε επαναχρησιμοποιήσιμα modules: υποχρεωτική κρυπτογράφηση, ετικέτες κόστους, ενεργοποιημένα αρχεία καταγραφής, εγκεκριμένο δίκτυο και ελεγχόμενες εκδόσεις. Τα modules επιτρέπουν την επαναχρησιμοποίηση διαμορφωμένων συλλογών πόρων. Επίσημη αναφορά — Modules Terraform
Το Terraform δεν χρησιμεύει μόνο για τη δημιουργία. Συγκρίνει τη διαμόρφωση, το state και την πραγματική υποδομή για να καθορίσει τι να προσθέσει, να τροποποιήσει ή να αφαιρέσει. Αυτή είναι η κίνηση του αρχιτέκτονα: ξαναδιαβάζει το σχέδιο, ανοίγει την καταγραφή, πηγαίνει να δει το κτίριο.
Το Terraform απαιτεί μια αρχική επένδυση: εκμάθηση του HCL, συγγραφή των modules, ασφάλιση του state και κατασκευή μιας αλυσίδας εγκρίσεων. Αυτή η επένδυση γίνεται αποδοτική μόλις η ομάδα χρειαστεί να επαναλάβει, να ελέγξει ή να εξελίξει την υποδομή.
Παράδειγμα: μια επιχείρηση διαθέτει 30 εφαρμογές και τέσσερα περιβάλλοντα ανά εφαρμογή. Με το χέρι, αυτό σημαίνει 120 περιβάλλοντα προς συντήρηση. Κοινά modules επιτρέπουν την περιγραφή του μοντέλου μία φορά και την παροχή των τιμών που είναι ειδικές για κάθε εφαρμογή.
Το Terraform αυτοματοποιεί μια πρόθεση. Αν ο κώδικας ζητά μια κακή αρχιτεκτονική, το Terraform αναπαράγει αυτή την κακή αρχιτεκτονική πολύ αποτελεσματικά, και παντού. Πρέπει πάντα:
Ο αρχιτέκτονας δεν κατασκευάζει ό,τι θέλει. Κατασκευάζει ό,τι έχει σχεδιαστεί. Αν το σχέδιο είναι κακό, το κτίριο θα είναι κι αυτό κακό.
Διάβασε το διάγραμμα από αριστερά προς τα δεξιά. Το σχέδιο και η καταγραφή μπαίνουν στον αρχιτέκτονα. Πηγαίνει να δει το κτίριο. Παράγει μια προσφορά. Την υπογράφεις. Τα επαγγέλματα εκτελούν, και ο αρχιτέκτονας ενημερώνει την καταγραφή του. Στον επόμενο γύρο, αν τίποτα δεν έχει κινηθεί, η προσφορά είναι άδεια: No changes.
terraform plan είναι χρήσιμο πριν από μια θέση σε παραγωγή;