DynamoDB export — Point in time recovery is not enabled
TL;DR — 导出到 Amazon S3(ExportTableToPointInTime)要求源表上启用了时间点恢复(PITR)。如果 PITR 是关闭的,你会得到 PointInTimeRecoveryUnavailableException: Point in time recovery is not enabled for table '<name>'。启用 PITR,确认它报告为 ENABLED,然后再请求导出。
含义
An error occurred (PointInTimeRecoveryUnavailableException) when calling the
ExportTableToPointInTime operation: Point in time recovery is not enabled for
table 'my-dynamodb-table'DynamoDB 的全量与增量导出到 S3功能读取的是表的 PITR 连续备份,而不是表的实时容量。这正是它从不消耗 RCU、并且能导出恢复窗口内任意时刻表状态的原因——但它只有在 PITR 启用时才能工作。没有 PITR,就没有导出。
为什么会发生
- 这张表从来没有打开过 PITR——每张新表的
PointInTimeRecoveryStatus默认都是DISABLED。 - 表或区域搞错了——导出的
TableArn指向了一张没有配置 PITR 的表(或另一个区域中的副本)。 - 看着像、其实是另一个错误——
ExportTime落在 PITR 窗口之外不会抛出这个异常;那会以InvalidExportTimeException失败。窗口覆盖的是你配置的恢复期(RecoveryPeriodInDays,1–35 天),并且永远不会回溯到 PITR 被启用的那一刻之前。
如何修复
- 在源表上启用 PITR——用
UpdateContinuousBackups并设置PointInTimeRecoveryEnabled: true,或者在控制台的 Backups 下切换开关。 - 确认 PITR 已打开——
DescribeContinuousBackups应当报告PointInTimeRecoveryStatus: ENABLED。(别把它和ContinuousBackupsStatus搞混,后者即使 PITR 关闭也一直是ENABLED。)从那一刻起,窗口内的任意时间点都可以导出。 - 让
ExportTime落在窗口内——处于你配置的恢复期内(最多 35 天),且不早于 PITR 被启用的那一刻;超出范围你会得到InvalidExportTimeException。省略它则导出当前时间点。 - 确认 IAM 权限——调用方需要
dynamodb:ExportTableToPointInTime,外加目标桶上的s3:PutObject、s3:PutObjectAcl和s3:AbortMultipartUpload。 - 在导出请求中指向正确的表 ARN 和区域。
需要核实 S3 里实际落了什么?DynoTable 桌面应用可以浏览源表,并把同样的项目导出为 CSV、JSON 或 NDJSON,这样你就有东西可以拿来和 S3 对象做比对。
复现方法
创建一张表,让 PITR 保持关闭,然后请求导出。桶不必存在——PITR 检查会先跑:
import boto3
ddb = boto3.client('dynamodb', region_name='us-east-1')
arn = ddb.describe_table(TableName='my-table')['Table']['TableArn']
ddb.export_table_to_point_in_time(TableArn=arn, S3Bucket='any-bucket-name')实际输出:
PointInTimeRecoveryUnavailableException: Point in time recovery is not enabled for table 'my-table'
HTTP 400有两个细节值得带进你的错误处理。原始 SDK 消息就只是上面那一句——更长的 An error occurred (PointInTimeRecoveryUnavailableException) when calling the ExportTableToPointInTime operation: … 形式是 AWS CLI 和 botocore 包装时加上的上下文,所以你看到哪一种取决于你是怎么调用的。另外,这个请求从来没有到达 S3:本次运行里那个桶并不存在,可失败说的却是 PITR,所以桶名拼错要等到 PITR 打开之后才会浮出水面。
相关错误
- BackupNotFoundException——引用的按需备份 ARN 不存在。
- ResourceNotFoundException——表本身没找到。
- 学习:DynamoDB backup & PITR
参考资料
- ExportTableToPointInTime — Amazon DynamoDB API Reference
- Requesting a table export in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB data export to Amazon S3: how it works — Amazon DynamoDB Developer Guide
- Enable point-in-time recovery in DynamoDB — Amazon DynamoDB Developer Guide
- DescribeContinuousBackups — Amazon DynamoDB API Reference
最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。
2026-07-26 通过 boto3 1.43.56 针对 us-east-1 的实时 DynamoDB 服务复现——上方输出为原样照录。