在AWS Lambda函数代码中添加防止重复触发的措施,例如使用DynamoDB或S3存储上一次触发时间,并检查是否已经达到所需的等待时间。
以下是使用DynamoDB实现防止重复触发的示例代码(Node.js):
const AWS = require('aws-sdk');
const dynamoDB = new AWS.DynamoDB.DocumentClient();
exports.myFunction = async (event) => {
const now = new Date().getTime();
const lastTriggeredTime = await getLastTriggeredTimeFromDynamoDB();
if (lastTriggeredTime && now - lastTriggeredTime < 60000) { // less than 1 minute since last trigger
console.log('Already triggered within the past minute, skipping...');
return;
}
// Do the actual function logic here...
await saveLastTriggeredTimeToDynamoDB(now);
};
function getLastTriggeredTimeFromDynamoDB() {
return dynamoDB.get({ TableName: 'MyTable', Key: { id: 'lastTriggeredTime' } }).promise()
.then(res => res.Item && res.Item.time);
}
function saveLastTriggeredTimeToDynamoDB(time) {
return dynamoDB.update({
TableName: 'MyTable',
Key: { id: 'lastTriggeredTime' },
UpdateExpression: 'set #t = :time',
ExpressionAttributeNames: { '#t': 'time' },
ExpressionAttributeValues: { ':time': time }
}).promise();
}
在以上示例中,我们创建了一个名为“lastTriggeredTime”的DynamoDB条目,并使用getLastTriggeredTimeFromDynamoDB()
函数获取上一次触发的时间戳。我们还使用saveLastTriggeredTimeToDynamoDB()
函数将当前时间戳保存到DynamoDB中。
在myFunction
函数中,我们首先获取当前时间戳,并检查上一次触发距离现在是否还不到1分钟。如果是,则不执行函数逻辑。否则,执行函数逻辑并将当前时间戳保存到DynamoDB中。这样,我们就可以防止AWS Lambda函数重复触发了。