var aws = require('aws-sdk');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
var bucket = 'ashish-3245';
var acl = 'public-read';
var s3prefix = 'DeepSecurityEvents/';
var ext = '.json';
exports.handler = async(event, context) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
const message = event.Records[0].Sns.Message;
console.log("records", message);
var timestamp = event.Records[0].Sns.Timestamp;
var date = getFormattedDate(new Date(timestamp));
console.log('from date', date);
//add 5 random digits to prevent overwriting an existing file if two messages are received at the same ms.
var random5digits = Math.floor(Math.random() * 90000) 10000;
//ie. DeepSecurityEvents/2016/07/20/2016-07-20T15:30:00.000Z12345.json
var filename = s3prefix date '/' timestamp random5digits ext;
putObjectToS3(message, filename);
console.log('From S3:', message);
console.log(filename);
};
function getFormattedDate(d) {
//returns yyyy/MM/dd
return d.getFullYear() '/' twoDigits(d.getMonth() 1) '/' twoDigits(d.getDate());
}
function twoDigits(n) {
return n < 10 ? '0' n : n;
}
function putObjectToS3(message, filename) {
console.log('From async:', message);
var params = { Bucket: bucket, Key: filename, ACL: acl, Body: message };
s3.putObject(params, function(err, message) {
console.log('p SNS:', message);
if (err) console.log(err, err.stack);
else console.log(message);
context.done();
});
}
輸出
kkk
Response
null
Function Logs
START RequestId: 8d6f4394-9b87-49e5-bbec-ad88cf16813e Version: $LATEST
2021-11-21T11:22:16.379Z 8d6f4394-9b87-49e5-bbec-ad88cf16813e INFO records omly message
2021-11-21T11:22:16.380Z 8d6f4394-9b87-49e5-bbec-ad88cf16813e INFO from date 1970/01/01
2021-11-21T11:22:16.380Z 8d6f4394-9b87-49e5-bbec-ad88cf16813e INFO From async: omly message
2021-11-21T11:22:16.492Z 8d6f4394-9b87-49e5-bbec-ad88cf16813e INFO From S3: omly message
2021-11-21T11:22:16.505Z 8d6f4394-9b87-49e5-bbec-ad88cf16813e INFO DeepSecurityEvents/1970/01/01/1970-01-01T00:00:00.000Z99418.json
END RequestId: 8d6f4394-9b87-49e5-bbec-ad88cf16813e
REPORT RequestId: 8d6f4394-9b87-49e5-bbec-ad88cf16813e Duration: 148.84 ms Billed Duration: 149 ms Memory Size: 400 MB Max Memory Used: 78 MB Init Duration: 415.78 ms
Request ID
8d6f4394-9b87-49e5-bbec-ad88cf16813e
uj5u.com熱心網友回復:
您正在使用async handler,因此您的函式在您的代碼實際運行之前完成。您可以Promise按照檔案中所示將代碼包裝在 a中以解決該問題。
uj5u.com熱心網友回復:
您的處理程式是異步的,因此為了其他異步呼叫(例如putObject:)能夠完成您:
- 回傳一個包裝你的代碼的承諾(見@Marcin 的回答)
- 使用
async-await模式。為此,您必須執行以下操作:
重構putObjectToS3以回傳 a promise:
function putObjectToS3(message, filename) {
console.log('From async:', message);
const params = { Bucket: bucket, Key: filename, ACL: acl, Body: message };
try {
return s3.putObject(params).promise();
} catch(e) {
console.err(e);
}
}
在lambda處理程式,我們必須呼叫putObjectToS3與await以及:
const result = await putObjectToS3(message, filename);
console.log('p SNS:', result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/363897.html
標籤:节点.js 亚马逊网络服务 功能 亚马逊-s3 aws-lambda
上一篇:在階躍函式圖中添加水平線
