DynamoDB のエクスポート — 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 を設定していないテーブル(または別リージョンのレプリカ)を指しています。
  • 似ているが別のエラー — PITR ウィンドウ外の ExportTime は、この例外を発生させません。InvalidExportTimeException で失敗します。ウィンドウは設定したリカバリ期間(RecoveryPeriodInDays、1〜35日)をカバーし、PITR を有効にした瞬間より前には決して遡れません。

修正方法

  1. ソーステーブルで PITR を有効にしますUpdateContinuousBackupsPointInTimeRecoveryEnabled: true を指定するか、コンソールの Backups で切り替えます。
  2. PITR がオンであることを確認しますDescribeContinuousBackupsPointInTimeRecoveryStatus: ENABLED を報告するはずです。(PITR がオフでも常に ENABLED になる ContinuousBackupsStatus と混同しないでください。)その瞬間以降、ウィンドウ内の任意の時点をエクスポートできます。
  3. ExportTime をウィンドウ内に保ちます — 設定したリカバリ期間(最大35日)以内で、かつ PITR を有効にした瞬間以降にします。ウィンドウ外だと InvalidExportTimeException になります。省略すると現在時点をエクスポートします。
  4. IAM 権限を確認します — 呼び出し元には dynamodb:ExportTableToPointInTime に加えて、宛先バケットに対する s3:PutObjects3:PutObjectAcls3:AbortMultipartUpload が必要です。
  5. エクスポートリクエストで正しいテーブル 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

エラー処理に持ち帰る価値のある点が2つあります。SDK の生のメッセージは上の一文だけです — もっと長い An error occurred (PointInTimeRecoveryUnavailableException) when calling the ExportTableToPointInTime operation: … という形は、AWS CLI と botocore のラッパーが文脈を足したものなので、どちらが見えるかは呼び出し方次第です。もう1つ、リクエストは S3 に到達すらしていません。この実行ではバケットが存在しないのに、失敗の内容は PITR についてです。つまりバケット名のタイプミスは、PITR がオンになるまで表面化しません。

関連するエラー

参考資料

最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。

2026-07-26 に us-east-1 の実稼働 DynamoDB サービスに対し boto3 1.43.56 で再現しました — 上記の出力はそのままの逐語です。

Console なしで DynamoDB を扱う

DynamoDB では実行できない本物の SQL(JOINs、GROUP BY、集計)を実行する高速な DynamoDB デスクトップクライアント。ビジュアル編集と、あなた自身の Bedrock キーで動く AI エージェントを備えています。

30日間無料トライアル、クレジットカード不要 — その後は期限のない Free プラン。