DynamoDB 내보내기 — 특정 시점 복구가 활성화되지 않음
요약 — 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은 이 예외를 일으키지 않고InvalidExportTimeException으로 실패합니다. 기간은 여러분이 설정한 복구 기간(RecoveryPeriodInDays, 1~35일)을 포괄하며, PITR을 켠 시점 이전으로는 절대 거슬러 올라가지 않습니다.
어떻게 해결하는가
- 원본 테이블에서 PITR을 활성화하세요 —
PointInTimeRecoveryEnabled: true로UpdateContinuousBackups를 호출하거나, 콘솔의 Backups에서 토글하세요. - PITR이 켜졌는지 확인하세요 —
DescribeContinuousBackups가PointInTimeRecoveryStatus: ENABLED를 보고해야 합니다. (PITR이 꺼져 있어도 항상ENABLED인ContinuousBackupsStatus와 혼동하지 마세요.) 그 순간부터 기간 안의 어느 시점이든 내보낼 수 있습니다. 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 백업 & 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
위에 링크된 공식 AWS 문서를 기준으로 2026-07-13에 마지막으로 확인했습니다.
2026-07-26에 boto3 1.43.56으로 us-east-1의 실제 DynamoDB 서비스에 대해 재현했습니다 — 위 출력은 그대로 옮긴 것입니다.