Γιατί χρειαζόμαστε το Terraform;

14 λεπτά
Κοινό
αρχάριος, καμία προαπαιτούμενη γνώση
Διάρκεια
20 έως 30 λεπτά
Ενότητα
1/7
Στόχος
να εξηγήσεις τι κάνει το Terraform που μια κονσόλα, ένα script ή μια διαδικασία δεν κάνουν, και να χρησιμοποιείς τη σωστή λέξη (επιθυμητή κατάσταση, state, provider, απόκλιση) για να το πεις

Ποιος το χρησιμοποιεί, και για ποιο σκοπό

Όταν ανοίγεις το 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

Σε μια εικόνα

Φανταστείτε έναν αρχιτέκτονα υπεύθυνο για ένα κτίριο. Έχει τρία πράγματα στη διάθεσή του.

  • Το σχέδιο: τα υπογεγραμμένα σχέδια που λένε τι πρέπει να είναι το κτίριο. Στο Terraform, αυτά είναι τα αρχεία σου .tf.
  • Το πραγματικό κτίριο: αυτό που έχει κατασκευαστεί, με τα ελαττώματά του, τους τοίχους που μετακίνησε ένας υπερβολικά ζηλωτής εργάτης, την πόρτα που προστέθηκε χωρίς ειδοποίηση. Στο Terraform, αυτό είναι ο λογαριασμός σου AWS, ο οργανισμός σου στο GitHub, ο σκληρός δίσκος σου.
  • Η καταγραφή: το τετράδιο όπου ο αρχιτέκτονας έχει σημειώσει, δωμάτιο προς δωμάτιο, τι έχει κατασκευάσει και με ποιον αριθμό. Στο Terraform, αυτό είναι το state.

Κάθε φορά που του ζητείται να επέμβει, ο αρχιτέκτονας κάνει το ίδιο πράγμα. Ξαναδιαβάζει το σχέδιο. Ανοίγει την καταγραφή του. Πηγαίνει να δει το κτίριο. Στη συνέχεια συγκρίνει τα τρία και γράφει μια προσφορά εργασιών: αυτός ο τοίχος λείπει, πρέπει να κατασκευαστεί· αυτή η πόρτα δεν είναι στο σχέδιο, πρέπει να αφαιρεθεί· αυτό το παράθυρο είναι στη σωστή θέση, δεν το αγγίζουμε. Η προσφορά υπογράφεται από τον πελάτη, και μόνο τότε τα επαγγέλματα (οι providers) εκτελούν κάθε γραμμή. Τίποτα περισσότερο, τίποτα λιγότερο από την προσφορά.

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

Η ουσιαστική διαφορά ανάμεσα στο «σχέδιο» και το terraform plan. Στην εικόνα, το σχέδιο είναι το σχέδιο του αρχιτέκτονα, δηλαδή ο κώδικάς σου. Η εντολή terraform plan, από την άλλη, παράγει την προσφορά εργασιών: τη λίστα με όσα θα αλλάξουν ώστε το κτίριο να συμβαδίσει με το σχέδιο. Δύο σημασίες για την ίδια λέξη. Στο μάθημα, γράφουμε «το σχέδιο (ο κώδικας)» ή «η προσφορά (η έκδοση του terraform plan)» όταν υπάρχει κίνδυνος σύγχυσης.

Τι δεν κάνουν μια κονσόλα, ένα script και ένα runbook

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

Το πρόβλημα πριν το Terraform

Φανταστείτε ότι μια επιχείρηση πρέπει να ξεκινήσει μια διαδικτυακή εφαρμογή. Ίσως χρειαστεί να δημιουργήσει:

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

Μπορείς να δημιουργήσεις τα πάντα με το χέρι σε μια κονσόλα AWS, Azure ή Google Cloud. Λειτουργεί για μια πρώτη δοκιμή. Γίνεται εύθραυστο μόλις το περιβάλλον μεγαλώνει.

