Salta ai contenuti

Infrastruttura Terraform

Filter this guide Pick generator option values to hide sections that don't apply.

Terraform è uno strumento open-source per l’infrastruttura come codice che ti permette di creare, modificare e migliorare l’infrastruttura in modo sicuro e prevedibile.

Il generatore di infrastruttura Terraform crea un progetto di infrastruttura Terraform. L’applicazione generata include best practice di sicurezza attraverso i controlli di sicurezza di Checkov.

Puoi generare un nuovo progetto Terraform in due modi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - terraform#project
  5. Compila i parametri richiesti
    • name: tf-infra
  6. Clicca su Generate
Parametro Tipo Predefinito Descrizione
name Obbligatorio string - Il nome del progetto.
type string application Se si tratta di una libreria terraform (moduli riutilizzabili) o di un'app (distribuibile).
directory string packages La directory del nuovo progetto.
subDirectory string - La sottodirectory in cui viene posizionato il progetto. Per impostazione predefinita corrisponde al nome del progetto.

Il generatore crea strutture di file diverse in base al tipo di progetto:

type = application

Per progetti di applicazione (--type=application), il generatore crea un’applicazione Terraform completa con gestione dello stato remoto:

  • Directorysrc
    • main.tf File di configurazione principale Terraform
    • providers.tf Configurazione provider con backend S3
    • variables.tf Definizioni variabili di input
    • outputs.tf Definizioni valori di output
    • Directoryenv File di variabili specifici per ambiente
      • dev.tfvars Variabili ambiente di sviluppo
  • Directorybootstrap Configurazione bootstrap per stato remoto
    • main.tf Bucket S3 e politiche per lo storage dello stato
    • providers.tf Configurazione provider AWS
    • variables.tf Definizioni variabili bootstrap
  • Directoryscripts Helper Node eseguiti dai target nx bootstrap e init
    • aws-config.ts Risolve account + regione tramite la catena di credenziali AWS SDK
    • bootstrap.ts Effettua pull/push del tfstate bootstrap ed esegue terraform apply
    • init.ts Esegue terraform init con la configurazione backend S3
  • project.json Configurazione progetto e target di build
type = library

Per progetti libreria (--type=library), il generatore crea una struttura più semplice per moduli Terraform riutilizzabili:

  • Directorysrc
    • main.tf File principale modulo Terraform
  • project.json Configurazione progetto e target di build

Puoi iniziare a scrivere la tua infrastruttura Terraform in src/main.tf, ad esempio:

src/main.tf
locals {
account_id = data.aws_caller_identity.current.account_id
aws_region = data.aws_region.current.id
}
resource "null_resource" "print_info" {
# triggers = {
# always_run = timestamp()
# }
provisioner "local-exec" {
command = "echo 'AWS Region: ${local.aws_region}, AWS Account: ${local.account_id}, Environment: ${var.environment}'"
}
}
# Dichiarare la propria infrastruttura qui
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name"
}

Se vuoi eseguire un modulo da un progetto separato (lib), puoi farlo così:

module "lib_module" {
source = "../../path/to/my-lib/src"
}

Questo aggiornerà automaticamente il grafo Nx per aggiungere una dipendenza tra la tua applicazione consumer e la tua lib.

Configura le variabili specifiche per ambiente nei file src/env/*.tfvars.

Per aggiungere nuovi ambienti, crea un nuovo file src/env/<environment>.tfvars con le variabili specifiche e aggiungi nuove voci per apply, destroy, init, plan nel project.json per la nuova configurazione ambiente. Ad esempio, aggiungiamo un ambiente prod:

# Variabili ambiente produzione
environment = "prod"
region = "us-west-2"
type = application

Bootstrap Stato Remoto (Solo Progetti Applicazione)

Sezione intitolata “Bootstrap Stato Remoto (Solo Progetti Applicazione)”

Prima di deployare l’infrastruttura devi eseguire il bootstrap del backend per lo stato remoto. Questo crea un bucket S3 per archiviare i file di stato Terraform:

Terminal window
pnpm nx bootstrap tf-infra

I target disponibili dipendono dal tipo di progetto:

Puoi validare la configurazione Terraform con il target validate:

Terminal window
pnpm nx validate tf-infra

Formatta il codice Terraform con il target fmt:

Terminal window
pnpm nx fmt tf-infra

Esegui controlli di sicurezza sull’infrastruttura con Checkov usando il target test:

Terminal window
pnpm nx test tf-infra

Troverai i risultati dei test di sicurezza nella cartella dist principale, sotto dist/packages/<my-terraform-project>/checkov.

type = application

I seguenti target sono disponibili solo per progetti di tipo applicazione:

Prima di applicare modifiche, puoi vedere cosa farà Terraform con il target plan:

Terminal window
pnpm nx plan tf-infra

Questo creerà un file di plan in dist/packages/<my-terraform-project>/terraform/dev.tfplan.

Inizializza la directory di lavoro Terraform con il target init:

Terminal window
pnpm nx run tf-infra:init

Dopo la pianificazione, puoi deployare l’infrastruttura su AWS con il target apply:

Terminal window
pnpm nx apply tf-infra

Recupera i valori di output dalla configurazione Terraform:

Terminal window
pnpm nx output tf-infra

Per eliminare l’infrastruttura, usa il target destroy:

Terminal window
pnpm nx destroy tf-infra

Per eliminare le risorse bootstrap (bucket S3 per lo stato):

Terminal window
pnpm nx bootstrap-destroy tf-infra

Per maggiori informazioni su Terraform, consulta la Documentazione Terraform e la Documentazione AWS Provider.