使用 DynamoDB 生存时间 (TTL) - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 DynamoDB 生存时间 (TTL)

使用 TTL 时,大部分艰巨的工作都是由 DynamoDB 代表您在幕后完成的。但是,您应该知道一些注意事项,以帮助您顺利地进行实施。

设置项目的 TTL 属性的格式

在表上启用 TTL 时,DynamoDB 要求您标识此服务在确定项目是否符合过期条件时将查找的特定属性名称。此外,进一步的要求可确保后台 TTL 进程使用 TTL 属性的值。要让项目符合通过 TTL 过期的资格:

  • 项目必须包含在表上启用 TTL 时指定的属性。例如,如果您为表指定将属性名称用作 expdate TTL 属性,但项目没有具有该名称的属性,则 TTL 进程将忽略该项目。

  • TTL 属性的值必须是 Number 数据类型。例如,如果为表指定使用属性名称 expdate 作为 TTL 属性,但项目的属性是 String 数据类型,则 TTL 进程将忽略该项目。

  • TTL 属性的值必须是以为单位的 Unix 纪元时间格式的时间戳。如果您使用任何其他格式,TTL 进程将忽略该项目。例如,如果您将此属性的值设置为 1645119622,即,2022 年 2 月 17 日星期四 17:40:22(格林威治标准时间),则该项目将在此时间之后过期。有关用于测试值的可视 Web 表单,并查看不同语言纪元时间格式的代码示例,请参阅纪元转换器

  • TTL 属性值必须是过期时间不超过过去五年的日期时间戳。例如,如果您将此属性的值设置为 1171734022,即,2007 年 2 月 17 日 17:40:22(格林威治标准时间)和五年以上。结果是,TTL 进程不会使该项目过期。

使用说明

使用 TTL 时,请注意以下事项:

  • 启用、禁用或更改表上的 TTL 设置可能需要大约一个小时才能传播设置,并允许执行任何进一步的 TTL 相关操作。

  • 您无法重新配置 TTL 以查找其他属性。您必须先禁用 TTL,然后再使用新属性重新启用 TTL。

  • 使用 AWS CloudFormation 时,您可以在创建 DynamoDB 表时启用 TTL。有关更多信息,请参阅 AWS CloudFormation 用户指南

  • 您可以使用 AWS Identity and Access Management (IAM) 策略来防止对项目或 TTL 配置的 TTL 属性进行未经授权的更新。如果您的现有 IAM 策略仅允许访问指定的操作,请确保更新您的策略,以允许需要在表中启用或禁用 TTL 的角色执行 dynamodb:UpdateTimeToLive。有关更多信息,请参阅为 Amazon DynamoDB 使用基于身份的策略(IAM 策略)

  • 考虑是否需要通过 DynamoDB Streams 对已删除项目执行任何后期处理,例如,将项目存档到 Amazon S3 数据湖。TTL 删除的流记录标记为系统删除和正常删除,您可以使用 AWS Lambda 函数筛选系统删除。有关添加到流记录的更多信息,请参阅 DynamoDB Streams 和生存时间

  • 如果需要考虑数据恢复问题,我们建议您备份表。

TTL 问题故障排除

如果 DynamoDB TTL 无法正常工作,请检查以下内容:

  • 确认您已在表中启用 TTL,并且将为 TTL 选定的属性名称设置为代码正在写入项目的内容。您可以在 DynamoDB 控制台上的表的 Overview (概述) 选项卡上确认此信息。

  • 查看 DynamoDB 控制台的 Metrics (指标) 选项卡上的 Amazon CloudWatch 指标,以确认 TTL 正在按照您的预期删除项目。

  • 确认 TTL 属性值的格式是否正确。有关更多信息,请参阅设置项目的 TTL 属性的格式