Instalación de LocalStack
¿Qué es LocalStack?
LocalStack es un emulador de cloud que simula los servicios de AWS en su máquina local. Le permite desarrollar y probar aplicaciones AWS sin:
- Crear una cuenta AWS
- Pagar nada
- Riesgo de facturación accidental
┌─────────────────────────────────────────────────────────────┐
│ LocalStack │
├─────────────────────────────────────────────────────────────┤
│ │
│ Su máquina "Falso" AWS │
│ ┌─────────────┐ ┌─────────────────┐ │
│ │ AWS CLI │ ──────────► │ LocalStack │ │
│ │ Scripts │ Port 4566 │ (Docker) │ │
│ │ Apps │ │ │ │
│ └─────────────┘ │ Servicios: │ │
│ │ • S3 │ │
│ │ • Lambda │ │
│ │ • DynamoDB │ │
│ │ • SQS/SNS │ │
│ │ • CloudWatch │ │
│ │ • etc. │ │
│ └─────────────────┘ │
│ │
│ ✅ Gratis ✅ Local ✅ Sin cuenta AWS │
└─────────────────────────────────────────────────────────────┘
Requisitos previos
Docker Desktop (Obligatorio)
LocalStack funciona en un contenedor Docker. Debe instalar Docker Desktop primero.
Descarga:
- Windows: https://www.docker.com/products/docker-desktop/
- macOS: https://www.docker.com/products/docker-desktop/
- Linux: Instrucciones específicas para su distribución
Verificar Docker
# Verificar que Docker está instalado
docker --version
# Verificar que Docker está funcionando
docker run hello-world
Resultado esperado:
Docker version 24.x.x, build xxxxx
En Windows, Docker Desktop debe estar iniciado antes de usar LocalStack. Verifique el ícono de Docker en la barra de tareas.
Instalación de LocalStack
Método 1: Vía Docker (Recomendado)
Este es el método más simple y confiable.
Iniciar LocalStack:
docker run -d \
--name localstack \
-p 4566:4566 \
-p 4510-4559:4510-4559 \
-e SERVICES=s3,lambda,sqs,dynamodb,cloudwatch,cloudformation \
-e DEBUG=1 \
-v /var/run/docker.sock:/var/run/docker.sock \
localstack/localstack
En Windows PowerShell:
docker run -d `
--name localstack `
-p 4566:4566 `
-p 4510-4559:4510-4559 `
-e SERVICES=s3,lambda,sqs,dynamodb,cloudwatch,cloudformation `
-e DEBUG=1 `
localstack/localstack
Método 2: Vía Docker Compose (Recomendado para este curso)
Cree un archivo docker-compose.yml:
version: '3.8'
services:
localstack:
container_name: localstack
image: localstack/localstack:latest
ports:
- "4566:4566" # Puerto principal
- "4510-4559:4510-4559" # Puertos adicionales
environment:
- SERVICES=s3,lambda,sqs,sns,dynamodb,cloudwatch,cloudformation,iam
- DEBUG=1
- DATA_DIR=/tmp/localstack/data
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
Iniciar con Docker Compose:
docker-compose up -d
Método 3: Vía pip (Alternativa)
# Instalar LocalStack CLI
pip install localstack
# Iniciar LocalStack
localstack start
Verificación de la Instalación
Paso 1: Verificar que el contenedor está en ejecución
docker ps
Resultado esperado:
CONTAINER ID IMAGE COMMAND STATUS PORTS
abc123def456 localstack/localstack "docker-entrypoint.sh" Up 2 minutes 0.0.0.0:4566->4566/tcp
Paso 2: Verificar el estado de LocalStack
curl http://localhost:4566/_localstack/health
Resultado esperado:
{
"services": {
"s3": "running",
"lambda": "running",
"sqs": "running",
"dynamodb": "running",
...
}
}
En Windows PowerShell:
Invoke-RestMethod http://localhost:4566/_localstack/health
Paso 3: Probar con AWS CLI
# Crear un bucket S3
aws --endpoint-url=http://localhost:4566 s3 mb s3://mi-primer-bucket --profile localstack
# Listar los buckets
aws --endpoint-url=http://localhost:4566 s3 ls --profile localstack
Resultado esperado:
make_bucket: mi-primer-bucket
2024-12-18 10:30:00 mi-primer-bucket
Servicios Disponibles de LocalStack
Versión Gratuita (Community)
| Servicio | Soporte | Notas |
|---|---|---|
| S3 | ✅ Completo | Almacenamiento de objetos |
| Lambda | ✅ Completo | Funciones serverless |
| SQS | ✅ Completo | Cola de mensajes |
| SNS | ✅ Completo | Notificaciones |
| DynamoDB | ✅ Completo | Base NoSQL |
| CloudWatch Logs | ✅ Parcial | Solo logs |
| CloudFormation | ✅ Básico | Plantillas simples |
| IAM | ✅ Básico | Roles y políticas |
| EC2 | ⚠️ Limitado | Solo metadatos |
| VPC | ⚠️ Limitado | Simulación básica |
Lo que usaremos
┌─────────────────────────────────────────────────────────────┐
│ Servicios LocalStack para este curso │
├─────────────────────────────────────────────────────────────┤
│ │
│ PRÁCTICA COMPLETA SOLO TEORÍA │
│ (LocalStack) (Sin simulación) │
│ │
│ ✅ S3 📚 EC2 (instancias) │
│ ✅ Lambda 📚 VPC completo │
│ ✅ SQS/SNS 📚 EBS │
│ ✅ DynamoDB 📚 ELB/ALB │
│ ✅ CloudWatch Logs 📚 Route 53 │
│ ✅ CloudFormation 📚 Auto Scaling │
│ ✅ IAM (básico) │
│ │
└─────────────────────────────────────────────────────────────┘
Comandos de Gestión de LocalStack
Iniciar LocalStack
# Con Docker
docker start localstack
# Con Docker Compose
docker-compose up -d
# Con CLI
localstack start
Detener LocalStack
# Con Docker
docker stop localstack
# Con Docker Compose
docker-compose down
# Con CLI
localstack stop
Ver los logs
docker logs localstack
# Seguir los logs en tiempo real
docker logs -f localstack
Reinicio limpio
docker stop localstack
docker rm localstack
# Luego vuelva a ejecutar el comando docker run
Script de Automatización
Cree un script para facilitar el inicio:
Windows (start-localstack.ps1)
# start-localstack.ps1
Write-Host "Iniciando LocalStack..." -ForegroundColor Green
# Verificar si el contenedor existe
$container = docker ps -a -q -f name=localstack
if ($container) {
Write-Host "Eliminando el contenedor anterior..."
docker rm -f localstack
}
# Iniciar LocalStack
docker run -d `
--name localstack `
-p 4566:4566 `
-p 4510-4559:4510-4559 `
-e SERVICES=s3,lambda,sqs,dynamodb,cloudwatch,cloudformation `
localstack/localstack
Write-Host "Esperando el inicio (30 segundos)..." -ForegroundColor Yellow
Start-Sleep -Seconds 30
# Verificar
Write-Host "Verificando..." -ForegroundColor Green
aws --endpoint-url=http://localhost:4566 s3 ls --profile localstack
Write-Host "¡LocalStack está listo!" -ForegroundColor Green
macOS/Linux (start-localstack.sh)
#!/bin/bash
echo "Iniciando LocalStack..."
# Eliminar el contenedor anterior si existe
docker rm -f localstack 2>/dev/null
# Iniciar LocalStack
docker run -d \
--name localstack \
-p 4566:4566 \
-p 4510-4559:4510-4559 \
-e SERVICES=s3,lambda,sqs,dynamodb,cloudwatch,cloudformation \
localstack/localstack
echo "Esperando el inicio (30 segundos)..."
sleep 30
# Verificar
echo "Verificando..."
aws --endpoint-url=http://localhost:4566 s3 ls --profile localstack
echo "¡LocalStack está listo!"
Alias Prácticos
Para simplificar los comandos, configure un alias:
Windows PowerShell
Agregue al archivo $PROFILE:
function awslocal {
aws --endpoint-url=http://localhost:4566 --profile localstack $args
}
macOS/Linux
Agregue en ~/.bashrc o ~/.zshrc:
alias awslocal='aws --endpoint-url=http://localhost:4566 --profile localstack'
Uso del alias
# En lugar de:
aws --endpoint-url=http://localhost:4566 s3 ls --profile localstack
# Escribirá:
awslocal s3 ls
Prueba Completa del Entorno
Ejecute estos comandos para validar su instalación:
# 1. Verificar Docker
docker --version
# 2. Verificar LocalStack
docker ps | grep localstack
# 3. Verificar el estado
curl http://localhost:4566/_localstack/health
# 4. Crear un bucket S3
awslocal s3 mb s3://test-bucket
# 5. Listar los buckets
awslocal s3 ls
# 6. Eliminar el bucket de prueba
awslocal s3 rb s3://test-bucket
# 7. Verificar Lambda (debería estar vacío)
awslocal lambda list-functions
Captura de Pantalla Esperada
PS C:\Users\SuNombre> docker ps
CONTAINER ID IMAGE STATUS PORTS
abc123 localstack/localstack Up 5 minutes 0.0.0.0:4566->4566/tcp
PS C:\Users\SuNombre> awslocal s3 ls
2024-12-18 10:30:00 test-bucket
PS C:\Users\SuNombre> awslocal lambda list-functions
{
"Functions": []
}
Solución de Problemas
Problema: "Cannot connect to the Docker daemon"
Solución:
- Verifique que Docker Desktop está iniciado
- En Windows, haga clic en el ícono de Docker en la barra de tareas
- Espere a que Docker esté en "Running"
Problema: "Port 4566 already in use"
Solución:
# Encontrar el proceso
# Windows
netstat -ano | findstr 4566
# Linux/macOS
lsof -i :4566
# Matar el proceso o cambiar el puerto
docker run -p 4567:4566 ...
Problema: "Connection refused to localhost:4566"
Solución:
- Espere 30-60 segundos después de iniciar
- Verifique los logs:
docker logs localstack - Reinicie el contenedor
Problema: Comandos AWS muy lentos
Solución: LocalStack puede ser lento en la primera llamada. Es normal. Las siguientes llamadas serán más rápidas.
Checklist de Validación
- Docker Desktop instalado e iniciado
- Contenedor LocalStack en ejecución
- Puerto 4566 accesible
- Comando
awslocal s3 lsfunciona - Alias
awslocalconfigurado
Quiz de Validación
- ¿Qué es LocalStack?
- ¿En qué puerto escucha LocalStack por defecto?
- ¿Por qué se usa
--endpoint-urlcon AWS CLI? - ¿Qué servicios AWS emula bien LocalStack?
- ¿Cómo verificar que LocalStack está funcionando?
Próxima sección: Lab: Configuración del entorno