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

回到顶部