Οι έξι δυσκολίες της χειροκίνητης μεθόδου

  1. Οι ενέργειες είναι δύσκολο να αναπαραχθούν. Δύο άτομα ακολουθούν τις ίδιες οδηγίες και καταλήγουν σε διαφορετικά περιβάλλοντα.
  2. Η πραγματική διαμόρφωση είναι κακώς τεκμηριωμένη. Ένα στιγμιότυπο οθόνης ή μια γραπτή διαδικασία δεν αποδεικνύει ότι η υποδομή εξακολουθεί να ταιριάζει με την περιγραφή.
  3. Τα ανθρώπινα λάθη πολλαπλασιάζονται. Μια λάθος θύρα, μια λάθος περιοχή ή ένα υπερβολικά ευρύ δικαίωμα δημιουργεί βλάβη ή ρωγμή ασφάλειας.
  4. Τα περιβάλλοντα αποκλίνουν. Η ανάπτυξη λειτουργεί, αλλά η παραγωγή έχει διαφορετικό κανόνα δικτύου ή διαφορετική έκδοση.
  5. Οι αλλαγές είναι δύσκολο να αναθεωρηθούν. Σε μια γραφική διεπαφή, δεν υπάρχει πάντα σαφές ιστορικό για ποιος άλλαξε τι, και γιατί.
  6. Η ανακατασκευή απαιτεί χρόνο. Μετά από μια σημαντική βλάβη, η ομάδα πρέπει να θυμηθεί εκατοντάδες χειροκίνητες ενέργειες.

Ξαναδιάβασε τον πίνακα με τα πραγματικά παραδείγματα: η Decathlon περιγράφει το κόστος της χειροκίνητης μεθόδου (πάνω από μία εβδομάδα, πολλές ομάδες και μια CMDB που έπρεπε να συμπληρωθεί για έναν μόνο διακομιστή), το GitHub απαντά στη δυσκολία 1 (διακομιστές κατασκευασμένοι «με τον ίδιο τρόπο» παντού), το Slack στη δυσκολία 5 (η προσφορά αναθεωρείται στο pull request πριν από κάθε συγχώνευση).

Το Infrastructure as Code

Το Infrastructure as Code, σε συντομογραφία IaC, συνίσταται στην περιγραφή της υποδομής σε αρχεία που αντιμετωπίζονται ως κώδικας. Η HashiCorp ορίζει το Terraform ως ένα εργαλείο IaC που επιτρέπει τον ορισμό πόρων cloud και on-premise σε αναγνώσιμα αρχεία διαμόρφωσης, τα οποία μπορείς να εκδώσεις σε σύστημα ελέγχου εκδόσεων, να επαναχρησιμοποιήσεις και να μοιραστείς. Επίσημη αναφορά — Εισαγωγή στο Terraform

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

hcl
resource "aws_s3_bucket" "documents" {
  bucket = "entreprise-documents-exemple"
}

Αυτό το μπλοκ δεν περιγράφει κάθε κλήση API. Λέει: «αυτό το bucket πρέπει να υπάρχει με αυτή τη διαμόρφωση». Αυτό είναι το σχέδιο του αρχιτέκτονα. Το Terraform καθορίζει στη συνέχεια τις απαραίτητες εργασίες.

Τι προσφέρει το Terraform

1. Η επαναληψιμότητα

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

2. Η ορατότητα πριν από την αλλαγή

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

text
+   δημιουργία
~   τροποποίηση επί τόπου
-/+ αντικατάσταση (καταστροφή, μετά ανακατασκευή)
-   καταστροφή

Προσοχή: ένα plan μειώνει τον κίνδυνο, δεν εγγυάται την απουσία επίπτωσης. Μια τροποποίηση δικτύου, βάσης δεδομένων ή ταυτότητας παραμένει επικίνδυνη και πρέπει να εξεταστεί γραμμή προς γραμμή.

3. Ένα ιστορικό στο Git

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

4. Η τυποποίηση

Ένας οργανισμός εγκλείει τους κανόνες του σε επαναχρησιμοποιήσιμα modules: υποχρεωτική κρυπτογράφηση, ετικέτες κόστους, ενεργοποιημένα αρχεία καταγραφής, εγκεκριμένο δίκτυο και ελεγχόμενες εκδόσεις. Τα modules επιτρέπουν την επαναχρησιμοποίηση διαμορφωμένων συλλογών πόρων. Επίσημη αναφορά — Modules Terraform

5. Η αυτοματοποίηση του κύκλου ζωής

