'use strict'; var https = require('http'); var aws = require('aws-sdk'); var fs = require('fs'); aws.config.update({ accessKeyId: 'id', secretAccessKey: 'key', region: 'ap-northeast-1' }); var s3bucket = new aws.S3(); var bucketName = "bukcetName" exports.handler = (event, context, callback) => { https.get("URL.jpg", function(res, body){ body = new Buffer(res.body, 'binary'); var params = { Bucket:bucketName, Key: "testLambda", Body: body, ACL: 'public-read' }; s3bucket.upload(params, function(err, data) { context.done(null, 'Finished UploadObjectOnS3'); }); }); };Pasarela API ---> lambda
quiero descargar desde URL en lambda y ese contenido poner S3.
No puedo obtener datos binarios de la URL, pero puedo poner cualquier dato en cualquier directorio en S3, gracias, ayuda.
He hecho algunos cambios en tu código para que funcione mejor.
-No necesitas la 'fs'.
-El método correcto es 'putObject' en lugar de 'upload'.
¡Gracias!
'use strict'; var AWS = require('aws-sdk'); var s3 = new AWS.S3(); var http = require('http'); aws.config.update({ accessKeyId: 'id', secretAccessKey: 'key', region: 'ap-northeast-1' }); var s3bucket = new AWS.S3(); var bucketName = "bukcetName"; exports.handler = (event, context, callback) => { http.get("URL.jpg", function(res){ var imageData = ''; res.setEncoding('binary'); res.on('data', function(chunk){ imageData += chunk; }); res.on('end', function(){ var params = { Bucket: bucketName, Key: "testLambda", Body: new Buffer(imageData, 'binary'), ACL: 'public-read' }; s3.putObject(params, function(err, data) { if (err) console.log(err, err.stack); else console.log(data); context.done(null, 'Finished UploadObjectOnS3'); }); }); }); };