Salta ai contenuti

Infrastruttura Terraform

Terraform è uno strumento software open-source per l’infrastruttura come codice che consente 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 le migliori pratiche 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 - The name of the project.
type string application Whether this is a terraform lib (re-usable modules) or app (deployable).
directory string packages The directory of the new project.

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

Per progetti di tipo 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 delle variabili di input
    • outputs.tf Definizioni dei valori di output
    • Directoryenv File di variabili specifici per ambiente
      • dev.tfvars Variabili per ambiente di sviluppo
  • Directorybootstrap Configurazione bootstrap per lo stato remoto
    • main.tf Bucket S3 e politiche per lo storage dello stato
    • providers.tf Configurazione provider AWS
    • variables.tf Definizioni delle variabili bootstrap
  • project.json Configurazione del progetto e target di build

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

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

Puoi iniziare a scrivere la tua infrastruttura Terraform all’interno di 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 libreria.

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

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

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

Bootstrap Stato Remoto (Solo Progetti Applicazione)

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

Per i 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 run tf-infra:bootstrap

I target disponibili dipendono dal tipo di progetto:

Puoi convalidare la configurazione Terraform con il target validate:

Terminal window
pnpm nx run tf-infra:validate

Formatta il codice Terraform con il target fmt:

Terminal window
pnpm nx run tf-infra:fmt

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

Terminal window
pnpm nx run tf-infra:test

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

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 run tf-infra:plan

Questo creerà un file di pianificazione 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 run tf-infra:apply

Recupera i valori di output dalla configurazione Terraform:

Terminal window
pnpm nx run tf-infra:output

Per eliminare l’infrastruttura, usa il target destroy:

Terminal window
pnpm nx run tf-infra:destroy

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

Terminal window
pnpm nx run tf-infra:bootstrap-destroy

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