Es más eficiente permitir que el cliente (el navegador o la aplicación móvil) cargue directamente a un bucket de S3 sin pasar por el código del servidor principal. Una forma de hacerlo:
- Crea un cubo S3 para cargas. Restrinja el acceso a un rol específico de IAM.
- En el código del servidor, cree una URL firmada para HTTP PUT utilizando las credenciales de IAM. El SDK de AWS S3 Node.js proporciona esta API.
- Proporcione esta URL firmada al cliente cuando el cliente solicite cargar en una llamada API.
- Deje que el cliente realice el PUT HTTP a la URL firmada. Durante esta carga, el cliente asume temporalmente el rol de IAM y puede escribir en el depósito.
- Configure un AWS Lambda para escuchar eventos S3 en el bucket. Cuando finalice la carga del archivo, envíe un mensaje al código del servidor principal con la ruta.
- El servidor principal puede almacenar la ruta del archivo en MongoDB, o cualquier mecanismo que desee.
- Alternativamente, el Lambda podría hacerle la tienda a MongoDB.