| id |
title |
type |
status |
priority |
provider |
category |
multi_tenant |
version |
created_date |
updated_date |
| INT-005 |
Integracion Storage Providers |
Integration |
Implemented |
P1 |
S3/R2/MinIO |
Storage |
true |
1.0.0 |
2026-01-07 |
2026-01-10 |
INT-005: Storage Integration
Metadata
| Campo |
Valor |
| Codigo |
INT-005 |
| Proveedor |
AWS S3, Cloudflare R2, MinIO |
| Tipo |
Storage |
| Estado |
Implementado |
| Multi-tenant |
Si |
| Fecha integracion |
2026-01-10 |
Documentacion completa: Ver SAAS-011-storage.md
Resumen
Integracion multi-proveedor para almacenamiento de archivos.
Proveedores Soportados
- AWS S3
- Cloudflare R2
- MinIO (self-hosted)
Caracteristicas
- Upload directo con URLs pre-firmadas
- Cuotas de almacenamiento por plan
- Tipos MIME permitidos configurables
- Metadata de archivos en base de datos
Configuracion
# AWS S3
STORAGE_PROVIDER=s3
AWS_S3_BUCKET=my-bucket
AWS_S3_REGION=us-east-1
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
# Cloudflare R2
STORAGE_PROVIDER=r2
R2_ACCOUNT_ID=...
R2_ACCESS_KEY_ID=...
R2_SECRET_ACCESS_KEY=...
R2_BUCKET=my-bucket
# MinIO
STORAGE_PROVIDER=minio
MINIO_ENDPOINT=localhost:9000
MINIO_ACCESS_KEY=...
MINIO_SECRET_KEY=...
MINIO_BUCKET=my-bucket
Rate Limits
| Limite |
Valor |
Accion si excede |
| Requests/seg |
3500 (S3 PUT), 5500 (S3 GET) |
Retry con backoff exponencial |
| Tamanio archivo |
Segun plan del tenant |
Rechazar upload |
Manejo de Errores
| Codigo |
Descripcion |
Accion |
| 400 |
Bad Request |
Log + no retry |
| 401 |
Unauthorized |
Renovar credenciales |
| 403 |
Forbidden |
Verificar permisos bucket |
| 429 |
Rate Limited |
Backoff exponencial |
| 500 |
Server Error |
Retry con backoff |
Fallbacks
Estrategia Storage Fallback
| Escenario |
Estrategia |
| S3 no disponible |
Fallback automatico a R2 |
| R2 no disponible |
Fallback a MinIO local |
| Todos fallan |
Encolar upload para retry posterior |
| Cuota excedida |
Rechazar con mensaje claro al usuario |
Multi-region
- Primary: us-east-1 (S3)
- Failover: eu-west-1 (R2 o S3 EU)
- Replicacion: Asincrona cada 5 minutos para archivos criticos
Configuracion Failover
const storageProviders = [
{ name: 's3', priority: 1, region: 'us-east-1' },
{ name: 'r2', priority: 2 },
{ name: 'minio', priority: 3, endpoint: 'localhost:9000' }
];
Circuit Breaker
- Umbral apertura: 3 fallos consecutivos
- Timeout semi-abierto: 30 segundos
- Fallback: Siguiente provider en prioridad
Multi-tenant
- Credenciales: Por tenant (cada tenant puede tener su propio bucket/proveedor)
- Configuracion: Por tenant via tenant_config
- Aislamiento: Prefijo tenant_id en todas las operaciones (path: /{tenant_id}/...)
Testing
Sandbox/Test Mode
- MinIO local para desarrollo
- Buckets de prueba separados de produccion
- Fixtures disponibles para testing unitario
Monitoreo
| Metrica |
Descripcion |
Alerta |
| Latencia |
Tiempo de respuesta |
>2s |
| Errores |
Tasa de errores |
>1% |
| Disponibilidad |
Uptime del servicio |
<99.9% |
Referencias
- Modulo relacionado: SAAS-011-storage.md
Ultima actualizacion: 2026-01-10
Version: 1.0.0