Links

Βασικές έννοιες

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

Πόρος

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

Μονάδα (module) πόρων

Η μονάδα πόρων είναι μια συλλογή συνδεδεμένων πόρων οι οποίοι εκτελούν από κοινού την κοινή ενέργεια (π.χ. η μονάδα AWS VPC Terraform δημιουργεί VPC, subnets, NAT gateway κλπ.). Εξαρτάται από τη διαμόρφωση του παρόχου, η οποία μπορεί να οριστεί σε αυτήν ή σε δομές υψηλότερου επιπέδου (π.χ. στη μονάδα υποδομής).

Μονάδα υποδομής

Μια μονάδα υποδομής είναι μια συλλογή από μονάδες πόρων, οι οποίες μπορεί να μην συνδέονται λογικά, αλλά στην τρέχουσα κατάσταση/έργο/ρύθμιση εξυπηρετούν τον ίδιο σκοπό. Καθορίζει τη διαμόρφωση για τους παρόχους, η οποία μεταβιβάζεται στις μεταγενέστερες μονάδες πόρων και στους πόρους. Συνήθως περιορίζεται να δουλεύει σε μία οντότητα ανά λογικό διαχωριστή (π.χ. AWS Region, Google Project).
Για παράδειγμα, η μονάδα terraform-aws-atlantis χρησιμοποιεί μονάδες πόρων όπως οι terraform-aws-vpc και terraform-aws-security-group για τη διαχείριση της υποδομής που απαιτείται για τη εκτέλεση Atlantis σε AWS Fargate.
Ένα άλλο παράδειγμα είναι η μονάδα terraform-aws-cloudquery όπου πολλαπλές μονάδες terraform-aws-modules χρησιμοποιούνται μαζί για τη διαχείριση της υποδομής καθώς και η χρήση πόρων Docker για τη δημιουργία, την προώθηση και την ανάπτυξη Docker images. Όλα σε ένα σύνολο.

Σύνθεση

Η σύνθεση είναι μια συλλογή μονάδων υποδομής, η οποία μπορεί να εκτείνεται σε διάφορες λογικά διαχωρισμένες περιοχές (π.χ. AWS regions, αρκετοί λογαριασμοί AWS). Η σύνθεση χρησιμοποιείται για να περιγράψει την πλήρη υποδομή που απαιτείται για ολόκληρο τον οργανισμό ή το έργο.
Μια σύνθεση αποτελείται από μονάδες υποδομής, οι οποίες αποτελούνται από μονάδες πόρων, οι οποίες υλοποιούν μεμονωμένους πόρους.
Απλή σύνθεση υποδομής

Πηγή δεδομένων

Η πηγή δεδομένων εκτελεί μια λειτουργία μόνο για ανάγνωση και εξαρτάται από τη διαμόρφωση του παρόχου, χρησιμοποιείται σε μια μονάδα πόρων και μια μονάδα υποδομής.
Η πηγή δεδομένων terraform_remote_state λειτουργεί ως «συγκολλητική ουσία» για μονάδες και συνθέσεις υψηλότερου επιπέδου.
Η εξωτερική πηγή δεδομένων επιτρέπει σε ένα εξωτερικό πρόγραμμα να ενεργεί ως πηγή δεδομένων, εκθέτοντας αυθαίρετα δεδομένα για χρήση αλλού στην διαμόρφωση του Terraform. Ακολουθεί ένα παράδειγμα από τη μονάδα terraform-aws-lambda όπου το όνομα αρχείου υπολογίζεται με την κλήση ενός εξωτερικού Python script.
Η πηγή δεδομένων http πραγματοποιεί μια κλήση HTTP GET στη δεδομένη διεύθυνση URL και εξάγει πληροφορίες σχετικά με την απόκριση, η οποία είναι συχνά χρήσιμη για τη λήψη πληροφοριών από endpoints όπου δεν υπάρχει εγγενής πάροχος Terraform.

Απομακρυσμένη κατάσταση

Οι μονάδες υποδομής και οι συνθέσεις θα πρέπει να διατηρούν την Terraform κατάστασή τους σε μια απομακρυσμένη τοποθεσία όπου μπορεί να ανακτηθεί από άλλους με ελεγχόμενο τρόπο (π.χ. προσδιορισμός ACL, versioning, logging).

Πάροχος, παροχέας, κλπ.

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

Γιατί είναι τόσο δύσκολο;

Ενώ οι μεμονωμένοι πόροι μοιάζουν με άτομα σε επίπεδο υποδομής, οι μονάδες πόρων μοιάζουν με μόρια (που αποτελούνται από άτομα). Μια μονάδα είναι η μικρότερη εκδοχή οντότητας που μπορεί να διαμοιραστεί. Έχει έναν ακριβή κατάλογο ορισμάτων, υλοποιεί τη βασική λογική μιας τέτοιας μονάδας για να κάνει την απαιτούμενη λειτουργία. π.χ., η μονάδα terraform-aws-security-group δημιουργεί τους πόρους aws_security_group και aws_security_group_rule με βάση τo input. Αυτή η μονάδα πόρων από μόνη της μπορεί να χρησιμοποιηθεί μαζί με άλλες μονάδες για τη δημιουργία της μονάδας υποδομής.
Η πρόσβαση σε δεδομένα μεταξύ των μορίων (μονάδες πόρων και μονάδες υποδομής) πραγματοποιείται χρησιμοποιώντας τα output και τις πηγές δεδομένων των μονάδων.
Η πρόσβαση μεταξύ συνθέσεων πραγματοποιείται συχνά με τη χρήση απομακρυσμένων πηγών δεδομένων κατάστασης. Υπάρχουν πολλοί τρόποι διαμοιρασμού δεδομένων μεταξύ συνθέσεων.
Όταν τοποθετούμε τις έννοιες που περιγράφονται παραπάνω σε ψευδοσχέσεις μπορεί να μοιάζει ως εξής:
composition-1 {
infrastructure-module-1 {
data-source-1 => d1
resource-module-1 {
data-source-2 => d2
resource-1 (d1, d2)
resource-2 (d2)
}
resource-module-2 {
data-source-3 => d3
resource-3 (d1, d3)
resource-4 (d3)
}
}
}