Este ambiente de desarrollo local simula servicios AWS usando LocalStack. Incluye configuración para S3, SES, Secrets Manager, API Gateway, Lambda, DynamoDB, SQS y SNS.
- Docker
- Docker Compose
- AWS CLI (opcional pero recomendado)
- AWS SDK para tu lenguaje de programación
- Inicia el ambiente de LocalStack:
docker-compose up -d
- Verifica que LocalStack esté funcionando:
docker ps
docker logs localstack
- Crea o modifica
~/.aws/credentials
:
[localstack]
aws_access_key_id = test
aws_secret_access_key = test
region = us-east-1
- Configura las variables de entorno en tu aplicación:
export AWS_PROFILE=localstack
export AWS_ENDPOINT_URL=http://localhost:4566
import { S3Client } from '@aws-sdk/client-s3';
import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
const awsConfig = {
endpoint: 'http://localhost:4566',
region: 'us-east-1',
credentials: {
accessKeyId: 'test',
secretAccessKey: 'test'
}
};
// Cliente para S3
const s3Client = new S3Client(awsConfig);
// Cliente para Secrets Manager
const secretsClient = new SecretsManagerClient(awsConfig);
- Bucket:
my-test-bucket
- Prueba de funcionamiento:
# Listar buckets
aws --endpoint-url=http://localhost:4566 s3 ls
# Subir un archivo
aws --endpoint-url=http://localhost:4566 s3 cp test.txt s3://my-test-bucket/
- Secret Path:
/dev/app/config
- Contenido del secreto:
{
"database": "mydb",
"username": "admin",
"password": "mypassword"
}
- Prueba de funcionamiento:
# Obtener el valor del secreto
aws --endpoint-url=http://localhost:4566 secretsmanager get-secret-value --secret-id /dev/app/config
- Tabla:
TestTable
- Esquema:
id
(String) como clave primaria - Prueba de funcionamiento:
# Listar tablas
aws --endpoint-url=http://localhost:4566 dynamodb list-tables
# Insertar un item
aws --endpoint-url=http://localhost:4566 dynamodb put-item \
--table-name TestTable \
--item '{"id": {"S": "1"}, "data": {"S": "test"}}'
- Cola:
test-queue
- Prueba de funcionamiento:
# Listar colas
aws --endpoint-url=http://localhost:4566 sqs list-queues
# Enviar mensaje
aws --endpoint-url=http://localhost:4566 sqs send-message \
--queue-url http://localhost:4566/000000000000/test-queue \
--message-body "Test message"
- Tema:
test-topic
- Prueba de funcionamiento:
# Listar temas
aws --endpoint-url=http://localhost:4566 sns list-topics
- Email verificado:
noreply@example.com
- Prueba de funcionamiento:
# Listar emails verificados
aws --endpoint-url=http://localhost:4566 ses list-verified-email-addresses
import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';
async function getSecret() {
const client = new SecretsManagerClient({
endpoint: 'http://localhost:4566',
region: 'us-east-1',
credentials: {
accessKeyId: 'test',
secretAccessKey: 'test'
}
});
try {
const response = await client.send(
new GetSecretValueCommand({
SecretId: '/dev/app/config'
})
);
if (response.SecretString) {
const secret = JSON.parse(response.SecretString);
return secret;
}
} catch (error) {
console.error('Error al obtener el secreto:', error);
throw error;
}
}
- Si los servicios no son accesibles:
# Reiniciar LocalStack
docker-compose down
docker-compose up -d
# Verificar logs
docker logs localstack
- Si necesitas limpiar todos los datos:
# Detener y eliminar volúmenes
docker-compose down -v
# Reiniciar
docker-compose up -d
- Para verificar que los servicios están funcionando:
# Listar todos los servicios disponibles
aws --endpoint-url=http://localhost:4566 --no-sign-request lambda list-functions
aws --endpoint-url=http://localhost:4566 --no-sign-request s3 ls
aws --endpoint-url=http://localhost:4566 --no-sign-request secretsmanager list-secrets
- La región por defecto es
us-east-1
- Todos los servicios corren en el puerto
4566
- Credenciales por defecto:
- Access Key:
test
- Secret Key:
test
- Access Key:
- La persistencia está habilitada en el directorio
./volume
Esta configuración es solo para desarrollo local. Nunca uses estas credenciales o configuraciones en un ambiente de producción.