使用 Lambda 更新 DynamoDB table
Updating DynamoDB table using a Lambda
我试图在 DynamoDB table 上实现一个基于作为 MODIFY
事件触发器的 Lambda 函数。此触发器用于根据对新条目执行的计算进一步修改 table。但由于这也是一个 'MODIFY' 事件,它会再次触发 lambda,这可能会开始无限触发 lambda 函数。
如何阻止 lambda 被无限触发?
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;
};
这是我在 lambda 中使用的代码,由 dynamodb 事件触发
一个简单的解决方案是在不再更改记录时指示 Lambda
此解决方案取决于您的实际用例,如果您可以保存某个条件,则不应再处理当前记录
有时可以是简单的属性比如
- 已处理 = 真
- 上次处理时间 = 1602232746
直接保存到记录中
还可以查看有关此问题的其他讨论
https://www.reddit.com/r/aws/comments/7cvqsy/is_it_an_antipattern_to_write_to_dynamodb_from_a/
我试图在 DynamoDB table 上实现一个基于作为 MODIFY
事件触发器的 Lambda 函数。此触发器用于根据对新条目执行的计算进一步修改 table。但由于这也是一个 'MODIFY' 事件,它会再次触发 lambda,这可能会开始无限触发 lambda 函数。
如何阻止 lambda 被无限触发?
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;
};
这是我在 lambda 中使用的代码,由 dynamodb 事件触发
一个简单的解决方案是在不再更改记录时指示 Lambda
此解决方案取决于您的实际用例,如果您可以保存某个条件,则不应再处理当前记录
有时可以是简单的属性比如
- 已处理 = 真
- 上次处理时间 = 1602232746
直接保存到记录中
还可以查看有关此问题的其他讨论
https://www.reddit.com/r/aws/comments/7cvqsy/is_it_an_antipattern_to_write_to_dynamodb_from_a/