Το Terraform δεν χρησιμεύει μόνο για τη δημιουργία. Συγκρίνει τη διαμόρφωση, το state και την πραγματική υποδομή για να καθορίσει τι να προσθέσει, να τροποποιήσει ή να αφαιρέσει. Αυτή είναι η κίνηση του αρχιτέκτονα: ξαναδιαβάζει το σχέδιο, ανοίγει την καταγραφή, πηγαίνει να δει το κτίριο.

Γιατί μια επιχείρηση πληρώνει για να αυτοματοποιήσει

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

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

Το Terraform δεν αντικαθιστά την ανθρώπινη κρίση

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

  • να κατανοείς το plan·
  • να περιορίζεις τα δικαιώματα·
  • να προστατεύεις τα μυστικά και το state·
  • να δοκιμάζεις τις αλλαγές·
  • να προβλέπεις την επαναφορά και την αποκατάσταση·
  • να παρακολουθείς το κόστος και τη διαθεσιμότητα.

Ο αρχιτέκτονας δεν κατασκευάζει ό,τι θέλει. Κατασκευάζει ό,τι έχει σχεδιαστεί. Αν το σχέδιο είναι κακό, το κτίριο θα είναι κι αυτό κακό.

Ο κύκλος σε μια εικόνα: σχέδιο, καταγραφή, κτίριο

Διάβασε το διάγραμμα από αριστερά προς τα δεξιά. Το σχέδιο και η καταγραφή μπαίνουν στον αρχιτέκτονα. Πηγαίνει να δει το κτίριο. Παράγει μια προσφορά. Την υπογράφεις. Τα επαγγέλματα εκτελούν, και ο αρχιτέκτονας ενημερώνει την καταγραφή του. Στον επόμενο γύρο, αν τίποτα δεν έχει κινηθεί, η προσφορά είναι άδεια: No changes.

Η ουσία

  1. Το Terraform είναι ο αρχιτέκτονας που συγκρίνει το σχέδιο (τον κώδικά σου), την καταγραφή (το state) και το κτίριο (το cloud), και στη συνέχεια εκτελεί μόνο τις εργασίες που λείπουν.
  2. Ο κώδικας είναι δηλωτικός: περιγράφεις το αποτέλεσμα, όχι τα βήματα· αν επανεκτελεστεί χωρίς αλλαγή, το Terraform δεν αγγίζει τίποτα, αυτή είναι η ιδεμποτεντικότητα.
  3. Το state είναι η μνήμη του Terraform: χωρίς αυτό, δεν αναγνωρίζει τι έχει κατασκευάσει· είναι ευαίσθητο και πρέπει να προστατεύεται.
  4. Η κονσόλα εξερευνά, το script δημιουργεί, το runbook αφηγείται· μόνο το Terraform διαβάζει το υπάρχον, εντοπίζει την απόκλιση, ανακοινώνει την αλλαγή πριν την κάνει και ξέρει να καταστρέφει τα πάντα.
  5. Το Terraform αυτοματοποιεί μια πρόθεση, δεν την κρίνει: ένα plan διαβάζεται γραμμή προς γραμμή, ακόμη και όταν η αλλαγή κώδικα φαίνεται μικρή.

Ερωτήσεις κατανόησης

  1. Γιατί μια διαδικασία με στιγμιότυπα οθόνης δεν αποτελεί επαρκή πηγή αλήθειας;
  2. Ποια είναι η διαφορά ανάμεσα στην περιγραφή ενός αποτελέσματος και στη συγγραφή όλων των βημάτων για να το επιτύχεις;
  3. Γιατί το terraform plan είναι χρήσιμο πριν από μια θέση σε παραγωγή;
  4. Σε ποια περίπτωση η αρχική επένδυση του IaC θα ήταν λίγο αποδοτική;
  5. Στην εικόνα του αρχιτέκτονα, τι αντιπροσωπεύουν το σχέδιο, η καταγραφή και το κτίριο; Και η προσφορά;
  6. Κάποιος προσθέτει έναν κανόνα τείχους προστασίας στην κονσόλα, χωρίς να περάσει από τον κώδικα. Πώς λέγεται αυτή η απόκλιση, και σε ποια στιγμή το Terraform την προσέχει;