AWS para principiantes: S3, deduplicación y URLs presignadas
Deja de construir aplicaciones de juguete. Empieza a construir sistemas de producción.
Si tu servidor es desechable, tus archivos no pueden vivir en su disco. Necesitas AWS S3. S3 es un almacenamiento de objetos. Funciona de forma independiente a tus servidores. Esto garantiza que tus archivos sobrevivan incluso si tu servidor falla o desaparece.
Así es como se construye un flujo de carga de archivos profesional:
Usa S3 Buckets y Keys Un bucket es tu contenedor. Una key es la ruta completa hacia tu archivo. S3 no tiene carpetas reales. Utiliza prefijos en una estructura plana. Puedes organizar los archivos por tipo, como
images/odocuments/, para mantener todo ordenado.Implementa la deduplicación de contenido No pagues dos veces por el mismo archivo. Utiliza el algoritmo SHA-256 para crear una huella digital única para cada archivo. Si dos usuarios suben exactamente la misma imagen, el hash será idéntico. Consulta este hash en tu base de datos antes de subirlo a S3. Si el hash ya existe, reutiliza el archivo existente.
Procesa archivos grandes mediante streams Nunca cargues un video de 200 MB en la RAM de tu servidor solo para calcular su hash. Usa streams de Node.js para procesar archivos en pequeños fragmentos. Esto mantiene tu servidor rápido y evita caídas.
Aplica límites de tamaño de archivo Una comprobación en el frontend es solo para la experiencia del usuario. No es seguridad. Debes aplicar límites de tamaño en tres capas: • En el lado del cliente para la UX. • Validación en el backend para rechazar peticiones incorrectas de forma temprana. • Condiciones de S3 mediante URLs presignadas para detener las cargas excesivas en el origen.
Usa URLs presignadas para mayor seguridad No hagas que tu bucket sea público. Mantén activada la opción "Block all public access". En su lugar, genera una URL presignada. Esto le otorga al usuario permiso temporal para subir un archivo específico. Puedes establecer un tiempo de expiración. Usa ventanas de tiempo cortas para archivos pequeños y ventanas más largas para la carga de videos pesados.
Verifica la carga Nunca confíes en el cliente. Después de una carga, usa el comando
HeadObjectpara comprobar si el archivo realmente existe en S3 y si el tamaño coincide con tus registros.
El flujo de producción:
- El cliente solicita una URL de carga.
- El backend valida el tamaño, el tipo y busca duplicados.
- El backend genera una URL presignada con alcance limitado (scoped).
- El cliente sube el archivo directamente a S3.
- El backend confirma que el archivo existe mediante
HeadObject.
Construye sistemas que sean seguros por defecto.
Fuente: https://dev.to/surajrkhonde/aws-for-newbies-episode-2-3jg5
