You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动按创建时间每2个月删除DynamoDB中的记录?

自动化实现DynamoDB记录创建后2个月自动删除的方案

要实现记录创建后每2个月自动删除,核心是自动给每条记录设置TTL时间戳,以下是几种实用的自动化方案:

方案1:写入数据时直接计算TTL(最推荐)

在应用层写入DynamoDB的时候,直接计算当前时间加2个月的秒级时间戳,作为TTL字段的值存入。这种方式最直接高效,不需要额外的服务依赖。

示例代码(Python)

import time
from datetime import datetime, timedelta

# 计算2个月后的秒级时间戳(按60天近似,或用更精确的月份计算)
two_months_later = datetime.now() + timedelta(days=60)
ttl_timestamp = int(two_months_later.timestamp())

# 构造写入DynamoDB的项
item = {
    'item_id': 'unique-item-id',
    'content': 'your-data-content',
    'expire_at': ttl_timestamp  # 这个字段需要在DynamoDB表中开启TTL功能
}

# 执行写入操作(此处省略DynamoDB SDK调用代码)

前置配置

在DynamoDB控制台或通过CLI,将表中的expire_at字段设置为TTL属性,DynamoDB会自动周期性清理该字段值小于当前时间的记录。

方案2:用DynamoDB Streams + Lambda补全TTL

如果数据由其他系统写入,无法在写入时设置TTL,可以通过DynamoDB流捕获新写入的记录,再用Lambda自动计算并更新TTL字段。

步骤

  1. 给目标DynamoDB表开启DynamoDB Streams,选择捕获"新图像"(New Image)。
  2. 创建Lambda函数,将触发源配置为上述DynamoDB流。
  3. 在Lambda中解析流记录,计算TTL时间戳并更新对应记录。

示例代码(Node.js)

const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();

exports.handler = async (event) => {
    for (const record of event.Records) {
        if (record.eventName !== 'INSERT') continue;
        
        const newItem = record.dynamodb.NewImage;
        // 从流中获取记录的近似创建时间,或使用item自带的创建时间字段
        const createTimestamp = record.dynamodb.ApproximateCreationDateTime;
        const twoMonthsLater = new Date(createTimestamp * 1000);
        twoMonthsLater.setMonth(twoMonthsLater.getMonth() + 2);
        const ttlTimestamp = Math.floor(twoMonthsLater.getTime() / 1000);
        
        // 更新记录的TTL字段
        const updateParams = {
            TableName: 'your-table-name',
            Key: { item_id: newItem.item_id.S }, // 替换为你的表主键
            UpdateExpression: 'SET expire_at = :ttl',
            ExpressionAttributeValues: { ':ttl': ttlTimestamp }
        };
        
        await docClient.update(updateParams).promise();
    }
};

权限配置

确保Lambda角色拥有:

  • 读取DynamoDB流的权限
  • 更新目标DynamoDB表的权限

方案3:定期扫描补全TTL(适合存量数据)

如果有存量未设置TTL的记录,或者需要定期校验,可以用EventBridge(原CloudWatch Events)触发Lambda,定期扫描表并补全TTL字段。

步骤

  1. 在EventBridge中创建定时规则(比如每天执行一次)。
  2. 关联Lambda函数,函数逻辑为扫描表中未设置expire_at的记录,计算创建时间+2个月的TTL并更新。

注意事项

  • 扫描大表时建议用分段扫描(Paginate)避免超时
  • 这种方式效率低于前两种,仅作为补充方案

关键注意点

  • TTL时间戳必须是秒级(不是毫秒),否则DynamoDB无法识别
  • DynamoDB的TTL清理不是实时的,一般会在24-48小时内完成,大部分场景下几小时内即可处理
  • 若使用月份计算,注意跨月和闰年问题,可根据业务需求选择按60天近似或精确计算月份

内容的提问来源于stack exchange,提问作者user20986502

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:25:23