我正在尝试将 JSON 文件从 AWS Lambda 保存到 S3。
(更准确地说:我想创建一个新文件 'supertest.json'
,其中包含 S3 存储桶 'gpiocontroll-XYZ'
中的“数据”)
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 函数都是通过使用 ( event, context, callback )
参数调用 exports.handler
开始的。这些包括事件
或操作的数据、一些额外的上下文
,以及成功/失败的回调
。
这是您要查找的内容:
更新:根据 @dashmug’s 将 S3.putObject
Promise 包装函数更改为 S3.putObject().promise()
推荐。
Requires AWS SDK for JavaScript (v2.3.0 - March 31 2016 or later)
'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 函数授予您尝试访问的 S3 存储桶的 IAM 权限。在上述情况下,您的 IAM Angular 色应如下所示:
{
"Effect": "Allow",
"Action": [ "s3:PutObject" ],
"Resource": [
"arn:aws:s3:::gpiocontroll-XYZ/*"
]
}
关于javascript - 使用 node.js 将 JSON 从 AWS Lambda 保存到 AWS S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47998152/