【发布时间】:2021-05-13 20:52:14
【问题描述】:
我正在尝试使用 Cloud Watch 事件触发的 Lambda 删除我的 Dynamodb 表中的项目。此 lambda 扫描发电机表并删除所有过期项目。当我使用控制台中的测试事件对其进行测试时,我的代码似乎正在工作(即它删除了所有过期的项目)。但是,当使用 Cloud Watch 事件自动触发 lambda 时,它不会删除,尽管我看到 lambda 正在被触发。
exports.handler = async function () {
var params = {
TableName: TABLE_NAME
}
try {
const data = await docClient.scan(params).promise();
const items = data.Items;
if (items.length != 0) {
Promise.all(items.map(async (item) => {
const expirationDT = new Date(item.ExpiresAt);
const now = new Date();
if (now > expirationDT) {
console.log("Deleting item with otc: " + item.Otc + " and name: " + item.SecretName);
const deleteParams = {
TableName: TABLE_NAME,
Key: {
"Otc": item.Otc,
"SecretName": item.SecretName,
},
};
try {
await docClient.delete(deleteParams).promise();
} catch (err) {
console.log("The Secret was not deleted due to: ", err.message);
}
}
}))
}
} catch (err) {
console.log("The items were not able to be scanned due to : ", err.message)
}}
我知道使用 DynamoDB TTL 是一种选择,但我需要这些删除有点精确,而且 TTL 有时可能需要长达 48 小时,而且我知道我可以在检索记录时使用过滤器反击。只是想知道我的代码有什么问题。
【问题讨论】:
标签: amazon-web-services aws-lambda