Usar Terraform con LocalStack para pruebas locales #
Una de las grandes ventajas de LocalStack es poder probar nuestros scripts de Terraform localmente antes de desplegarlos en AWS. Esto nos permite ahorrar costos y acelerar el desarrollo.
🎯 Configuración del provider AWS para LocalStack #
Para usar Terraform con LocalStack, necesitas configurar el provider AWS para que apunte a los endpoints locales:
Archivo main.tf
#
provider "aws" {
region = "us-east-1"
access_key = "mock_access_key"
secret_key = "mock_secret_key"
s3_force_path_style = true
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
endpoints {
s3 = "http://localhost:4566"
dynamodb = "http://localhost:4566"
lambda = "http://localhost:4566"
iam = "http://localhost:4566"
ec2 = "http://localhost:4566"
# Agrega más servicios según necesites
}
}
# Ejemplo: Crear un bucket S3
resource "aws_s3_bucket" "example" {
bucket = "my-tf-test-bucket"
tags = {
Name = "My bucket"
Environment = "Dev"
}
}
# Ejemplo: Configurar versionado del bucket
resource "aws_s3_bucket_versioning" "example" {
bucket = aws_s3_bucket.example.id
versioning_configuration {
status = "Enabled"
}
}
🚀 Ejecutar Terraform #
1. Inicializar Terraform #
terraform init
2. Planificar los cambios #
terraform plan -out=tfplan
3. Aplicar los cambios #
terraform apply "tfplan"
📦 Ejemplo avanzado: Backend con S3 y DynamoDB #
Archivo provider.tf
#
provider "aws" {
region = "us-east-1"
# Configuración para LocalStack
access_key = "test"
secret_key = "test"
s3_force_path_style = true
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
endpoints {
s3 = "http://s3.localhost.localstack.cloud:4566"
dynamodb = "http://localhost:4566"
kms = "http://localhost:4566"
}
}
Archivo backend.tf
#
module "backend" {
source = "/terraform_modules/s3_dynamo_backend"
## Variables requeridas
bucket_name = "my_terraform_state_bucket_name"
dynamodb_name = "my_dynamodb_lock_state_table_name"
## Variables opcionales
## Encriptación KMS o AES, por defecto es AES
use_kms_encryption = true
## block_all_public_access - Por defecto está en false
block_all_public_access = true
}
🔧 Configuración de backend remoto #
Una vez creado el backend, puedes configurar Terraform para usarlo:
terraform {
backend "s3" {
bucket = "my_terraform_state_bucket_name"
key = "terraform.tfstate"
region = "us-east-1"
dynamodb_table = "my_dynamodb_lock_state_table_name"
encrypt = true
# Configuración para LocalStack
endpoint = "http://localhost:4566"
force_path_style = true
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
}
}
✅ Verificar recursos creados #
Puedes verificar que los recursos se crearon correctamente usando AWS CLI:
# Listar buckets S3
aws --endpoint-url=http://localhost:4566 s3 ls
# Listar tablas DynamoDB
aws --endpoint-url=http://localhost:4566 dynamodb list-tables
# Describir un bucket específico
aws --endpoint-url=http://localhost:4566 s3api head-bucket --bucket my-tf-test-bucket
🎉 Ventajas de usar Terraform con LocalStack #
- Desarrollo rápido: Prueba cambios sin esperar deployments en AWS
- Sin costos: No pagas por recursos de prueba
- Debugging fácil: Logs locales y acceso directo a los servicios
- CI/CD: Integra pruebas automatizadas en tu pipeline
¡Ahora puedes desarrollar y probar tu infraestructura como código de forma local y eficiente!