DynamoDB でテーブルのエクスポートをリクエストする
DynamoDB テーブルのエクスポートを使用すると、テーブルデータを Amazon S3 バケットにエクスポートできます。これにより、Athena、AWS Glue、Amazon SageMaker AI、Amazon EMR、および AWS Lake Formation などの他の AWS のサービスを使用して、データに対して分析や複雑なクエリの実行が許可されます。テーブルのエクスポートをリクエストするには、AWS Management Console、AWS CLI、または DynamoDB API のいずれかを使用します。
注記
Amazon S3 のリクエスタ支払いバケットはサポートされていません。
DynamoDB はフルエクスポートと増分エクスポートの両方をサポートしています。
-
フルエクスポートを使用すると、テーブルの完全なスナップショットをポイントインタイムリカバリ (PITR) ウィンドウ内の任意の時点から Amazon S3 バケットにエクスポートできます。
-
増分エクスポートでは、指定した期間に変更、更新、または削除された DynamoDB テーブルのデータを、PITR ウィンドウ内で Amazon S3 バケットにエクスポートできます。
トピック
前提条件
PITR を有効にする
S3 へのエクスポート機能を使用するには、テーブルで PITR を有効にする必要があります。PITR を有効にする方法の詳細については、「ポイントインタイムリカバリ」を参照してください。PITR が有効になっていないテーブルのエクスポートをリクエストすると、「ExportTableToPointInTime
オペレーションの呼び出し時にエラーが発生しました (PointInTimeRecoveryUnavailableException): テーブル 'my-dynamodb-table' のポイントインタイムリカバリが有効になっていません」という例外メッセージが表示されてリクエストが失敗します。
S3 アクセス権限の設定
テーブルデータは、書き込みアクセス許可のある任意の Amazon S3 バケットにエクスポートできます。エクスポート先のバケットは、ソーステーブル所有者と同じ AWS リージョンに存在する必要はなく、所有者が同じである必要もありません。AWS Identity and Access Management (IAM) ポリシーでは、S3 アクション (s3:AbortMultipartUpload
、s3:PutObject
、およびs3:PutObjectAcl
) と DynamoDB エクスポートアクション (dynamodb:ExportTableToPointInTime
) を実行できるようにする必要があります。S3 バケットへのエクスポートを実行するアクセス許可をユーザーに付与するポリシーの例を次に示します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowDynamoDBExportAction", "Effect": "Allow", "Action": "dynamodb:ExportTableToPointInTime", "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table" }, { "Sid": "amzn-s3-demo-bucket-AllowWrites", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::your-bucket/*" } ] }
別のアカウントにある Amazon S3 バケットに書き込む必要がある場合や書き込みアクセス許可がない場合、Amazon S3 バケット所有者は、DynamoDB からバケットへのエクスポートをユーザーに許可するバケットポリシーを追加する必要があります。エクスポート先の Amazon S3 バケットのポリシー例を次に示します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] }
エクスポートの進行中にこれらの権限を取り消すと、ファイルの一部だけがエクスポートされます。
注記
エクスポート先のテーブルまたはバケットがカスタマーマネージドキーで暗号化されている場合、その KMS キーのポリシーは、これを使用する許可を DynamoDB に与える必要があります。この権限は、エクスポートジョブをトリガーする IAM ユーザー/ロールを通じて付与されます。ベストプラクティスを含む暗号化の詳細については、「Amazon DynamoDB が AWS KMS を使用する方法」および「カスタム KMS キーの使用
AWS Management Console を使用してエクスポートをリクエストする
DynamoDB コンソールを使用して、MusicCollection
という既存のテーブルをエクスポートする方法を次の例に示します。
注記
この手順は、ポイントインタイムリカバリを有効にしていることを前提としています。これを MusicCollection
テーブルに対して有効にするには、[Overview] (概要) タブにある [Table details] (テーブルの詳細) セクションの [Point-in-time recovery] (ポイントインタイムリカバリ) で [Enable] (有効化) を選択します。
テーブルのエクスポートをリクエストするには
AWS Management Console にサインインして DynamoDB コンソール (https://console.aws.amazon.com/dynamodb/
) を開きます。 -
コンソールの左側のナビゲーションペインで、[S3 へのエクスポート] を選択します。
-
[S3 にエクスポート] ボタンを選択します。
-
コピー元テーブルとエクスポート先の S3 バケットを選択します。エクスポート先のバケットがお客様のアカウントによって所有されている場合は、[Browse S3] (S3 を参照) ボタンをクリックしてバケットを検索します。そうでない場合は、
s3://
の形式でバケットの URL を入力します。ここで、bucketname
/prefix
format.prefix
は、エクスポート先のバケットを整理するのに役立つオプションのフォルダです。 -
[フルエクスポート] または [増分エクスポート] を選択します。フルエクスポートでは、指定した時点のテーブルのフルテーブルスナップショットが出力されます。増分エクスポートでは、指定したエクスポート期間中にテーブルに加えられた変更が出力されます。出力は、エクスポート期間における項目の最終状態のみを含むように圧縮されます。同じエクスポート期間内に複数の更新があったとしても、項目はエクスポートに 1 回しか表示されません。
-
[エクスポート] を選択して開始します。
エクスポートされたデータは、トランザクションとして一貫しません。トランザクションオペレーションは、2 つのエクスポート出力間で分断される可能性があります。トランザクションオペレーションで変更された項目のサブセットはエクスポートに反映される一方で、同じトランザクションで変更された別のサブセットは同じエクスポートリクエストに反映されない場合があります。ただし、最終的にエクスポートの一貫性は保たれます。エクスポート中にトランザクションが分断された場合、残りのトランザクションは直後のエクスポートに (重複することなく) 含まれます。エクスポートに使用される時間は内部システムクロックに基づいており、変動する可能性はアプリケーションのローカルクロックの 1 分のみです。
AWS Management Console で過去のエクスポートの詳細を取得する
過去に実行したエクスポートタスクに関する情報は、ナビゲーションサイドバーで [S3 へのエクスポート] セクションを選択して確認できます。このセクションには、過去 90 日間に作成したエクスポートの一覧が表示されます。[エクスポート] タブにリストされているタスクの ARN を選択すると、エクスポートに関する情報 (選択した詳細設定など) を取得できます。エクスポートタスクのメタデータは 90 日後に期限切れになり、それより古いジョブはこのリストに表示されなくなりますが、S3 バケット内のオブジェクトは、バケットポリシーで許可されている限り維持されます。エクスポート中に S3 バケットに作成されたオブジェクトが DynamoDB によって削除されることはありません。
AWS CLI を使用してエクスポートをリクエストする
以下の例は、AWS CLI を使用して、MusicCollection
という名前の既存のテーブルを ddb-export-musiccollection
という S3 バケットにエクスポートする方法を示しています。
注記
この手順は、ポイントインタイムリカバリを有効にしていることを前提としています。この機能を MusicCollection
テーブルに対して有効にするには、次のコマンドを実行します。
aws dynamodb update-continuous-backups \ --table-name MusicCollection \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=True
注記
AWS Key Management Service (AWS KMS) によって保護されたキーを使用してエクスポートを暗号化することを選択した場合、そのキーはエクスポート先 S3 バケットと同じリージョンにある必要があります。
AWS CLI で過去のエクスポートの詳細を取得する
過去に実行したエクスポートリクエストに関する情報は、list-exports
コマンドを実行して見つけることができます。このコマンドは、過去 90 日間に作成されたすべてのエクスポートのリストを返します。エクスポートタスクのメタデータは 90 日後に期限切れになり、それより古いジョブは list-exports
コマンドによって返されなくなりますが、S3 バケット内のオブジェクトは、バケットポリシーで許可されている限り維持されます。エクスポート中に S3 バケットに作成されたオブジェクトが DynamoDB によって削除されることはありません。
エクスポートのステータスは、成功または失敗するまで PENDING
となります。成功すると、ステータスは COMPLETED
に変わります。失敗すると、ステータスは FAILED
に変わり、failure_message
と failure_reason
が追加されます。
以下の例では、オプションの table-arn
パラメータを使用して、特定のテーブルのエクスポートのみを一覧表示します。
aws dynamodb list-exports \ --table-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog
詳細な構成設定など、特定のエクスポートタスクに関する詳細情報を取得するには、describe-export
コマンドを使用します。
aws dynamodb describe-export \ --export-arn arn:aws:dynamodb:us-east-1:123456789012:table/ProductCatalog/export/01234567890123-a1b2c3d4
AWS SDK を使用してエクスポートをリクエストする
これらのコードスニペットを使用して、好きな AWS SDK を使ったテーブルのエクスポートをリクエストします。
AWS SDK を使用して過去のエクスポートの詳細を取得する
これらのコードスニペットを使用して、好きな AWS SDK を使った過去のテーブルのエクスポートの詳細を取得します。