Συμβάσεις ονοματοδοσίας
Γενικές συμβάσεις
Δεν θα πρέπει να υπάρχει κανένας λόγος να μην ακολουθείτε τουλάχιστον αυτές τις συμβάσεις :)
Προσέξτε ότι οι πραγματικοί πόροι του cloud συχνά έχουν περιορισμούς στα επιτρεπόμενα ονόματα. Ορισμένοι πόροι, για παράδειγμα, δεν μπορούν να περιέχουν παύλες, ενώ ορισμένοι πρέπει να είναι γραμμένοι με κεφαλαία γράμματα. Οι συμβάσεις σε αυτό το βιβλίο αναφέρονται στα ίδια τα ονόματα του Terraform.
Χρησιμοποιήστε
_
(υπογράμμιση) αντί για-
(παύλα) παντού (σε ονόματα πόρων, ονόματα πηγών δεδομένων, ονόματα μεταβλητών, εξόδους κλπ.).Προτιμήστε να χρησιμοποιείτε πεζά γράμματα και αριθμούς (παρόλο που υποστηρίζεται το UTF-8).
Ορίσματα πηγής πόρων και δεδομένων
Μην επαναλαμβάνετε τον τύπο του πόρου στο όνομα του πόρου (ούτε μερικώς ούτε πλήρως):
Το όνομα του πόρου θα πρέπει να ονομάζεται
this
εάν δεν υπάρχει πιο περιγραφικό και γενικό όνομα ή εάν η μονάδα πόρων δημιουργεί έναν μόνο πόρο αυτού του τύπου (π.χ. στη μονάδα AWS VPC υπάρχει ένας μόνο πόρος τύπουaws_nat_gateway
και πολλαπλοί πόροι τύπουaws_route_table
, οπότε τοaws_nat_gateway
θα πρέπει να ονομάζεταιthis
και τοaws_route_table
θα πρέπει να έχει πιο περιγραφικά ονόματα - όπωςprivate
,public
,database
).Χρησιμοποιείτε πάντα ουσιαστικά στον ενικό αριθμό για τα ονόματα.
Χρησιμοποιήστε
-
μέσα σε τιμές ορισμάτων και σε σημεία όπου η τιμή θα είναι εκτεθειμένη σε άνθρωπο (π.χ. μέσα στο όνομα DNS του RDS instance).Συμπεριλάβετε το όρισμα
count
/for_each
μέσα σε μπλοκ πόρων ή πηγής δεδομένων ως το πρώτο όρισμα στην κορυφή και διαχωρίστε το με νέα γραμμή μετά από αυτό.Συμπεριλάβετε το όρισμα
tags
, εάν υποστηρίζεται από τον πόρο, ως το τελευταίο πραγματικό όρισμα, ακολουθούμενο από ταdepends_on
καιlifecycle
, εάν είναι απαραίτητο. Όλα αυτά θα πρέπει να διαχωρίζονται με μία κενή γραμμή.Όταν χρησιμοποιείτε συνθήκες/conditions σε ένα argument
count
/for_each
προτιμήστε boolean τιμές αντί να χρησιμοποιείτεlength
ή άλλες εκφράσεις.
Παραδείγματα κώδικα πόρου
πόρου
Χρήση του count
/ for_each
count
/ for_each
Τοποθέτηση ετικετών
/tags
ετικετών
/tags
Συνθήκες σε count
count
Μεταβλητές
Μην ανακαλύπτετε ξανά τον τροχό στις μονάδες πόρων: χρησιμοποιήστε το
όνομα
/name
, τηνπεριγραφή
/description
και τηνπροεπιλεγμένη
/default
τιμή για τις μεταβλητές όπως ορίζονται στην ενότητα «Αναφορά ορίσματος» για τον πόρο με τον οποίο εργάζεστε.Η υποστήριξη για επικύρωση σε μεταβλητές είναι μάλλον περιορισμένη (π.χ. δεν μπορεί να έχει πρόσβαση σε άλλες μεταβλητές ή να κάνει αναζητήσεις). Προγραμματίστε αναλόγως, διότι σε πολλές περιπτώσεις αυτή η λειτουργία είναι άχρηστη.
Χρησιμοποιήστε τον πληθυντικό αριθμό στο όνομα μιας μεταβλητής όταν ο τύπος είναι
list(...)
ήmap(...)
.Ταξινομήστε τα κλειδιά σε ένα μπλοκ μεταβλητών ως εξής:
περιγραφή
/description
,τύπος
/type
,προεπιλογή
/default
,επικύρωση
/validation
.Περιλαμβάνετε πάντα
περιγραφή
/description
σε όλες τις μεταβλητές ακόμα και αν νομίζετε ότι είναι προφανές (θα σας χρειαστεί στο μέλλον).Προτιμήστε τη χρήση απλών τύπων (
number
,string
,list(...)
,map(...)
,any
) έναντι ειδικών τύπων όπωςobject()
εκτός αν χρειάζεται να έχετε αυστηρούς περιορισμούς σε κάθε κλειδί.Χρησιμοποιήστε συγκεκριμένους τύπους όπως
map(map(string))
αν όλα τα στοιχεία του map έχουν τον ίδιο τύπο (π.χ.string
) ή μπορούν να μετατραπούν σε αυτόν (π.χ. ο τύποςnumber
μπορεί να μετατραπεί σεstring
).Χρησιμοποιήστε τύπο
any
για να απενεργοποιήσετε την επικύρωση τύπου ξεκινώντας από ένα συγκεκριμένο βάθος ή όταν πρέπει να υποστηρίζονται πολλαπλοί τύποι.Η τιμή
{}
είναι μερικές φορές ένα map αλλά μερικές φορές ένα αντικείμενο. Χρησιμοποιήστε τοtomap(....)
για να φτιάξετε ένα map επειδή δεν υπάρχει τρόπος να φτιάξετε ένα αντικείμενο.
Outputs
Κάντε τα outputs συνεπή και κατανοητά εκτός του πεδίου εφαρμογής της (όταν ένας χρήστης χρησιμοποιεί μια μονάδα θα πρέπει να είναι προφανές τι τύπο και τι ιδιότητα έχει η τιμή που επιστρέφει).
Το όνομα του output θα πρέπει να περιγράφει την ιδιότητα που περιέχει και να είναι λιγότερο «ελεύθερο» από ό,τι θα θέλατε κανονικά.
Μια καλή δομή για το όνομα του output μοιάζει με
{name}_{type}_{attribute}
, όπου:{name}
είναι ένα όνομα πόρου ή πηγής δεδομένων χωρίς πρόθεμα παρόχου. Το{name}
για τοaws_subnet
είναι τοsubnet
, για τοaws_vpc
είναι τοvpc
.{type}
είναι ο τύπος μιας πηγής πόρων.{attribute}
είναι ένα χαρακτηριστικό που επιστρέφεται από το output
Εάν το output επιστρέφει μια τιμή με συναρτήσεις παρεμβολής/interpolation functions και πολλαπλούς πόρους, τα
{name}
και{type}
εκεί θα πρέπει να είναι όσο το δυνατόν πιο γενικά (τοthis
ως πρόθεμα θα πρέπει να παραλείπεται). Δείτε παράδειγμα.Αν η επιστρεφόμενη τιμή είναι μια λίστα θα πρέπει να έχει όνομα στον πληθυντικό. Δείτε παράδειγμα.
Πάντα να περιλαμβάνετε
περιγραφή
/description
για όλα τα outputs ακόμα και αν νομίζετε ότι είναι προφανής.Αποφύγετε να ορίσετε
ευαίσθητο
/sensitive
όρισμα εκτός αν ελέγχετε πλήρως τη χρήση αυτού του output σε όλα τα σημεία σε όλες τις μονάδες.Προτιμήστε την
try()
(διαθέσιμη από το Terraform 0.13) έναντι τηςelement(concat(...))
(παλαιότερη προσέγγιση για την έκδοση πριν την 0.13)
Παραδείγματα κώδικαoutput
output
Επιστρέψτε το πολύ ένα ID τoυ security group
Όταν υπάρχουν πολλαπλοί πόροι του ίδιου τύπου, το this
θα πρέπει να παραλείπεται στο όνομα τoυ output:
Χρησιμοποιήστε όνομα πληθυντικού αν η τιμή που επιστρέφει είναι λίστα
Last updated