将 json 上传到 s3 存储桶的 AWS Lambda 函数不起作用
AWS Lambda function to updload json to s3 bucket not working
当我运行这个函数的时候,它说成功了,但是文件不在s3 bucket中。
var AWS = require('aws-sdk');
exports.handler = (event, context, callback) => {
AWS.config.update({
region: 'us-west-2',
accessKeyId: 'xxx',
secretAccessKey: 'xxx'
});
var s3 = new AWS.S3();
s3.putObject({
Bucket: 'mybucket',
Key: 'test.json',
Body: [{test: 'test'}, {test: 'test'}],
ContentType: "application/json"
}, function(){});
context.succeed('SUCCESS');
};
NodeJs 是一种有趣的语言。
大多数语言会像这样处理您的代码
- AWS.config.update({..})
- var s3 = ..
- s3.putObject(.., 回调); (这需要时间,所以它会等到完成)
- context.succeed(..)
Node js会按照这个顺序处理。
- AWS.config.update({..})
- var s3 = ..
- s3.putObject(.., 回调); (这需要时间,所以我会进行下一步)
- context.succeed(..)
- s3.putObject(.., 回调) 已完成。我现在会打电话给回调。
- 回调(错误,恢复)。它调用带有错误的回调。因为你的程序有一个空的回调,function(){},它不会对错误做任何事情,你也不会知道它。
var AWS = require('aws-sdk');
exports.handler = (event, context, callback) => {
AWS.config.update({
region: 'us-west-2',
accessKeyId: 'xxx',
secretAccessKey: 'xxx'
});
var s3 = new AWS.S3();
s3.putObject(
{
Bucket: 'mybucket',
Key: 'test.json',
Body: [{test: 'test'}, {test: 'test'}],
ContentType: "application/json"
},
function(err, res){
if(err){
console.log(err);
}
callback(err, "processed");
});
};
^回调会告诉lambda脚本结束了。
它现在将像这样处理。
- AWS.config.update({..})
- var s3 = ..
- s3.putObject(.., 回调); (这需要时间,但没有其他步骤,所以我会等待)
- s3.putObject(.., 回调) 已完成。我现在会打电话给回调。
- 回调(错误,恢复)。它调用带有错误的回调。您将打印错误并能够调试您的程序。
- callback(err, 'processed') 将结束 lambda。
您可以使用 Q https://www.npmjs.com/package/q 或 NodeJs promise 按要求的顺序处理任务。
当我运行这个函数的时候,它说成功了,但是文件不在s3 bucket中。
var AWS = require('aws-sdk');
exports.handler = (event, context, callback) => {
AWS.config.update({
region: 'us-west-2',
accessKeyId: 'xxx',
secretAccessKey: 'xxx'
});
var s3 = new AWS.S3();
s3.putObject({
Bucket: 'mybucket',
Key: 'test.json',
Body: [{test: 'test'}, {test: 'test'}],
ContentType: "application/json"
}, function(){});
context.succeed('SUCCESS');
};
NodeJs 是一种有趣的语言。
大多数语言会像这样处理您的代码
- AWS.config.update({..})
- var s3 = ..
- s3.putObject(.., 回调); (这需要时间,所以它会等到完成)
- context.succeed(..)
Node js会按照这个顺序处理。
- AWS.config.update({..})
- var s3 = ..
- s3.putObject(.., 回调); (这需要时间,所以我会进行下一步)
- context.succeed(..)
- s3.putObject(.., 回调) 已完成。我现在会打电话给回调。
- 回调(错误,恢复)。它调用带有错误的回调。因为你的程序有一个空的回调,function(){},它不会对错误做任何事情,你也不会知道它。
var AWS = require('aws-sdk'); exports.handler = (event, context, callback) => { AWS.config.update({ region: 'us-west-2', accessKeyId: 'xxx', secretAccessKey: 'xxx' }); var s3 = new AWS.S3(); s3.putObject( { Bucket: 'mybucket', Key: 'test.json', Body: [{test: 'test'}, {test: 'test'}], ContentType: "application/json" }, function(err, res){ if(err){ console.log(err); } callback(err, "processed"); }); };
^回调会告诉lambda脚本结束了。 它现在将像这样处理。
- AWS.config.update({..})
- var s3 = ..
- s3.putObject(.., 回调); (这需要时间,但没有其他步骤,所以我会等待)
- s3.putObject(.., 回调) 已完成。我现在会打电话给回调。
- 回调(错误,恢复)。它调用带有错误的回调。您将打印错误并能够调试您的程序。
- callback(err, 'processed') 将结束 lambda。
您可以使用 Q https://www.npmjs.com/package/q 或 NodeJs promise 按要求的顺序处理任务。