使用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