การอัปเดตตาราง DynamoDB โดยใช้ Lambda
ฉันพยายามใช้ฟังก์ชัน Lambda โดยใช้เป็นทริกเกอร์ของMODIFYเหตุการณ์บนตาราง DynamoDB ทริกเกอร์นี้จะถูกใช้เพื่อแก้ไขตารางเพิ่มเติมตามการคำนวณที่ดำเนินการในรายการใหม่ แต่เนื่องจากนี่จะเป็นเหตุการณ์ 'MODIFY' มันจะทำให้แลมด้าอีกครั้งซึ่งอาจเริ่มต้นของทริกเกอร์ฟังก์ชันแลมด้าที่ไม่มีที่สิ้นสุด
จะหยุดแลมด้าไม่ให้ถูกทริกเกอร์ได้อย่างไร?
var AWS = require('aws-sdk');
// extra
const docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event , context , callback) => {
// TODO implement
event.Records.forEach((record) => {
console.log('Stream record: ', JSON.stringify(record, null, 2));
// logic to find insert type / modify type
if(record.eventName == 'MODIFY'){
// extract student id, and marks from event itself (save I/O)
console.log("Printing new image values",JSON.stringify(record.dynamodb.NewImage,null,2));
// modify the same record once new value is calculated
//############# method to modify /update dynamo db #################
//############# end code ###############
}
});
console.log(event);
const response = {
statusCode: 200,
body: JSON.stringify(event),
};
return response;
};
นี่คือรหัสที่ฉันใช้ในแลมบ์ดาซึ่งถูกเรียกโดยเหตุการณ์ dynamodb
คำตอบ
วิธีแก้ไขง่ายๆคือแสดงว่า Lambda ไม่ต้องแก้ไขบันทึกอีกต่อไป
โซลูชันนี้ขึ้นอยู่กับกรณีการใช้งานจริงของคุณและหากคุณสามารถบันทึกเงื่อนไขบางประการที่ไม่ควรประมวลผลบันทึกปัจจุบันอีกต่อไป
บางครั้งอาจเป็นคุณสมบัติง่ายๆเช่น
- ประมวลผล = จริง
- LastProcessTime = 1602232746
บันทึกลงในบันทึกโดยตรง
ชำระเงินการสนทนาอื่น ๆ เกี่ยวกับเรื่องนี้ด้วย
https://www.reddit.com/r/aws/comments/7cvqsy/is_it_an_antipattern_to_write_to_dynamodb_from_a/
สตรีม DynamoDB - เขียนข้อมูลกลับลงในตาราง