Lambda: Node: S3 Upload -间歇工作



我使用下面的代码使用AWS Lambda将日志文件写入AWS S3。它有时有效,但其他时候不行(50%的成功率),我不明白为什么。有人能帮忙吗?

const AWS = require('aws-sdk')
const s3 = new AWS.S3()
exports.handler = async (event) => {
let key = 'log.' + Date.now() + '.txt'
let data = 'How are you?'
put_object('test', key, data).then((e) => { console.log(e) })
}
let put_object = async (bucket, file, data) => {
return await new Promise((resolve, reject) => {
const params = {
Body: data,
Bucket: bucket,
Key: file,
ACL: "public-read",
ContentType: "text/html"
}
s3.putObject(params, (err, results) => {
if (err) reject(err);
else resolve(results);
})
})
}

编辑....................

多亏了@steadweb,这个功能是完全可靠的。

const AWS = require('aws-sdk')
const s3 = new AWS.S3()
exports.handler = async (event) => {
let key = 'log.' + Date.now() + '.txt'
let data = 'How are you?'
await put_object('test', key, data).then((e) => { console.log(e) })
}
let put_object = async (bucket, file, data) => {
return await new Promise((resolve, reject) => {
const params = {
Body: data,
Bucket: bucket,
Key: file,
ACL: "public-read",
ContentType: "text/html"
}
s3.putObject(params, (err, results) => {
if (err) reject(err);
else resolve(results);
})
})
}

很有可能,你的lambda在你的异步调用完成之前就停止了

您需要将await呼叫put_object以使其成功完成。如下

await put_object('test', key, data);

最新更新