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 por 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 para bootstrap
  • project.json Configuración del proyecto y objetivos de build

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 build

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 un proyecto separado (lib), 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 por entorno en los archivos src/env/*.tfvars.

Para agregar nuevos entornos, crea un nuevo archivo src/env/<entorno>.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:

# Variables de entorno de producción
environment = "prod"
region = "us-west-2"

Bootstrap de estado remoto (Solo proyectos de aplicación)

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

Para proyectos de aplicación, antes de desplegar tu infraestructura, necesitas inicializar el 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 usando el objetivo validate:

Terminal window
pnpm nx run tf-infra:validate

Formatea tu código Terraform usando el objetivo fmt:

Terminal window
pnpm nx run tf-infra:fmt

Ejecuta verificaciones de seguridad en tu infraestructura usando Checkov con 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 usando 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 limpiar 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.