Saltar al contenido principal

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:

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
Important Windows

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)​

ServicioSoporteNotas
S3✅ CompletoAlmacenamiento de objetos
Lambda✅ CompletoFunciones serverless
SQS✅ CompletoCola de mensajes
SNS✅ CompletoNotificaciones
DynamoDB✅ CompletoBase NoSQL
CloudWatch Logs✅ ParcialSolo logs
CloudFormation✅ BásicoPlantillas simples
IAM✅ BásicoRoles y políticas
EC2⚠️ LimitadoSolo metadatos
VPC⚠️ LimitadoSimulació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:

  1. Verifique que Docker Desktop está iniciado
  2. En Windows, haga clic en el ícono de Docker en la barra de tareas
  3. 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:

  1. Espere 30-60 segundos después de iniciar
  2. Verifique los logs: docker logs localstack
  3. 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 ls funciona
  • Alias awslocal configurado

Quiz de Validación​

  1. ¿Qué es LocalStack?
  2. ¿En qué puerto escucha LocalStack por defecto?
  3. ¿Por qué se usa --endpoint-url con AWS CLI?
  4. ¿Qué servicios AWS emula bien LocalStack?
  5. ¿Cómo verificar que LocalStack está funcionando?

Próxima sección: Lab: Configuración del entorno