Saltearse al contenido

Infraestructura de Terraform

Terraform es una herramienta de código abierto para infraestructura como código que te permite crear, modificar y mejorar infraestructura de forma segura y predecible.

El generador de infraestructura Terraform crea un proyecto de infraestructura con Terraform. La aplicación generada incluye mejores prácticas de seguridad mediante verificaciones de Checkov.

Puedes generar un nuevo proyecto Terraform de dos formas:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - terraform#project
  5. Complete los parámetros requeridos
    • name: tf-infra
  6. Haga clic en Generate
Parámetro Tipo Predeterminado Descripción
name Requerido 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.

El generador crea diferentes estructuras de archivos según el tipo de proyecto:

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

  • Directorysrc
    • main.tf Archivo principal de configuración de Terraform
    • providers.tf Configuración de proveedores con backend S3
    • variables.tf Definiciones de variables de entrada
    • outputs.tf Definiciones de valores de salida
    • Directoryenv Archivos de variables específicas del entorno
      • dev.tfvars Variables de entorno de desarrollo
  • Directorybootstrap Configuración de bootstrap para estado remoto
    • main.tf Bucket S3 y políticas para almacenamiento de estado
    • providers.tf Configuración del proveedor AWS
    • variables.tf Definiciones de variables de bootstrap
  • project.json Configuración del proyecto y objetivos de construcción

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

  • Directorysrc
    • main.tf Archivo principal del módulo Terraform
  • project.json Configuración del proyecto y objetivos de construcción

Puedes comenzar a escribir tu infraestructura Terraform en 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}'"
}
}
# Declara tu infraestructura aquí
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name"
}

Si deseas ejecutar un módulo de otro proyecto (biblioteca), puedes 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 biblioteca.

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

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

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

Bootstrap de estado remoto (solo proyectos aplicación)

Sección titulada «Bootstrap de estado remoto (solo proyectos aplicación)»

Para proyectos de aplicación, antes de desplegar tu infraestructura, necesitas ejecutar el bootstrap del backend de estado remoto. Esto crea un bucket S3 para almacenar tus archivos de estado de Terraform:

Terminal window
pnpm nx run tf-infra:bootstrap

Los objetivos disponibles dependen del tipo de proyecto:

Objetivos comunes (aplicación y biblioteca)

Sección titulada «Objetivos comunes (aplicación y biblioteca)»

Puedes validar tu configuración Terraform con el objetivo validate:

Terminal window
pnpm nx run tf-infra:validate

Formatea tu código Terraform con el objetivo fmt:

Terminal window
pnpm nx run tf-infra:fmt

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

Terminal window
pnpm nx run tf-infra:test

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

Los siguientes objetivos solo están disponibles para proyectos de tipo aplicación:

Antes de aplicar cambios, puedes ver lo que Terraform hará ejecutando el objetivo plan:

Terminal window
pnpm nx run tf-infra:plan

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

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

Terminal window
pnpm nx run tf-infra:init

Después de planificar, puedes desplegar tu infraestructura en AWS con el objetivo apply:

Terminal window
pnpm nx run tf-infra:apply

Recupera valores de salida de tu configuración Terraform:

Terminal window
pnpm nx run tf-infra:output

Cuando necesites eliminar tu infraestructura, usa el objetivo destroy:

Terminal window
pnpm nx run tf-infra:destroy

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

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

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