Terraform Best Practices
Terraform consultingTwitter @antonbabenkoTerraform Weekly
ελληνικά (Greek)
ελληνικά (Greek)
  • Καλώς ήρθατε
  • Βασικές έννοιες
  • Δομή κώδικα
  • Παραδείγματα δομής κώδικα
    • Terragrunt
    • Terraform
      • Υποδομή μικρού μεγέθους με Terraform
      • Υποδομή μεσαίου μεγέθους με Terraform
      • Υποδομή μεγάλου μεγέθους με Terraform
  • Συμβάσεις ονοματοδοσίας
  • Διαμόρφωση κώδικα
  • Συχνές ερωτήσεις
  • Αναφορές
  • Γράφοντας ρυθμίσεις για την Τerraform
  • Εργαστήριο
Powered by GitBook
On this page
  • Πόρος
  • Μονάδα (module) πόρων
  • Μονάδα υποδομής
  • Σύνθεση
  • Πηγή δεδομένων
  • Απομακρυσμένη κατάσταση
  • Πάροχος, παροχέας, κλπ.
  • Γιατί είναι τόσο δύσκολο;
Export as PDF

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

PreviousΚαλώς ήρθατεNextΔομή κώδικα

Last updated 2 years ago

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

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

Πόρος

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

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

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

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

Μια μονάδα υποδομής είναι μια συλλογή από μονάδες πόρων, οι οποίες μπορεί να μην συνδέονται λογικά, αλλά στην τρέχουσα κατάσταση/έργο/ρύθμιση εξυπηρετούν τον ίδιο σκοπό. Καθορίζει τη διαμόρφωση για τους παρόχους, η οποία μεταβιβάζεται στις μεταγενέστερες μονάδες πόρων και στους πόρους. Συνήθως περιορίζεται να δουλεύει σε μία οντότητα ανά λογικό διαχωριστή (π.χ. AWS Region, Google Project).

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

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

Σύνθεση

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

Μια σύνθεση αποτελείται από μονάδες υποδομής, οι οποίες αποτελούνται από μονάδες πόρων, οι οποίες υλοποιούν μεμονωμένους πόρους.

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

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

Η πηγή δεδομένων terraform_remote_state λειτουργεί ως «συγκολλητική ουσία» για μονάδες και συνθέσεις υψηλότερου επιπέδου.

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

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

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

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

Η πρόσβαση σε δεδομένα μεταξύ των μορίων (μονάδες πόρων και μονάδες υποδομής) πραγματοποιείται χρησιμοποιώντας τα 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)
    }
  }
}

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

Η πηγή δεδομένων πραγματοποιεί μια κλήση HTTP GET στη δεδομένη διεύθυνση URL και εξάγει πληροφορίες σχετικά με την απόκριση, η οποία είναι συχνά χρήσιμη για τη λήψη πληροφοριών από endpoints όπου δεν υπάρχει εγγενής πάροχος Terraform.

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

Ενώ οι μεμονωμένοι πόροι μοιάζουν με άτομα σε επίπεδο υποδομής, οι μονάδες πόρων μοιάζουν με μόρια (που αποτελούνται από άτομα). Μια μονάδα είναι η μικρότερη εκδοχή οντότητας που μπορεί να διαμοιραστεί. Έχει έναν ακριβή κατάλογο ορισμάτων, υλοποιεί τη βασική λογική μιας τέτοιας μονάδας για να κάνει την απαιτούμενη λειτουργία. π.χ., η μονάδα δημιουργεί τους πόρους aws_security_group και aws_security_group_rule με βάση τo input. Αυτή η μονάδα πόρων από μόνη της μπορεί να χρησιμοποιηθεί μαζί με άλλες μονάδες για τη δημιουργία της μονάδας υποδομής.

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

όλες τις πτυχές της διαμόρφωσης με λεπτομέρειες
μονάδα AWS VPC Terraform
terraform-aws-atlantis
terraform-aws-vpc
terraform-aws-security-group
Atlantis
AWS Fargate
terraform-aws-cloudquery
terraform-aws-modules
εξωτερική
terraform-aws-lambda
http
Terraform κατάστασή τους
terraform-aws-security-group
πολλοί τρόποι διαμοιρασμού δεδομένων μεταξύ συνθέσεων
Απλή σύνθεση υποδομής