Template completo de Terraform para crear una instancia EC2 en AWS con toda la infraestructura de red necesaria.
- VPC completa con subred pública
- Internet Gateway para acceso a internet
- Security Groups configurados para puertos 22 (SSH), 80 (HTTP) y 443 (HTTPS)
- Instancia EC2 con configuración automática
- Elastic IP para IP pública fija
- Key Pair para acceso SSH seguro
- Configuración por ambientes (dev, prod, local)
- Soporte completo para LocalStack para desarrollo local
- Scripts automatizados para generación de claves SSH
terraform-ec2-dev-host/
├── main.tf # Recursos principales de Terraform (AWS + LocalStack)
├── variables.tf # Definición de variables
├── outputs.tf # Outputs del proyecto
├── versions.tf # Versiones requeridas
├── backend.tf # Configuración del backend (local por defecto)
├── backend.tf.example # Ejemplo de backend remoto (S3)
├── docker-compose.yml # Configuración de LocalStack
├── environments/ # Configuraciones por ambiente
│ ├── dev.tfvars # Variables para desarrollo (AWS real)
│ ├── prod.tfvars # Variables para producción (AWS real)
│ └── local.tfvars # Variables para LocalStack (desarrollo local)
├── local/ # Configuración específica para LocalStack (legacy)
│ ├── main.tf # Configuración LocalStack (mantenido por compatibilidad)
│ └── terraform.tfvars # Variables LocalStack (mantenido por compatibilidad)
├── scripts/ # Scripts de automatización
│ ├── generate-ssh-keys.sh # Generar claves SSH
│ ├── start-localstack.sh # Iniciar LocalStack
│ ├── stop-localstack.sh # Detener LocalStack
│ └── init-project.sh # Inicializar proyecto
├── Makefile # Comandos útiles
├── .gitignore # Archivos a excluir del repositorio
└── README.md # Este archivo
- Terraform >= 1.0
- Docker y Docker Compose
- AWS CLI configurado (solo para AWS real)
- Acceso a una cuenta de AWS con permisos para crear recursos (solo para AWS real)
Si usas WSL2 en Windows:
- Instalar Docker Desktop para Windows y habilitar WSL2 integration
- En WSL2, instalar Terraform:
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform
- Verificar Docker desde WSL:
docker --version docker-compose --version
git clone <tu-repositorio>
cd terraform-ec2-dev-hostbash scripts/generate-ssh-keys.shcp terraform.tfvars.example terraform.tfvars
# Editar terraform.tfvars con tus valores# Inicializar
terraform init
# Planificar cambios
terraform plan -var-file=environments/dev.tfvars
# Aplicar cambios
terraform apply -var-file=environments/dev.tfvars# Iniciar LocalStack
make localstack-start
# Desplegar en LocalStack
make local
# O manualmente:
terraform plan -var-file=environments/local.tfvars
terraform apply -var-file=environments/local.tfvars
# Detener LocalStack cuando termines
make localstack-stopmake help # Mostrar ayuda
make check # Verificar entorno de desarrollo
make init # Inicializar Terraform
make plan # Planificar cambios
make apply # Aplicar cambios
make destroy # Destruir infraestructura
make output # Mostrar outputs
make ssh-keys # Generar claves SSH
make dev # Desplegar en desarrollo (AWS real)
make prod # Desplegar en producción (AWS real)
make local # Desplegar en LocalStack (desarrollo local)
make localstack-start # Iniciar LocalStack
make localstack-stop # Detener LocalStack
make validate # Validar configuración
make format # Formatear código| Variable | Descripción | Valor por Defecto |
|---|---|---|
aws_region |
Región de AWS | us-east-1 |
project_name |
Nombre del proyecto | ec2-dev-host |
environment |
Ambiente | dev |
vpc_cidr |
CIDR de la VPC | 10.0.0.0/16 |
instance_type |
Tipo de instancia | t3.micro |
use_localstack |
Usar LocalStack | false |
localstack_endpoint |
Endpoint de LocalStack | http://localhost:4566 |
- Desarrollo (AWS real):
environments/dev.tfvars - Producción (AWS real):
environments/prod.tfvars - LocalStack (desarrollo local):
environments/local.tfvars
El proyecto detecta automáticamente si se está ejecutando con LocalStack basándose en la variable use_localstack:
- AWS real: Configuración estándar con endpoints de AWS
- LocalStack: Configuración automática con endpoints locales y credenciales de prueba
Después del despliegue, podrás acceder a tu instancia:
- SSH:
ssh -i ssh/id_rsa ec2-user@<IP_PUBLICA> - HTTP:
http://<IP_PUBLICA> - HTTPS:
https://<IP_PUBLICA>
- Las claves SSH se generan automáticamente
- Security Groups configurados para puertos específicos
- VPC aislada con subred pública
- Tags de recursos para mejor organización
Este template está diseñado para ser escalable:
- Configuración unificada: Un solo archivo
main.tfmaneja ambos entornos - Variables configurables: Fácil personalización
- Múltiples ambientes: Configuraciones separadas por entorno
- Backend flexible: Soporte para S3/DynamoDB y local
- LocalStack: Desarrollo y testing local sin costos
Para agregar nuevos recursos de Terraform:
- Agregar al
main.tfprincipal con configuración condicional si es necesario - Usar variables para configuración
- Agregar outputs relevantes
- Documentar en el README
# En main.tf
resource "aws_db_instance" "main" {
# configuración básica...
# Configuración condicional para LocalStack
skip_final_snapshot = var.use_localstack
}# Destruir infraestructura
terraform destroy -var-file=environments/dev.tfvars
# Limpiar archivos temporales
make clean- AMI: El template usa Amazon Linux 2 por defecto para AWS real
- LocalStack: Usa AMIs genéricas (ami-12345678) para desarrollo local
- Región: Configurado para
us-east-1, cambia según necesites - Costos:
t3.microestá en la capa gratuita de AWS - Backup: Considera usar un backend remoto para el estado en producción
- Fork el proyecto
- Crea una rama para tu feature
- Commit tus cambios
- Push a la rama
- Abre un Pull Request
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
Si tienes problemas o preguntas:
- Revisa la documentación
- Verifica los logs de Terraform
- Abre un issue en el repositorio
# Verificar que Docker esté ejecutándose
docker ps
# Si hay problemas de permisos
sudo usermod -aG docker $USER
# Reiniciar WSL después de esto# Verificar logs de LocalStack
docker-compose logs localstack
# Reiniciar LocalStack
make localstack-stop
make localstack-start# Limpiar estado
make clean
# Re-inicializar
terraform init# Para AWS real
terraform plan -var-file=environments/dev.tfvars
# Para LocalStack
terraform plan -var-file=environments/local.tfvars¡Disfruta usando Terraform para gestionar tu infraestructura en AWS y LocalStack! 🚀