¿Alguna vez quisiste trabajar con S3 sin necesidad de una cuenta AWS o cargos por uso? LocalStack es la solución. En este artículo te muestro cómo levantar LocalStack con Docker Compose, crear un bucket S3, subir un archivo y listar su contenido usando AWS CLI.
✅ Prerrequisitos
Antes de comenzar, asegúrate de tener instalado lo siguiente:
🐳 Paso 1: Docker Compose para LocalStack
Primero, crea un archivo llamado docker-compose.yml
con el siguiente contenido:
version: '3.8'
services:
localstack:
image: localstack/localstack:latest
container_name: localstack
ports:
- "4566:4566" # Puerto principal de LocalStack
environment:
- SERVICES=s3
- DEBUG=1
- DATA_DIR=/tmp/localstack/data
- AWS_ACCESS_KEY_ID=test
- AWS_SECRET_ACCESS_KEY=test
- DEFAULT_REGION=us-east-1
volumes:
- "./localstack:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
Este archivo levanta un contenedor de LocalStack con soporte solo para S3 y con credenciales fijas (test/test
), ideales para desarrollo local.
🚀 Levanta el contenedor
docker-compose up -d
🔧 Paso 2: Configura AWS CLI
Configura tus credenciales con los mismos valores definidos en el docker-compose.yml
:
aws configure
- AWS Access Key ID: test
- AWS Secret Access Key: test
- Region: us-east-1
- Output Format: json
🛠️ Paso 3: Crea un bucket S3 local
aws s3 mb s3://mi-bucket-local
--region us-east-1 \
--endpoint-url=http://localhost:4566
Verifica que el bucket fue creado:
aws s3 ls --endpoint-url=http://localhost:4566
📁 Paso 4: Sube un archivo de prueba
Primero, crea un archivo simple:
echo "Hola desde LocalStack" > ejemplo.txt
Luego, súbelo al bucket:
aws s3 cp ejemplo.txt s3://mi-bucket-local/ --endpoint-url=http://localhost:4566
📄 Paso 5: Lista los objetos en el bucket
aws s3 ls s3://mi-bucket-local/ --endpoint-url=http://localhost:4566
Salida esperada:
2025-05-28 12:45:00 23 ejemplo.txt
✅ Conclusión
Con estos simples pasos, tienes un entorno de desarrollo local que simula Amazon S3 usando LocalStack. Ideal para desarrollo, pruebas automatizadas y aprendizaje sin costos ni conexión a Internet.
¿Te gustaría extenderlo para trabajar con SDKs en Python, Node.js o integrarlo con Terraform? ¡Déjamelo saber en los comentarios! 🚀
Top comments (0)