Ir al contenido

Infraestructura Terraform

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

Terraform es una herramienta de software de infraestructura como código de código abierto que te permite crear, cambiar y mejorar infraestructura de manera segura y predecible.

El generador de infraestructura Terraform crea un proyecto de infraestructura Terraform. La aplicación generada incluye mejores prácticas de seguridad a través de verificaciones de seguridad de Checkov.

Puedes generar un nuevo proyecto Terraform de dos maneras:

Terminal window
pnpm nx g @aws/nx-plugin:terraform#project --name=tf-infra
También puede realizar una ejecución en seco para ver qué archivos se cambiarían
Terminal window
pnpm nx g @aws/nx-plugin:terraform#project --name=tf-infra --dry-run
ParámetroTipoPredeterminadoDescripción
name Requeridostring-El nombre del proyecto.
type application | libraryapplicationSi esto es una lib de terraform (módulos reutilizables) o app (desplegable).
directory stringpackagesEl directorio del nuevo proyecto.
subDirectory string-El subdirectorio en el que se coloca el proyecto. Por defecto, este es el nombre del proyecto.
preferInstallDependencies booleantrueSi se prefiere instalar las dependencias después de que se ejecute el generador. Establecer en false para diferir la instalación cuando se ejecutan múltiples generadores en lote (la instalación aún se ejecuta si es necesario para que los generadores subsiguientes puedan calcular el grafo de proyectos de Nx); instalar una vez al final.

El generador crea diferentes estructuras de archivos dependiendo del tipo de proyecto:

type = application

Para proyectos de aplicación (--type=application), el generador crea una aplicación Terraform completa con gestión de estado remoto:

  • Directoriosrc
    • main.tf Main Terraform configuration file
    • providers.tf Provider configuration with S3 backend
    • variables.tf Input variable definitions
    • outputs.tf Output value definitions
    • Directorioenv Environment-specific variable files
      • dev.tfvars Development environment variables
  • Directoriobootstrap Bootstrap configuration for remote state
    • main.tf S3 bucket and policies for state storage
    • providers.tf AWS provider configuration
    • variables.tf Bootstrap variable definitions
  • Directorioscripts Node helpers run by the nx bootstrap and init targets
    • aws-config.ts Resolves account + region via the AWS SDK credential chain
    • bootstrap.ts Pulls/pushes the bootstrap tfstate and runs terraform apply
    • init.ts Runs terraform init with the S3 backend config
  • project.json Project configuration and build targets
type = library

Para proyectos de biblioteca (--type=library), el generador crea una estructura más simple para módulos Terraform reutilizables:

  • Directoriosrc
    • main.tf Main Terraform module file
  • project.json Project configuration and build targets

Puedes comenzar a escribir tu infraestructura Terraform dentro de src/main.tf, por ejemplo:

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}'"
}
}
# Declare your infrastructure here
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name"
}

Si quisieras ejecutar un módulo desde un proyecto separado (lib), podrías hacerlo de la siguiente manera:

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

Esto actualizará automáticamente el grafo de Nx para agregar una dependencia entre tu aplicación consumidora y tu lib.

Configura variables específicas del entorno en los archivos src/env/*.tfvars.

Para agregar nuevos entornos, crea un nuevo archivo src/env/<environment>.tfvars con las variables específicas del entorno y agrega nuevas entradas para apply, destroy, init, plan en el project.json para la nueva configuración de entorno. Por ejemplo, supongamos que queremos agregar un entorno prod:

# Production environment variables
environment = "prod"
region = "us-west-2"
type = application

Bootstrap de Estado Remoto (Solo Proyectos Application)

Sección titulada «Bootstrap de Estado Remoto (Solo Proyectos Application)»

Antes de desplegar tu infraestructura, necesitarás hacer el bootstrap del backend de estado remoto. Esto crea un bucket S3 para almacenar tus archivos de estado de Terraform:

Terminal window
pnpm nx bootstrap tf-infra

Los targets disponibles dependen del tipo de tu proyecto:

Targets Comunes (Tanto Application como Library)

Sección titulada «Targets Comunes (Tanto Application como Library)»

Puedes validar tu configuración de Terraform usando el target validate:

Terminal window
pnpm nx validate tf-infra

Formatea tu código Terraform usando el target fmt:

Terminal window
pnpm nx fmt tf-infra

Ejecuta verificaciones de seguridad en tu infraestructura usando Checkov con el target test:

Terminal window
pnpm nx test tf-infra

Encontrarás los resultados de tus pruebas de seguridad en la carpeta raíz dist, bajo dist/packages/<my-terraform-project>/checkov.

type = application

Los siguientes targets solo están disponibles para proyectos de tipo application:

Antes de aplicar cambios, puedes ver qué hará Terraform ejecutando el target plan:

Terminal window
pnpm nx plan tf-infra

Esto creará un archivo de plan en dist/packages/<my-terraform-project>/terraform/dev.tfplan.

Inicializa tu directorio de trabajo de Terraform con el target init:

Terminal window
pnpm nx run tf-infra:init

Después de planificar, puedes desplegar tu infraestructura a AWS usando el target apply:

Terminal window
pnpm nx apply tf-infra

Recupera valores de salida de tu configuración de Terraform:

Terminal window
pnpm nx output tf-infra

Cuando necesites desmantelar tu infraestructura, usa el target destroy:

Terminal window
pnpm nx destroy tf-infra

Para limpiar los recursos de bootstrap (bucket S3 para almacenamiento de estado):

Terminal window
pnpm nx bootstrap-destroy tf-infra

Para más información sobre Terraform, consulta la Documentación de Terraform y la Documentación del Proveedor AWS.