使用node.js将AWS Lambda中的JSON保存到AWS S3
我试图将AWS Lambda中的JSON文件保存到S3。 (更精确地说:我想创建一个包含S3桶'gpiocontroll-XYZ'内的“数据”的新文件'supertest.json')使用node.js将AWS Lambda中的JSON保存到AWS S3
lambda函数如下:
'use strict' const aws = require('aws-sdk'); 
const s3 = new aws.S3(); 
//const fs = require('fs'); 
function saveJSONtoS3(data){ 
    console.log('SAVEJSON', data); 
    var params = { 
     Bucket: 'gpiocontroll-XYZ', // your bucket name, 
     Key: 'test.txt', // path to the object you're looking for 
     Body: data 
    } 
    s3.putObject(params, function(err, data) { 
     // Handle any error and exit 
     if (err) 
     console.log('ERROR', err); 
     else { 
      console.log('UPLOADED SUCCESS'); 
     } 
     console.log('INSIDE FUNCTION'); 
    }); 
    console.log('END') 
} 
module.exports = { 
    saveJSONtoS3 : saveJSONtoS3 
} 
上LAMBDA日志看起来像:
2017-12-27T20:04:29.382Z 255d436d-eb41-11e7-b237-1190c4f33d2d SAVEJSON {"table":[{"pin":"1","state":"aus"}]} 2017-12-27T20:04:29.402Z 255d436d-eb41-11e7-b237-1190c4f33d2d END 
END RequestId: 255d436d-eb41-11e7-b237-1190c4f33d2d 
REPORT RequestId: 255d436d-eb41-11e7-b237-1190c4f33d2d Duration: 362.29 ms Billed Duration: 400 ms  Memory Size: 128 MB Max Memory Used: 43 MB 
所以它看起来一切都很好,但s3.putObject功能只是不被触发。 Lambda和S3都在同一地区。 S3公开了IAM用户。我是否需要以某种方式登录Lambda函数?
非常感谢!
回答:
正如@dashmug说,你的例子是不 lambda函数。
你必须有exports.handler在您的文件的某处,除非在功能配置中指定。
所有的Lambda函数首先调用exports.handler,(event, context, callback)参数。这些包括event或动作的数据,一些额外的context以及成功/失败callback。
这里是你在找什么:
更新:改变S3.putObject无极包裹功能S3.putObject().promise()每@dashmug’s建议。
需要AWS SDK对JavaScript(V2.3.0 - 2016年3月31日或以后)
'use strict'; const 
    AWS = require('aws-sdk'), 
    S3 = new AWS.S3(); 
exports.handler = (event, context, callback) => { 
    console.log(`FUNCTION STARTED: ${new Date()}`); 
    S3.putObject({ 
     Bucket: 'gpiocontroll-XYZ', 
     Key: 'test.txt', 
     Body: 'stuff' 
    }) 
     .promise() 
     .then(() => console.log('UPLOAD SUCCESS')) 
     .then(() => callback(null, 'MISSION SUCCESS')) 
     .catch(e => { 
      console.error('ERROR', e); 
      callback(e); 
     }); 
}; 
注:你必须给lambda函数IAM权限的S3存储你正试图访问。在上述情况下,您的IAM角色应该是这个样子:
{     "Effect": "Allow", 
    "Action": [ "s3:PutObject" ], 
    "Resource": [ 
     "arn:aws:s3:::gpiocontroll-XYZ/*" 
    ] 
} 
以上是 使用node.js将AWS Lambda中的JSON保存到AWS S3 的全部内容, 来源链接: utcz.com/qa/267356.html

