Estoy tratando de usar la imagen aws s3 en el nodo lambda js pero arroja un error "no existe tal archivo o directorio". Pero he puesto esa imagen como pública y todos los permisos están concedidos.
fs = require('fs'); exports.handler = function( event, context ) { var img = fs.readFileSync('https://s3-us-west-2.amazonaws.com/php-7/pic_6.png'); res.writeHead(200, {'Content-Type': 'image/png' }); res.end(img, 'binary'); };fs es el módulo central del sistema de archivos del nodo js. Es para escribir y leer archivos en la máquina local. Por eso te da ese error.
Hay varias cosas mal con su código.
fs es un módulo central que se usa para operaciones con archivos y no se puede usar para acceder a S3.
Parece que está usando el código express.js en su ejemplo. En lambda, no hay una res integrada definida (a menos que la defina usted mismo) que pueda usar para enviar una respuesta.
Debe usar los métodos en context o el nuevo mecanismo de callback de llamada. Los métodos de contexto se utilizan en la versión anterior del nodo lambda (0.10.42). Debería usar la versión de nodo más nueva (4.3.2 o 6.10) que devuelve la respuesta usando el parámetro de devolución de llamada.
Parece que también está utilizando la puerta de enlace API, por lo que, suponiendo eso, le daré algunas sugerencias. Si el cliente necesita acceso al objeto S3, estas son algunas de sus opciones:
Me gusta el enfoque de URL prefirmada. Creo que deberías revisar eso. También puede consultar la documentación de AWS lambda
Para obtener un archivo de S3, debe usar la ruta que le proporciona S3. La ruta base es https://s3.amazonaws.com/ {your-bucket-name}/{your-file-name} .
En su código, debe reemplazar la siguiente línea:
var img = fs.readFileSync(' https://s3.amazonaws.com/ {nombre-de-su-depósito}/pic_6.png');
Si no tiene un depósito, debe crear uno para otorgar permisos.