Concepto clave
Una VPC (Virtual Private Cloud) es el bloque fundamental de tu infraestructura en AWS. Imagina que es como construir tu propio centro de datos virtual dentro de la nube de AWS, completamente aislado y bajo tu control. Con Terraform, defines esta VPC como código, lo que significa que puedes versionarla, compartirla y recrearla exactamente igual en cualquier momento.
La analogía perfecta es planificar una casa antes de construirla: los planos (tu código Terraform) especifican exactamente cómo será la estructura, dónde irán las habitaciones (subredes), y cómo se conectará al exterior (gateways). Esto elimina la configuración manual en la consola AWS, que es propensa a errores y difícil de replicar.
Cómo funciona en la práctica
Para crear una VPC básica con Terraform, sigues un flujo estructurado. Primero, configuras el proveedor AWS en tu archivo main.tf, definiendo la región donde desplegarás. Luego, defines el recurso aws_vpc con parámetros clave como el bloque CIDR (que determina el rango de direcciones IP privadas). Finalmente, ejecutas terraform apply para que Terraform se comunique con AWS y cree la VPC físicamente.
Un ejemplo paso a paso:
- Escribe el código en un archivo
main.tf - Ejecuta
terraform initpara inicializar el proyecto y descargar el proveedor AWS - Usa
terraform planpara ver qué cambios se aplicarán - Aplica con
terraform applyy confirma - Verifica en la consola AWS que la VPC se creó correctamente
Código en acción
Aquí tienes un ejemplo funcional para crear una VPC básica en la región us-east-1. Este código es copiable y ejecutable directamente.
# main.tf - Configuración del proveedor AWS
provider "aws" {
region = "us-east-1"
}
# Definición de la VPC
resource "aws_vpc" "mi_primera_vpc" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "VPC-Terraform-Demo"
Environment = "Dev"
}
}Después de ejecutar terraform apply, puedes mejorar este código añadiendo una subred. Aquí el antes y después:
Antes: Solo la VPC (como arriba).
Después: VPC con una subred pública:
# main.tf - VPC con subred
provider "aws" {
region = "us-east-1"
}
resource "aws_vpc" "mi_primera_vpc" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "VPC-Terraform-Demo"
}
}
resource "aws_subnet" "subred_publica" {
vpc_id = aws_vpc.mi_primera_vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "us-east-1a"
map_public_ip_on_launch = true
tags = {
Name = "Subred-Publica-1"
}
}Errores comunes
- Olvidar terraform init: Si no ejecutas
terraform initantes deplanoapply, Terraform no tendrá el proveedor AWS configurado y fallará. Siempre inicia tu proyecto primero. - Bloques CIDR superpuestos: Definir un
cidr_blockque se solape con otras VPCs en tu cuenta puede causar conflictos. Usa rangos únicos como 10.0.0.0/16, 172.16.0.0/16, o 192.168.0.0/16. - No etiquetar recursos: Sin etiquetas, es difícil identificar y gestionar recursos en AWS. Incluye siempre tags como Name y Environment para mejor organización.
- Ignorar terraform plan Saltar
terraform plany aplicar directamente puede llevar a cambios no deseados. Usaplanpara revisar y validar antes de aplicar. - Credenciales AWS incorrectas Si no configuras correctamente las credenciales AWS (via AWS CLI o variables de entorno), Terraform no podrá autenticarse. Verifica con
aws sts get-caller-identity.
Checklist de dominio
- He escrito y ejecutado un archivo
main.tfque define una VPC básica con Terraform. - He ejecutado
terraform init,plan, yapplyexitosamente para crear la VPC en AWS. - He verificado en la consola AWS que la VPC existe y tiene las propiedades definidas (CIDR, tags).
- He añadido al menos una subred a la VPC y entendido cómo se relacionan los recursos.
- He usado etiquetas (tags) en todos mis recursos para identificación clara.
- He probado
terraform destroypara eliminar la infraestructura y confirmar que no hay costos residuales. - He versionado mi código Terraform en un sistema como Git, con un commit inicial.
Crear una VPC con dos subredes usando Terraform
En este ejercicio practico, vas a crear una VPC en AWS con dos subredes: una publica y una privada. Sigue estos pasos:
- Configura tu entorno AWS con credenciales validas usando AWS CLI o variables de entorno.
- Crea un nuevo directorio para tu proyecto Terraform y dentro, un archivo llamado
main.tf. - En
main.tf, define el proveedor AWS para la regionus-east-1. - Define un recurso
aws_vpccon CIDR block10.0.0.0/16y habilita soporte DNS y nombres de host. Añade tags: Name con valor "MiVPC-Ejercicio" y Environment con valor "Testing". - Define dos recursos
aws_subnet:- Subred publica: CIDR
10.0.1.0/24, en zona de disponibilidadus-east-1a, conmap_public_ip_on_launch = true. - Subred privada: CIDR
10.0.2.0/24, en zonaus-east-1b, sin IP publica automatica.
aws_vpc.mi_vpc.id(ajusta el nombre si es necesario). - Subred publica: CIDR
- Ejecuta
terraform initpara inicializar el proyecto. - Ejecuta
terraform plany revisa los cambios propuestos. - Aplica la configuracion con
terraform applyy confirma escribiendo "yes". - Verifica en la consola AWS que la VPC y las dos subredes se han creado correctamente.
- Opcional: Ejecuta
terraform destroypara limpiar los recursos y evitar costos.
- Recuerda que el CIDR de las subredes debe estar dentro del rango de la VPC (10.0.0.0/16).
- Usa
terraform state listpara ver los recursos creados si tienes dudas. - Si falla la autenticacion, verifica tus credenciales AWS con
aws configure list.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.