Introducción
Los equipos de DevOps que migran aplicaciones entre clouds o necesitan correr DynamoDB fuera de AWS se enfrentaban hasta ahora a dos opciones: usar DynamoDB Local (con limitaciones de features y rendimiento) o reescribir el código para adaptarse a otro motor de base de datos. ExtendDB, lanzado por AWS en junio de 2026, cambia ese paradigma al ofrecer un adaptador de código abierto que implementa el wire protocol de DynamoDB y traduce las llamadas a SQL, permitiendo usar PostgreSQL como backend principal pero con una arquitectura diseñada para soportar MySQL, Cassandra o cualquier otro motor que implemente una trait de almacenamiento.
El proyecto está escrito en Rust (versión 1.85+) y publicado bajo licencia Apache 2.0 en GitHub. Su diseño modular —separado en crates para el core, el motor de DynamoDB, el backend de PostgreSQL y el servidor HTTP— lo hace ideal para entornos de desarrollo local, pipelines de CI/CD, y escenarios on-premise donde la compliance exige evitar servicios cloud públicos.
Qué ocurrió
AWS anunció ExtendDB el 7 de junio de 2026 como una implementación 100% compatible con el API de DynamoDB, incluyendo operaciones como CreateTable, PutItem, UpdateItem, Query y Stream. Hasta ahora, solo el backend de PostgreSQL (versión 14+) está oficialmente soportado, pero el equipo de AWS ya publicó la interfaz en Rust (StorageBackend) para que terceros contribuyan con backends adicionales.
El proyecto no es el primero en su tipo: proyectos como Rektifier (también en Rust y Apache 2.0) ofrecían funcionalidad similar antes de ExtendDB, pero la diferencia clave es el respaldo de AWS y su enfoque en la integración con el ecosistema DynamoDB (SDKs, herramientas como aws dynamodb CLI, etc.). Según la documentación oficial, ExtendDB:
- Genera un certificado TLS auto-firmado en su primer arranque.
- Usa autenticación SigV4 con un almacén local de credenciales al estilo IAM.
- Expone una consola web y un API de gestión para monitoreo.
En un hilo de Reddit, usuarios reportaron métricas iniciales: p90 de 300ms en UpdateItem y 20ms en lecturas bajo una carga de 10 concurrencias en un MacBook con 16 cores. Los desarrolladores de ExtendDB reconocen que el rendimiento aún no alcanza al de DynamoDB nativo, pero destacan que el proyecto está en versión 0.1 y que se espera mejoras en la semántica de transacciones y optimización de consultas.
Impacto para DevOps, Infraestructura y Seguridad
Para equipos de DevOps y SRE
ExtendDB permite desacoplar el desarrollo de aplicaciones del proveedor de cloud. Un equipo puede:
- Usar el mismo código en desarrollo (con ExtendDB + PostgreSQL local) y en producción (DynamoDB en AWS).
- Ejecutar pruebas de integración en CI/CD sin depender de servicios externos.
- Ejecutar cargas de trabajo on-premise en entornos con regulaciones estrictas (banca, salud) donde DynamoDB no está disponible.
Sin embargo, el impacto en pipelines existentes es mínimo si ya se usa Docker o contenedores: ExtendDB se distribuye como un solo binario de 5MB sin dependencias externas (requiere solo Rust 1.85+ y PostgreSQL 14+). Para entornos Kubernetes (EKS, AKS), basta con incluir el binario en un initContainer o como sidecar.
Para equipos de seguridad
La seguridad de ExtendDB se basa en tres pilares:
- TLS obligatorio: El servidor genera un certificado auto-firmado en el primer arranque, pero se puede reemplazar por uno firmado por una CA interna.
- Autenticación SigV4: Usa el mismo mecanismo que DynamoDB nativo, con credenciales almacenadas en un directorio local (similar a
~/.aws/credentials). - Aislamiento de backends: Cada backend (PostgreSQL, MySQL, etc.) debe implementar la trait de almacenamiento, lo que permite aplicar políticas de seguridad específicas por motor (ej.: auditoría en PostgreSQL, cifrado en MySQL).
El riesgo principal es la exposición del puerto del adaptador (por defecto, 8000) sin configurar redes seguras. AWS recomienda:
- Usar redes privadas en entornos de producción.
- Rotar credenciales con frecuencia (el almacén local soporta claves de acceso temporales).
- Auditar logs: ExtendDB registra eventos como
AuthFailureoInvalidRequesten formato JSON estructurado.
Para equipos de cloud
ExtendDB no compite directamente con DynamoDB Local, sino que complementa su uso:
- DynamoDB Local sigue siendo la opción recomendada para emular el servicio completo (incluyendo Streams y Global Tables) en desarrollo.
- ExtendDB es útil cuando el equipo necesita SQL como backend o cuando la aplicación debe correr on-premise por compliance.
La compatibilidad con SDKs existentes (v2 y v3 de AWS) evita cambios en el código, pero los equipos deben probar:
- Comportamiento de transacciones: ExtendDB implementa semántica eventual consistency por ahora.
- Soporte de tipos: Algunos tipos nativos de DynamoDB (como
Binary) se mapean aBYTEAen PostgreSQL.
Detalles técnicos
Arquitectura y componentes
ExtendDB está dividido en cuatro crates de Rust (módulos):
- core: Maneja tipos, validación de solicitudes y evaluación de expresiones. Usa syn para parsear expresiones de filtrado (ej.:
AttributeExists(foo)). - engine: Implementa la semántica del API de DynamoDB. Incluye manejo de tablas, índices secundarios, y streams (emite eventos en formato DynamoDB Streams).
- storage-postgres: Backend oficial. Mapea:
CREATE TABLE IF NOT EXISTS dynamodb_table (...).– Índices GSIs → índices en PostgreSQL.
– Particiones → particiones en PostgreSQL (usando PARTITION BY HASH).
- server: Servidor HTTP que expone:
/ para CreateTable).– Consola web en /console (desarrollada con Yew, un framework de Rust para WASM).
– API de gestión (ej.: /health para chequeo de salud).
Vectores de ataque y mitigaciones
Aunque ExtendDB reduce la superficie de ataque al no exponer directamente el backend (PostgreSQL está aislado), introduce riesgos indirectos:
| Riesgo | Vector | Mitigación |
|---|---|---|
| Inyección SQL en el backend | Consultas dinámicas en BLOCK28 | Usar consultas parametrizadas con BLOCK29 . |
| Denegación de servicio | Saturación de conexiones a PostgreSQL | Limitar conexiones con BLOCK30 en PostgreSQL y usar un pool (ej.: BLOCK31 ). |
| Fuga de credenciales | Almacén local de SigV4 | Rotar claves con BLOCK32 y almacenarlas en un *secret manager* (HashiCorp Vault, AWS Secrets Manager). |
| Canonicalización de rutas | Ataques como BLOCK33 en paths | Validar nombres de tablas/atributos con expresiones regulares ( BLOCK34 ). |
- Rust: 1.85+ (usando
rustuppara manejar versiones). - PostgreSQL: 14+ (requiere extensiones
pgcryptoyuuid-ossp). - Sistema operativo: Linux (x86_64, ARM64) y macOS (x86_64, ARM64).
- Redes: TLS 1.2+ (el binario usa
rustlscomo librería TLS).
El proyecto se compila con:
cargo build --releaseY se ejecuta con:
./target/release/extenddb --storage postgres --host localhost --port 5432 --user dynamodb --db dynamodbDiferencias con DynamoDB Local
| Feature | DynamoDB Local | ExtendDB (v0.1) |
|---|---|---|
| Backend | Emulador en memoria | PostgreSQL |
| Streams | Sí | Sí (emite eventos a un *stream* Kafka o PostgreSQL) |
| Global Tables | Sí | No (planeado para futuras versiones) |
| Transacciones | ACID completo | Eventual consistency |
| Rendimiento | ~10ms p90 | ~20-300ms p90 (depende de la carga) |
1. Evaluar si ExtendDB es adecuado para su caso de uso
Usen ExtendDB si:- Necesitan correr cargas de trabajo DynamoDB on-premise por compliance.
- Quieren un backend SQL (PostgreSQL, MySQL) para aprovechar herramientas de observabilidad como Prometheus, Grafana o Loki.
- Su equipo ya usa Rust o está migrando a microservicios en Kubernetes.
- Requiere Streams en tiempo real (la implementación actual es básica).
- Necesitan Global Tables o ACID estricto (la consistencia eventual puede generar problemas en sistemas financieros).
- Su aplicación depende de features exclusivos de DynamoDB (ej.: Transactions con múltiples tablas).
2. Implementar en entornos de desarrollo y CI/CD
Para equipos que usan Docker o Podman, el equipo de AWS publicó una imagen oficial en Docker Hub:
docker pull amazon/extenddb:0.1
docker run -p 8000:8000 \
-e EXTENDDB_STORAGE=postgres \
-e EXTENDDB_POSTGRES_HOST=postgres \
-e EXTENDDB_POSTGRES_USER=dynamodb \
-e EXTENDDB_POSTGRES_PASSWORD=secret \
extenddbEn GitHub Actions, pueden integrarlo en un step de CI:
- name: Start ExtendDB
run: |
docker run -d --name extenddb \
-e EXTENDDB_STORAGE=postgres \
-e EXTENDDB_POSTGRES_HOST=localhost \
-p 8000:8000 \
amazon/extenddb:0.13. Configurar autenticación y TLS en producción
En entornos de producción, no usen el certificado auto-firmado. Reemplácenlo con uno firmado por su CA interna:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
./extenddb --tls-cert cert.pem --tls-key key.pemPara autenticación, usen IAM Roles o credenciales temporales:
export AWS_ACCESS_KEY_ID=AKIA...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...4. Monitorear y optimizar rendimiento
ExtendDB expone métricas en /metrics en formato Prometheus. Configuren un scrape en Prometheus:
scrape_configs:
- job_name: 'extenddb'
static_configs:
- targets: ['extenddb:8000']Para mejorar el rendimiento:
- Ajusten
max_connectionsen PostgreSQL (recomendado: 100-200 por instancia). - Usen índices en PostgreSQL para columnas frecuentemente consultadas (ej.:
user_id). - Consideren usar Rektifier si necesitan un rendimiento superior a corto plazo (aunque sin soporte oficial de AWS).
5. Contribuir con nuevos backends
Si su equipo usa Cassandra o MySQL, pueden implementar el trait StorageBackend:
pub trait StorageBackend {
async fn create_table(&self, table: &Table) -> Result<()>;
async fn put_item(&self, item: Item) -> Result<()>;
// ... otros métodos
}El código de ejemplo está en storage-postgres/src/lib.rs. AWS acepta pull requests en el repositorio oficial amazon/extenddb.
Conclusión
ExtendDB es un avance significativo para equipos que necesitan flexibilidad sin cambiar el código de aplicaciones que usan DynamoDB. Su arquitectura modular en Rust, la compatibilidad con SDKs existentes y el soporte inicial para PostgreSQL lo hacen atractivo para entornos de desarrollo, CI/CD y escenarios on-premise controlados.
Sin embargo, su rendimiento actual (p90 de 20-300ms) y la falta de features como Global Tables o ACID estricto lo limitan para cargas de trabajo críticas. Equipos que requieran alta performance deberían evaluar alternativas como Rektifier o esperar a futuras versiones de ExtendDB (se espera mejoras en transacciones y optimización de consultas en el roadmap).
Para la mayoría de los casos, ExtendDB es una herramienta complementaria a DynamoDB Local, no un reemplazo. Su valor real está en cerrar la brecha entre el ecosistema DynamoDB y entornos donde el uso de SQL o la ejecución on-premise es un requisito.
