Convenzioni sui nomi
Convenzioni generali
Non ci dovrebbero essere ragioni per non seguire queste convenzioni :)
Presta attenzione che le risorse cloud hanno spesso restrizioni sui nomi consentiti. Alcune risorse, per esempio, non possono contenere il trattino "-", alcune devono essere camel-cased. Le convenzioni nel libro si riferiscono ai nomi Terraform.
Usa
_
(trattino basso) invece del-
(trattino) ovunque (nomi sul tipo resourse, nomi sul tipo data, nomi di variabili, outputs, ecc).Preferisci l'uso di lettere minuscole e numero (perfino dove é supportato UTF-8).
Argomenti di resource and data source
Non ripetere il tipo di risorsa nel nome della risorsa (ne parzialmente ne interamente):
resource "aws_route_table" "public" {}
resource "aws_route_table" "public_route_table" {}
resource "aws_route_table" "public_aws_route_table" {}
Il nome delle risorse dovrebbe essere chiamato
this
se non c'è disponibile un nome più descrittivo e generale, o se il modulo di risorsa crea una singola risorsa di questo tipo (per esempio, in AWS VPC module c'è una singola risorsa di tipoaws_nat_gateway
e risorse multiple di tipoaws_route_table
, quindiaws_nat_gateway
dovrebbe essere chiamatothis
eaws_route_table
dovrebbe avere un nomi più descrittivi come per esempioprivate
,public
,database
).Usare sempre nomi al singolare.
Usa
-
(il trattino )dentro i valori degli argomenti interni e in posti dove i valori sono esposti agli essere umani (per esempio, dentro i nomi DNS o le istanze RDS).Includi l'argomento
count
/for_each
dentro la risorsa o il blocco di data source come primo argomento in cima separalo da una nuova linea dopo di lui.Includi argomenti di tipo
tags,
se supportati dalla risorsa, come ultimo argomento, seguito daldepends_on
elifecycle
, se necessario. Tutti questi dovrebbero essere separati da una singola linea vuota.Quando si usano le condizioni in un argomento
count
/for_each
preferisci valori boleani invece di usarelength
o un'altra espressione.
Esempi di codice di resource
resource
Uso di count
/ for_each
count
/ for_each
Posizionamento di tags
tags
Condizioni in count
count
Variabili
Non reinventare la ruota in moduli risorsa: usa
name
,description
, e il valore didefault
per le variabili come sono definitie nella sezione "Argument Reference" per le risorse con cui stai lavorando.Il supporto per la validazione nelle variabili è piuttosto limitato (per esempio non è possibile accedere a altre variabili o fare lookups). Bisogna tenerne conto perchè in molti casi questa feature è inutile.
Usare la forma plurale nel nome delle variabili quando il tipo è
list(...)
omap(...)
.Ordina le chiavi in un blocco per le variabil in questo modo:
description
,type
,default
,validation
.Includere sempre la descrizione
description
su tutte le variabili perfino se pensi che è ovvio (potresti averne bisogno in futuro).Usa se è possibile tipi semplici (
number
,string
,list(...)
,map(...)
,any
) invece di tipi specifici comeobject()
a meno che hai bisogno di fare costrizioni specifiche su ogni chiave.Usa tipi specifici come
map(map(string))
se tutti gli elementi della mappa hanno lo stesso tipo (per esempiostring
) o possono essere convertiti (per esempio il tiponumber
può essere convertito in unastring
).Usa il tipo
any
, la validazione sul tipo iniziando da una certa profondità o quando tipo multipli dovrebbero essere supportati.Value
{}
alcune volte è una map ma altre volte un object. Usatomap(...)
per creare una map in questo modo sei sicuro di non fare un oggetto.
Outputs
Fai in modo che gli outputs siano consistenti e comprensibilit fuori dal loro raggio d'azione (quando un utente sta usando un modulo dovrebbe essere ovvio cosa un tipo o il valore di un attributo restituiscono).
Il nome di un output dovrebbe descrivere la proprietà che contiene ed essere meno libero della forma che normalmente vorresti.
Una buona struttura per il nome di un output apparirà in questa maniera
{name}_{type}_{attribute}
, dove:{name}
è una risorsa o un data source senza il prefisso del provider.{name}
peraws_subnet
èsubnet
, peraws_vpc
èvpc
.{type}
è un tipo di una risorsa sorgente{attribute}
è un attributo restituito da un output
Se l'output sta restituendo un valore con funzioni di interpolazione e risorse multiple,
{name}
e{type}
dovrebbero essere quanto più generici possibile (this
è un prefisso e dovrebbe essere omesso). Vedi gli esempi.Se il valore restituito è una lista dovrebbe avere un nome plurale. Vedi gli esempi.
Includere sempre la descrizione
description
per tutti gli output anche se pensi che sia ovvio.Evita di settare argomenti
sensitive
a meno che hai il controllo totale su tutti gli output in tutti i punti dei moduli.Preferisci l'uso di
try()
(disponibile da Terraform 0.13) invece dielement(concat(...))
(approccio legacy per le versioni prima della 0.13)
Esempi di codice di output
output
Restituire al massimo un security group ID:
Quando abbiamo risorse multiple dello stesso tipo, this
dovrebbe essere omesso nel nome dell'output:
Usare un nome pluralre se il valore restituito e' una lista
Last updated