lección 2
Setup: AWS CLI + LocalStack + credenciales
Instalación paso a paso de AWS CLI y LocalStack en Windows y Mac. Configurar credenciales, verificar conexión y tu primer comando contra AWS local.
⏱ 55 min
Esta es una lección de setup — y como toda lección de setup en este track, la tomamos MUY en serio. No hay nada más frustrante que llegar a una lección emocionante sobre S3 o Lambda y no poder hacer los ejercicios porque algo no está bien configurado. Vamos a instalar tres cosas: AWS CLI (la herramienta de línea de comandos para hablar con AWS), boto3 (la librería de Python para programar contra AWS), y LocalStack (el emulador de AWS que nos permite practicar gratis sin riesgo de facturación).
LocalStack es tu mejor amigo en esta skill. Es un proyecto open source que emula los servicios de AWS en tu propia máquina usando Docker. Cuando ejecutas un comando contra LocalStack, es como hablar con AWS pero todo se queda en tu portátil. Puedes crear buckets S3, funciones Lambda, tablas de DynamoDB, políticas IAM — todo sin gastar un céntimo ni arriesgar una cuenta real.
### Paso 1: Verificar que Docker está corriendo
LocalStack corre dentro de Docker (que instalaste en la Skill 6). Verifica que Docker Desktop está activo:
1# 🟦 Windows (PowerShell) y 🍎 Mac (Terminal) — mismo comando2docker --version3# Docker version 24.x.x o superior45docker ps6# Debería mostrar la lista de contenedores (puede estar vacía)
Si docker ps da error, abre Docker Desktop y espera a que inicie
### Paso 2: Instalar AWS CLI v2
AWS CLI es la navaja suiza para interactuar con AWS desde la terminal. Incluso cuando usamos boto3 en Python, muchas veces necesitas CLI para operaciones rápidas, debugging o scripts de automatización.
1# 🟦 Windows (PowerShell) — ejecutar como administrador2msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi34# Verificar instalación (cerrar y reabrir PowerShell):5aws --version6# aws-cli/2.x.x Python/3.x.x Windows/10 ...
Instalación en Windows — descarga e instala el MSI oficial
1# 🍎 Mac (Terminal) — con Homebrew2brew install awscli34# Verificar instalación:5aws --version6# aws-cli/2.x.x Python/3.x.x Darwin/23.x.x ...
Instalación en Mac — Homebrew es el método más limpio
### Paso 3: Instalar boto3 en tu entorno virtual
1# 🟦 Windows y 🍎 Mac — dentro de tu venv2pip install boto334# Verificar5python -c "import boto3; print(boto3.__version__)"6# 1.34.x
boto3 es el SDK oficial de AWS para Python
### Paso 4: Levantar LocalStack con Docker
LocalStack se ejecuta como un contenedor Docker. Vamos a usar docker-compose para tenerlo siempre listo:
1# Crea un archivo docker-compose.yml en tu directorio de trabajo2# 🟦 Windows y 🍎 Mac — mismo contenido
Prepara el directorio del proyecto
1# docker-compose.yml2services:3 localstack:4 image: localstack/localstack:3.55 ports:6 - "127.0.0.1:4566:4566"7 environment:8 - AWS_DEFAULT_REGION=eu-west-19 - DEBUG=010 volumes:11 # Necesario para Lambda EN LOS TRES SISTEMAS.12 # Docker Desktop expone el socket también en Windows (WSL2).13 - "/var/run/docker.sock:/var/run/docker.sock"
docker-compose.yml — LocalStack con la imagen 3.5 (la última sin cuenta obligatoria)
IMPORTANTE: clava la versión de la imagen. No pongas :latest. Desde la versión 2026.03.0 (23 de marzo de 2026) LocalStack no arranca sin una cuenta y un token (LOCALSTACK_AUTH_TOKEN). El token del plan Hobby es gratuito para uso no comercial, pero exige registrarse, y ese registro no es parte de este curso. Por eso aquí usamos localstack/localstack:3.5, la última versión que arranca sin cuenta. Es una imagen de junio de 2024, así que no tiene los arreglos posteriores.
Ojo: LocalStack olvida todo al reiniciarse. Guardar el estado entre arranques es una función de los planes de pago, así que cada docker compose up te da un AWS recién estrenado. No es un problema, es una costumbre: cada lección empieza creando lo que necesita. Para apagar LocalStack: docker compose down. Mientras esté levantado consume RAM (~512MB).
1# 🟦 Windows y 🍎 Mac — levantar LocalStack2docker-compose up -d34# Verificar que está corriendo:5docker ps6# Deberías ver localstack/localstack:3.5 corriendo78# Verificar que responde:9curl http://localhost:4566/_localstack/health10# {"services": {"s3": "running", "iam": "running", ...}}
En Windows PowerShell usa Invoke-WebRequest en vez de curl si no lo tienes
### Paso 5: Configurar credenciales para LocalStack
Aunque LocalStack no necesita credenciales reales (acepta cualquier cosa), necesitamos configurar AWS CLI con credenciales ficticias para que los comandos funcionen sin errores:
1# 🟦 Windows y 🍎 Mac — configurar un perfil "localstack"2aws configure --profile localstack3# AWS Access Key ID: test4# AWS Secret Access Key: test5# Default region name: eu-west-16# Default output format: json
Las credenciales son ficticias — LocalStack acepta cualquier valor
Consejo de senior: NUNCA pongas credenciales reales de AWS en tu código fuente ni en archivos que suban a Git. Usa perfiles de AWS CLI (~/.aws/credentials) y variables de entorno. He visto empresas perder miles de euros porque alguien subió un access key a un repo público y bots de mining de crypto lo detectaron en minutos.
### Paso 6: Tu primer comando — crear un bucket S3 en local
1# 🟦 Windows y 🍎 Mac — crear un bucket S3 en LocalStack2aws --endpoint-url=http://localhost:4566 --profile localstack \3 s3 mb s3://mi-primer-bucket45# Listar buckets6aws --endpoint-url=http://localhost:4566 --profile localstack \7 s3 ls8# 2024-01-15 10:30:00 mi-primer-bucket
El --endpoint-url apunta a LocalStack en vez de a AWS real
### Paso 7: Verificar con boto3 (Python)
1import boto323# Crear cliente S3 apuntando a LocalStack4s3 = boto3.client(5 's3',6 endpoint_url='http://localhost:4566',7 aws_access_key_id='test',8 aws_secret_access_key='test',9 region_name='eu-west-1'10)1112# Listar buckets13response = s3.list_buckets()14for bucket in response['Buckets']:15 print(f"Bucket: {bucket['Name']}")16# Bucket: mi-primer-bucket
boto3 hablando con LocalStack — idéntico a AWS real excepto el endpoint_url
Fíjate en algo importante: el código Python para hablar con LocalStack es IDÉNTICO al que usarías contra AWS real. La única diferencia es el endpoint_url. Cuando el día de mañana trabajes con una cuenta AWS real, solo tendrás que quitar ese parámetro y todo funcionará igual. Esta es la belleza de LocalStack como herramienta de aprendizaje.
Consejo de senior: crea una función helper que construya el cliente boto3 con o sin LocalStack según una variable de entorno. Así tu código funciona en local y en producción sin cambios. Algo como: endpoint = os.getenv("AWS_ENDPOINT_URL") y pasarlo solo si existe.
Si LocalStack no arranca, los motivos más comunes son: 1) Docker Desktop no está corriendo, 2) el puerto 4566 está ocupado por otro servicio, 3) no tienes suficiente RAM libre (LocalStack necesita ~512MB). Revisa con docker logs localstack.
### Función helper reutilizable para todo el curso
1import os2import boto334def get_aws_client(service_name: str):5 """6 Crea un cliente boto3 contra LocalStack si AWS_ENDPOINT_URL7 está definida; contra AWS real si no.8 """9 kwargs = {'region_name': os.getenv('AWS_DEFAULT_REGION', 'eu-west-1')}10 endpoint = os.getenv('AWS_ENDPOINT_URL')11 if endpoint:12 kwargs.update(13 endpoint_url=endpoint,14 aws_access_key_id=os.getenv('AWS_ACCESS_KEY_ID', 'test'),15 aws_secret_access_key=os.getenv('AWS_SECRET_ACCESS_KEY', 'test')16 )17 return boto3.client(service_name, **kwargs)1819# Uso:20s3 = get_aws_client('s3')21iam = get_aws_client('iam')22lambda_client = get_aws_client('lambda')
Guarda esto en un archivo aws_helper.py — lo usarás en TODOS los ejercicios
## ejercicios
Verificar que LocalStack responde
Escribe un script que verifique que LocalStack está corriendo y muestre el estado de cada servicio configurado.
Crear estructura de buckets para data lake
Tu empresa necesita una estructura de data lake en S3. Crea programáticamente los buckets: raw-data, processed-data, y analytics-output usando boto3. Tiene que ser idempotente: ejecútalo dos veces y la segunda no debe fallar.
Crea tu módulo aws_helper.py
Construye un módulo reutilizable con funciones helper que usarás en todos los ejercicios de esta skill. Debe crear clientes para s3, iam, lambda y glue.
Crear alias para no escribir --endpoint-url cada vez
Configura un alias awslocal que añada automáticamente el endpoint de LocalStack. Muestra cómo hacerlo tanto en PowerShell como en zsh.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...