Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Procedure consigliate per la struttura e l'organizzazione della base di codice
La struttura e l'organizzazione corrette della base di codice sono fondamentali poiché l'utilizzo di Terraform cresce tra team e aziende di grandi dimensioni. Una base di codice ben architettata consente la collaborazione su larga scala migliorando al contempo la manutenibilità.
Questa sezione fornisce consigli sulla modularità di Terraform, sulle convenzioni di denominazione, sulla documentazione e sugli standard di codifica che supportano qualità e coerenza.
Le linee guida includono la suddivisione della configurazione in moduli riutilizzabili per ambiente e componenti, la definizione di convenzioni di denominazione utilizzando prefissi e suffissi, la documentazione dei moduli e la spiegazione chiara di input e output e l'applicazione di regole di formattazione coerenti utilizzando controlli di stile automatici.
Le migliori pratiche aggiuntive riguardano l'organizzazione logica di moduli e risorse in una gerarchia strutturata, la catalogazione di moduli pubblici e privati nella documentazione e l'astrazione dei dettagli di implementazione non necessari nei moduli per semplificarne l'utilizzo.
Implementando le linee guida sulla struttura del codice base relative a modularità, documentazione, standard e organizzazione logica, puoi supportare un'ampia collaborazione tra i team mantenendo Terraform gestibile man mano che l'utilizzo si diffonde all'interno dell'organizzazione. Applicando convenzioni e standard, è possibile evitare la complessità di una base di codice frammentata.
Le migliori pratiche:
Implementa una struttura di repository standard
Si consiglia di implementare il seguente layout di repository. La standardizzazione su queste pratiche di coerenza tra i moduli migliora la reperibilità, la trasparenza, l'organizzazione e l'affidabilità, consentendo al contempo il riutilizzo in molte configurazioni Terraform.
-
Modulo o directory principale: questo dovrebbe essere il punto di ingresso principale sia per i moduli root
che per quelli riutilizzabili di Terraform e dovrebbe essere unico. Se disponi di un'architettura più complessa, puoi utilizzare moduli annidati per creare astrazioni leggere. Questo aiuta a descrivere l'infrastruttura in termini di architettura anziché direttamente, in termini di oggetti fisici. -
README: il modulo root e tutti i moduli annidati devono avere file README. Questo file deve avere un nome.
README.md
Dovrebbe contenere una descrizione del modulo e per cosa dovrebbe essere usato. Se vuoi includere un esempio di utilizzo di questo modulo con altre risorse, inseriscilo in unaexamples
directory. Prendi in considerazione l'inclusione di un diagramma che illustri le risorse infrastrutturali che il modulo potrebbe creare e le relative relazioni. Usa terraform-docsper generare automaticamente input o output del modulo. -
main.tf: questo è il punto di ingresso principale. Per un modulo semplice, tutte le risorse potrebbero essere create in questo file. Per un modulo complesso, la creazione di risorse potrebbe essere distribuita su più file, ma tutte le chiamate di modulo annidate dovrebbero trovarsi nel
main.tf
file. -
variables.tf e outputs.tf: questi file contengono le dichiarazioni per le variabili e gli output. Tutte le variabili e gli output devono avere descrizioni di una o due frasi che ne spieghino lo scopo. Queste descrizioni vengono utilizzate a scopo di documentazione. Per ulteriori informazioni, consulta la HashiCorp documentazione per la configurazione delle variabili e la configurazione
dell'output . -
Tutte le variabili devono avere un tipo definito.
-
La dichiarazione della variabile può includere anche un argomento predefinito. Se la dichiarazione include un argomento predefinito, la variabile è considerata facoltativa e il valore predefinito viene utilizzato se non si imposta un valore quando si chiama il modulo o si esegue Terraform. L'argomento predefinito richiede un valore letterale e non può fare riferimento ad altri oggetti nella configurazione. Per rendere obbligatoria una variabile, omettete un valore predefinito nella dichiarazione della variabile e valutate se l'impostazione
nullable = false
ha senso. -
Per le variabili che hanno valori indipendenti dall'ambiente (ad esempio
disk_size
), fornite valori predefiniti. -
Per le variabili che hanno valori specifici dell'ambiente (come
project_id
), non fornite valori predefiniti. In questo caso, il modulo chiamante deve fornire valori significativi. -
Utilizzare valori predefiniti vuoti per variabili come stringhe o elenchi vuoti solo quando lasciare la variabile vuota è una preferenza valida che le API sottostanti non rifiutano.
-
Sii prudente nell'uso delle variabili. Parametrizzate i valori solo se devono variare per ogni istanza o ambiente. Quando decidete se esporre una variabile, assicuratevi di avere un caso d'uso concreto per modificare quella variabile. Se c'è solo una piccola possibilità che una variabile possa essere necessaria, non esporla.
-
L'aggiunta di una variabile con un valore predefinito è retrocompatibile.
-
La rimozione di una variabile è incompatibile con le versioni precedenti.
-
Nei casi in cui un valore letterale viene riutilizzato in più posizioni, è necessario utilizzare un valore locale senza esporlo come variabile.
-
-
Non passate gli output direttamente attraverso le variabili di input, perché così facendo si impedisce che vengano aggiunti correttamente al grafico delle dipendenze. Per garantire che vengano create dipendenze implicite
, assicuratevi che le risorse restituiscano gli attributi di riferimento. Invece di fare riferimento direttamente a una variabile di input per un'istanza, passate l'attributo.
-
-
locals.tf: questo file contiene valori locali che assegnano un nome a un'espressione, quindi un nome può essere utilizzato più volte all'interno di un modulo anziché ripetere l'espressione. I valori locali sono come le variabili locali temporanee di una funzione. Le espressioni nei valori locali non si limitano alle costanti letterali; possono anche fare riferimento ad altri valori nel modulo, tra cui variabili, attributi di risorse o altri valori locali, per combinarli.
-
providers.tf : questo file contiene il blocco terraform e i blocchi provider.
provider
i blocchi devono essere dichiarati solo nei moduli root dai consumatori di moduli.Se utilizzi HCP Terraform, aggiungi anche un blocco cloud
vuoto. Il cloud
blocco deve essere configurato interamente tramite variabili di ambiente e credenziali di variabilidi ambiente come parte di una pipeline CI/CD. -
versions.tf: questo file contiene il blocco required_providers.
Tutti i moduli Terraform devono dichiarare i provider necessari in modo che Terraform possa installare e utilizzare questi provider. -
data.tf: per una configurazione semplice, metti le fonti di dati
accanto alle risorse che vi fanno riferimento. Ad esempio, se state recuperando un'immagine da utilizzare per lanciare un'istanza, posizionatela accanto all'istanza invece di raccogliere risorse di dati nel relativo file. Se il numero di fonti di dati diventa troppo grande, valuta la possibilità di spostarle in un file dedicato data.tf
. -
.tfvars: per i moduli root, puoi fornire variabili non sensibili utilizzando un file.
.tfvars
Per coerenza, assegnate un nome ai file delle variabili.terraform.tfvars
Inserisci i valori comuni nella radice del repository e i valori specifici dell'ambiente all'interno della cartella.envs/
-
Moduli annidati: i moduli annidati devono esistere nella sottodirectory.
modules/
Qualsiasi modulo annidato che dispone di unREADME.md
è considerato utilizzabile da un utente esterno. Se unREADME.md
non esiste, il modulo viene considerato solo per uso interno. I moduli annidati devono essere utilizzati per suddividere il comportamento complesso in più moduli di piccole dimensioni che gli utenti possano selezionare e scegliere con cura.Se il modulo root include chiamate a moduli annidati, queste chiamate dovrebbero utilizzare percorsi relativi,
./modules/sample-module
in modo che Terraform li consideri parte dello stesso repository o pacchetto invece di scaricarli nuovamente separatamente.Se un repository o un pacchetto contiene più moduli nidificati, idealmente dovrebbero essere componibili dal chiamante invece di chiamarsi direttamente l'un l'altro e creare un albero di moduli profondamente annidato.
-
Esempi: nella
examples/
sottodirectory alla radice del repository dovrebbero esistere esempi di utilizzo di un modulo riutilizzabile. Per ogni esempio, puoi aggiungere un README per spiegare l'obiettivo e l'utilizzo dell'esempio. Gli esempi di sottomoduli devono essere collocati anche nella directory principaleexamples/
.Poiché gli esempi vengono spesso copiati in altri repository per la personalizzazione, i blocchi di moduli dovrebbero avere la fonte impostata sull'indirizzo che utilizzerebbe un chiamante esterno, non su un percorso relativo.
-
File denominati del servizio: gli utenti spesso desiderano separare le risorse Terraform per servizio in più file. Questa pratica dovrebbe essere scoraggiata il più possibile e le risorse dovrebbero invece essere definite in.
main.tf
Tuttavia, se una raccolta di risorse (ad esempio, ruoli e policy IAM) supera le 150 righe, è ragionevole suddividerla in file separati, ad esempio.iam.tf
Altrimenti, tutto il codice delle risorse dovrebbe essere definito in.main.tf
-
Script personalizzati: utilizzare gli script solo quando necessario. Terraform non tiene conto né gestisce lo stato delle risorse create tramite script. Usa script personalizzati solo quando le risorse Terraform non supportano il comportamento desiderato. Inserisci gli script personalizzati chiamati da Terraform in una directory.
scripts/
-
Script di supporto: organizza gli script di supporto che non vengono chiamati da Terraform in una directory.
helpers/
Documenta gli script di supporto nel file con spiegazioni ed esempi di invocazioni.README.md
Se gli script di supporto accettano argomenti, fornisci il controllo degli argomenti e l'output.--help
-
File statici: i file statici a cui Terraform fa riferimento ma che non vengono eseguiti (come gli script di avvio caricati su istanze EC2) devono essere organizzati in una directory.
files/
Inserisci documenti lunghi in file esterni, separati dal loro HCL. Fateli riferimento con la funzione file (). -
Modelli: per i file in cui legge la funzione Terraform templatefile
, usa l'estensione del file. .tftpl
I modelli devono essere inseriti in una directory.templates/
Struttura del modulo principale
Terraform viene sempre eseguito nel contesto di un singolo modulo root. Una configurazione Terraform completa consiste in un modulo root e nell'albero dei moduli figlio (che include i moduli chiamati dal modulo root, tutti i moduli chiamati da tali moduli e così via).
Esempio di base del layout del modulo root Terraform:
. ├── data.tf ├── envs │ ├── dev │ │ └── terraform.tfvars │ ├── prod │ │ └── terraform.tfvars │ └── test │ └── terraform.tfvars ├── locals.tf ├── main.tf ├── outputs.tf ├── providers.tf ├── README.md ├── terraform.tfvars ├── variables.tf └── versions.tf
Struttura del modulo riutilizzabile
I moduli riutilizzabili seguono gli stessi concetti dei moduli root. Per definire un modulo, create una nuova directory e inserite .tf
i file al suo interno, proprio come fareste con un modulo root. Terraform può caricare i moduli da percorsi relativi locali o da repository remoti. Se prevedi che un modulo venga riutilizzato da molte configurazioni, inseriscilo nel suo repository di controllo della versione. È importante mantenere l'albero dei moduli relativamente piatto per facilitare il riutilizzo dei moduli in combinazioni diverse.
Esempio di base del layout del modulo riutilizzabile Terraform:
. ├── data.tf ├── examples │ ├── multi-az-new-vpc │ │ ├── data.tf │ │ ├── locals.tf │ │ ├── main.tf │ │ ├── outputs.tf │ │ ├── providers.tf │ │ ├── README.md │ │ ├── terraform.tfvars │ │ ├── variables.tf │ │ ├── versions.tf │ │ └── vpc.tf │ └── single-az-existing-vpc │ │ ├── data.tf │ │ ├── locals.tf │ │ ├── main.tf │ │ ├── outputs.tf │ │ ├── providers.tf │ │ ├── README.md │ │ ├── terraform.tfvars │ │ ├── variables.tf │ │ └── versions.tf ├── iam.tf ├── locals.tf ├── main.tf ├── outputs.tf ├── README.md ├── variables.tf └── versions.tf
Struttura per la modularità
In linea di principio, puoi combinare qualsiasi risorsa e altri costrutti in un modulo, ma un uso eccessivo di moduli annidati e riutilizzabili può rendere più difficile la comprensione e la manutenzione della configurazione complessiva di Terraform, quindi usa questi moduli con moderazione.
Quando ha senso, suddividi la configurazione in moduli riutilizzabili che aumentano il livello di astrazione descrivendo un nuovo concetto nell'architettura costruito con tipi di risorse.
Quando modularizzate l'infrastruttura in definizioni riutilizzabili, puntate a set logici di risorse anziché a singoli componenti o raccolte eccessivamente complesse.
Non racchiudete singole risorse
Non dovreste creare moduli che siano involucri sottili attorno ad altri tipi di risorse singole. Se hai difficoltà a trovare un nome per il tuo modulo che sia diverso dal nome del tipo di risorsa principale al suo interno, probabilmente il modulo non sta creando una nuova astrazione, ma sta aggiungendo complessità non necessarie. Utilizza invece il tipo di risorsa direttamente nel modulo chiamante.
Incapsula le relazioni logiche
Raggruppa set di risorse correlate come basi di rete, livelli di dati, controlli di sicurezza e applicazioni. Un modulo riutilizzabile dovrebbe incapsulare componenti dell'infrastruttura che interagiscono per abilitare una funzionalità.
Mantieni invariata l'ereditarietà
Quando annidi i moduli nelle sottodirectory, evita di approfondire più di uno o due livelli. Strutture ereditarie profondamente annidate complicano le configurazioni e la risoluzione dei problemi. I moduli devono basarsi su altri moduli, non creare tunnel attraverso di essi.
Concentrando i moduli su raggruppamenti di risorse logiche che rappresentano modelli di architettura, i team possono configurare rapidamente basi infrastrutturali affidabili. Bilancia l'astrazione senza ingegnerizzare o semplificare eccessivamente.
Risorse di riferimento negli output
Per ogni risorsa definita in un modulo riutilizzabile, includi almeno un output che faccia riferimento alla risorsa. Le variabili e gli output consentono di dedurre le dipendenze tra moduli e risorse. Senza alcun output, gli utenti non possono ordinare correttamente il modulo in relazione alle loro configurazioni Terraform.
Moduli ben strutturati che forniscono coerenza ambientale, raggruppamenti mirati e riferimenti alle risorse esportati consentono la collaborazione Terraform a livello di organizzazione su larga scala. I team possono assemblare l'infrastruttura partendo da elementi costitutivi riutilizzabili.
Non configurare i provider
Sebbene i moduli condivisi ereditino i provider dai moduli di chiamata, i moduli non dovrebbero configurare autonomamente le impostazioni del provider. Evita di specificare i blocchi di configurazione del provider nei moduli. Questa configurazione deve essere dichiarata solo una volta a livello globale.
Dichiarare i provider richiesti
Sebbene le configurazioni dei provider siano condivise tra i moduli, i moduli condivisi devono inoltre dichiarare i propri requisiti di provider.
Dichiarando i requisiti di versione ed evitando la configurazione del provider codificata, i moduli forniscono portabilità e riusabilità tra le configurazioni Terraform utilizzando provider condivisi.
Per dichiarare che un modulo richiede una particolare versione del AWS provider, usa un blocco all'interno di un required_providers
blocco: terraform
terraform { required_version = ">= 1.0.0" required_providers { aws = { source = "hashicorp/aws" version = ">= 4.0.0" } } }
Se un modulo condiviso supporta solo una versione specifica del AWS provider, utilizzate l'operatore di vincolo pessimistico (~>
), che consente solo al componente della versione più a destra di incrementare:
terraform { required_version = ">= 1.0.0" required_providers { aws = { source = "hashicorp/aws" version = "~> 4.0" } } }
In questo esempio, ~> 4.0
consente l'installazione di and but not. 4.57.1
4.67.0
5.0.0
Per ulteriori informazioni, vedete Version Constraint Syntax nella documentazione
Segui le convenzioni di denominazione
Nomi chiari e descrittivi semplificano la comprensione delle relazioni tra le risorse del modulo e lo scopo dei valori di configurazione. La coerenza con le linee guida di stile migliora la leggibilità sia per gli utenti che per i manutentori del modulo.
Segui le linee guida per la denominazione delle risorse
-
Usa snake_case (dove i termini minuscoli sono separati da caratteri di sottolineatura) per far sì che tutti i nomi delle risorse corrispondano agli standard di stile Terraform. Questa pratica garantisce la coerenza con la convenzione di denominazione per i tipi di risorse, i tipi di fonti di dati e altri valori predefiniti. Questa convenzione non si applica agli argomenti relativi ai nomi
. -
Per semplificare i riferimenti a una risorsa che è l'unica del suo tipo (ad esempio, un singolo sistema di bilanciamento del carico per un intero modulo), assegnate un nome alla risorsa
main
othis
per chiarezza. -
Utilizzate nomi significativi che descrivano lo scopo e il contesto della risorsa e che aiutino a distinguere tra risorse simili (ad esempio, per il database principale e
primary
read_replica
per una replica in lettura del database). -
Usa nomi singolari, non plurali.
-
Non ripetete il tipo di risorsa nel nome della risorsa.
Segui le linee guida per la denominazione delle variabili
-
Aggiungi unità ai nomi di input, variabili locali e output che rappresentano valori numerici come la dimensione del disco o la dimensione della RAM (ad esempio,
ram_size_gb
per la dimensione della RAM in gigabyte). Questa pratica rende chiara l'unità di input prevista per i gestori della configurazione. -
Utilizza unità binarie come MiB e GiB per le dimensioni di archiviazione e unità decimali come MB o GB per altre metriche.
-
Assegna alle variabili booleane nomi positivi come.
enable_external_access
Usa le risorse relative agli allegati
Alcune risorse contengono delle pseudo-risorse incorporate come attributi. Ove possibile, dovresti evitare di utilizzare questi attributi di risorsa incorporati e utilizzare invece la risorsa unica per allegare quella pseudo-risorsa. Queste relazioni tra le risorse possono causare cause-and-effect problemi unici per ogni risorsa.
Utilizzando un attributo incorporato (evita questo schema):
resource "aws_security_group" "allow_tls" { ... ingress { description = "TLS from VPC" from_port = 443 to_port = 443 protocol = "tcp" cidr_blocks = [aws_vpc.main.cidr_block] ipv6_cidr_blocks = [aws_vpc.main.ipv6_cidr_block] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] ipv6_cidr_blocks = ["::/0"] } }
Utilizzo delle risorse relative agli allegati (preferito):
resource "aws_security_group" "allow_tls" { ... } resource "aws_security_group_rule" "example" { type = "ingress" description = "TLS from VPC" from_port = 443 to_port = 443 protocol = "tcp" cidr_blocks = [aws_vpc.main.cidr_block] ipv6_cidr_blocks = [aws_vpc.main.ipv6_cidr_block] security_group_id = aws_security_group.allow_tls.id }
Usa tag predefiniti
Assegna tag a tutte le risorse che possono accettare tag. Il Terraform AWS Provider ha una fonte di dati aws_default_tags
Prendi in considerazione l'aggiunta dei tag necessari a tutte le risorse create da un modulo Terraform. Ecco un elenco di possibili tag da allegare:
-
Nome: nome della risorsa leggibile dall'uomo
-
AppId: ID dell'applicazione che utilizza la risorsa
-
AppRole: La funzione tecnica della risorsa, ad esempio «webserver» o «database»
-
AppPurpose: Lo scopo commerciale della risorsa, ad esempio «interfaccia utente frontend» o «processore di pagamento»
-
Ambiente: l'ambiente software, ad esempio dev, test o prod
-
Progetto: i progetti che utilizzano la risorsa
-
CostCenter: A chi fatturare l'utilizzo delle risorse
Soddisfa i requisiti del registro Terraform
Un repository di moduli deve soddisfare tutti i seguenti requisiti per poter essere pubblicato su un registro Terraform.
Dovresti sempre seguire questi requisiti anche se non hai intenzione di pubblicare il modulo in un registro a breve termine. In questo modo, è possibile pubblicare il modulo in un registro in un secondo momento senza dover modificare la configurazione e la struttura del repository.
-
Nome dell'archivio: per un archivio di moduli, usa il nome in tre parti
terraform-aws-<NAME>
, che<NAME>
riflette il tipo di infrastruttura gestita dal modulo. Il<NAME>
segmento può contenere trattini aggiuntivi (ad esempio,).terraform-aws-iam-terraform-roles
-
Struttura del modulo standard: il modulo deve aderire alla struttura standard del repository. Ciò consente al registro di ispezionare il modulo e generare documentazione, tenere traccia dell'utilizzo delle risorse e altro ancora.
-
Dopo aver creato il repository Git, copia i file del modulo nella radice del repository. Ti consigliamo di collocare ogni modulo destinato a essere riutilizzabile nella radice del relativo repository, ma puoi anche fare riferimento ai moduli delle sottodirectory.
-
Se utilizzi HCP Terraform, pubblica i moduli che devono essere condivisi nel registro della tua organizzazione. Il registro gestisce i download e controlla l'accesso con i token API HCP Terraform, quindi i consumatori non devono accedere al repository di origine del modulo anche quando eseguono Terraform dalla riga di comando.
-
-
Posizione e autorizzazioni: il repository deve trovarsi in uno dei provider del sistema di controllo della versione (VCS) configurato e l'account utente HCP Terraform VCS
deve avere accesso amministratore al repository. Il registro richiede l'accesso da amministratore per creare i webhook per importare nuove versioni del modulo. -
Tag x.y.z per le versioni: è necessario che sia presente almeno un tag release per poter pubblicare un modulo. Il registro utilizza i tag di rilascio per identificare le versioni dei moduli. I nomi dei tag di release devono utilizzare il controllo delle versioni semantico
, a cui è possibile aggiungere facoltativamente il prefisso a v
(ad esempio, e).v1.1.0
1.1.0
Il registro ignora i tag che non assomigliano ai numeri di versione. Per ulteriori informazioni sulla pubblicazione dei moduli, consulta la documentazione di Terraform.
Per ulteriori informazioni, consulta Preparazione di un repository di moduli nella documentazione
Usa i sorgenti dei moduli consigliati
Terraform utilizza l'source
argomento in un blocco di modulo per trovare e scaricare il codice sorgente di un modulo figlio.
Ti consigliamo di utilizzare percorsi locali per moduli strettamente correlati che hanno lo scopo principale di estrarre elementi di codice ripetuti e di utilizzare un registro di moduli Terraform nativo o un provider VCS per moduli destinati a essere condivisi da più configurazioni.
Gli esempi seguenti illustrano i tipi di sorgenti
Registro
Registro Terraform:
module "lambda" { source = "github.com/terraform-aws-modules/terraform-aws-lambda.git?ref=e78cdf1f82944897ca6e30d6489f43cf24539374" #--> v4.18.0 ... }
Aggiungendo gli hash di commit, è possibile evitare la deviazione dai registri pubblici che sono vulnerabili agli attacchi alla catena di approvvigionamento.
HCP Terraform:
module "eks_karpenter" { source = "app.terraform.io/my-org/eks/aws" version = "1.1.0" ... enable_karpenter = true }
Terraform Enterprise:
module "eks_karpenter" { source = "terraform.mydomain.com/my-org/eks/aws" version = "1.1.0" ... enable_karpenter = true }
Fornitori di VCS
I provider VCS supportano l'ref
argomento a favore della selezione di una revisione specifica, come illustrato negli esempi seguenti.
GitHub (HTTPS):
module "eks_karpenter" { source = "github.com/my-org/terraform-aws-eks.git?ref=v1.1.0" ... enable_karpenter = true }
Archivio Git generico (HTTPS):
module "eks_karpenter" { source = "git::https://example.com/terraform-aws-eks.git?ref=v1.1.0" ... enable_karpenter = true }
Archivio Git generico (SSH):
avvertimento
È necessario configurare le credenziali per accedere agli archivi privati.
module "eks_karpenter" { source = "git::ssh://username@example.com/terraform-aws-eks.git?ref=v1.1.0" ... enable_karpenter = true }
Segui gli standard di codifica
Applica regole e stili di formattazione Terraform coerenti su tutti i file di configurazione. Applica gli standard utilizzando controlli di stile automatizzati nelle pipeline CI/CD. Quando incorpori le migliori pratiche di codifica nei flussi di lavoro dei team, le configurazioni rimangono leggibili, gestibili e collaborative anche se l'utilizzo si diffonde ampiamente all'interno dell'organizzazione.
Segui le linee guida di stile
-
Formatta tutti i file (
.tf
file) Terraform con il comando terraform fmtin modo che HashiCorp soddisfino gli standard di stile. -
Usa il comando terraform validate
per verificare la sintassi e la struttura della tua configurazione. -
Analizza staticamente la qualità del codice utilizzando TFlint.
Questo linter verifica le migliori pratiche di Terraform oltre alla semplice formattazione e fallisce le build quando riscontra errori.
Configura gli hook di pre-commit
Configura gli hook di pre-commit sul lato client che eseguono e terraform fmt
eseguono altre scansioni del codice e controlli di stile prima di consentire i commit. tflint
checkov
Questa pratica consente di convalidare la conformità agli standard nelle fasi iniziali dei flussi di lavoro degli sviluppatori.
Usa framework di pre-commit come pre-commit
Lo spostamento dei controlli di stile e qualità negli hook locali di pre-commit fornisce un feedback rapido agli sviluppatori prima che vengano introdotte le modifiche. Gli standard entrano a far parte del flusso di lavoro di codifica.