DynamoDB でテーブルのエクスポートをリクエストする
DynamoDB テーブルのエクスポートを使用すると、テーブルデータを Amazon S3 バケットにエクスポートできます。これにより、Athena、AWS Glue、Amazon SageMaker AI、Amazon EMR、および AWS Lake Formation などの他の AWS のサービスを使用して、データに対して分析や複雑なクエリの実行が許可されます。テーブルのエクスポートをリクエストするには、AWS マネジメントコンソール、AWS CLI、または DynamoDB API のいずれかを使用します。
Amazon S3 のリクエスタ支払いバケットはサポートされていません。
DynamoDB はフルエクスポートと増分エクスポートの両方をサポートしています。
-
フルエクスポートを使用すると、テーブルの完全なスナップショットをポイントインタイムリカバリ (PITR) ウィンドウ内の任意の時点から Amazon S3 バケットにエクスポートできます。
-
増分エクスポートでは、指定した期間に変更、更新、または削除された DynamoDB テーブルのデータを、PITR ウィンドウ内で Amazon S3 バケットにエクスポートできます。
-
フィルタリングされたエクスポートでは、DynamoDB テーブルのデータ全体ではなくサブセットをエクスポートできます。フィルターは、フルエクスポートと増分エクスポートのいずれにも適用できます。フィルタリングされたエクスポートの仕組みの詳細については、「テーブルのエクスポートのフィルタリング」を参照してください。
前提条件
PITR を有効にする
S3 へのエクスポート機能を使用するには、テーブルで PITR を有効にする必要があります。PITR を有効にする方法の詳細については、「ポイントインタイムリカバリ」を参照してください。PITR が有効になっていないテーブルのエクスポートをリクエストすると、「ExportTableToPointInTime オペレーションの呼び出し時にエラーが発生しました (PointInTimeRecoveryUnavailableException): テーブル 'my-dynamodb-table' のポイントインタイムリカバリが有効になっていません」という例外メッセージが表示されてリクエストが失敗します。リクエストとエクスポートは、設定された PITR RecoveryPeriodInDays 内の特定の時点からのみ行うことができます。
S3 アクセス権限の設定
テーブルデータは、書き込みアクセス許可のある任意の Amazon S3 バケットにエクスポートできます。エクスポート先のバケットは、ソーステーブル所有者と同じ AWS リージョンに存在する必要はなく、所有者が同じである必要もありません。AWS Identity and Access Management (IAM) ポリシーでは、S3 アクション (s3:AbortMultipartUpload、s3:PutObject、およびs3:PutObjectAcl) と DynamoDB エクスポートアクション (dynamodb:ExportTableToPointInTime) を実行できるようにする必要があります。S3 バケットへのエクスポートを実行するアクセス許可をユーザーに付与するポリシーの例を次に示します。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowDynamoDBExportAction",
"Effect": "Allow",
"Action": "dynamodb:ExportTableToPointInTime",
"Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table"
},
{
"Sid": "AllowS3BucketWrites",
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
}
]
}
別のアカウントにある Amazon S3 バケットに書き込む必要がある場合や書き込みアクセス許可がない場合、Amazon S3 バケット所有者は、DynamoDB からバケットへのエクスポートをユーザーに許可するバケットポリシーを追加する必要があります。エクスポート先の Amazon S3 バケットのポリシー例を次に示します。
- JSON
-
-
{
"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/*"
}
]
}
エクスポートの進行中にこれらの権限を取り消すと、ファイルの一部だけがエクスポートされます。
ソーステーブルと同じ AWS アカウントのプリンシパルとして、ExportTableToPointInTime を呼び出す必要があります。(上記のように) 送信先バケットは別のアカウントに属していてもかまいませんが、エクスポートリクエスト自体はテーブルのアカウントから送信する必要があります。別のアカウントから行われたリクエストは、「このアクションはリソース所有者のアカウントに一致するアカウントでのみサポートされています」という ValidationException で失敗します。別のアカウントが所有するテーブルをエクスポートするには、そのテーブルのアカウントで IAM ロールを引き受け、そのロールの認証情報を使用してエクスポートリクエストを行います。そのロールが別のアカウントのバケットに書き込む場合、バケット所有者を含め、上記のようにバケットポリシーでロールに書き込みアクセスを許可します。
AWS マネジメントコンソール を使用してエクスポートをリクエストする
DynamoDB コンソールを使用して、MusicCollection という既存のテーブルをエクスポートする方法を次の例に示します。
この手順は、ポイントインタイムリカバリを有効にしていることを前提としています。これを MusicCollection テーブルに対して有効にするには、[Overview] (概要) タブにある [Table details] (テーブルの詳細) セクションの [Point-in-time recovery] (ポイントインタイムリカバリ) で [Enable] (有効化) を選択します。
テーブルのエクスポートをリクエストするには
AWS マネジメントコンソール にサインインして DynamoDB コンソール (https://console.aws.amazon.com/dynamodb/) を開きます。
-
コンソールの左側のナビゲーションペインで、[S3 へのエクスポート] を選択します。
-
[S3 にエクスポート] ボタンを選択します。
-
コピー元テーブルとエクスポート先の S3 バケットを選択します。エクスポート先のバケットがお客様のアカウントによって所有されている場合は、[Browse S3] (S3 を参照) ボタンをクリックしてバケットを検索します。そうでない場合は、s3://bucketname/prefix
format. の形式でバケットの URL を入力します。ここで、prefix は、エクスポート先のバケットを整理するのに役立つオプションのフォルダです。
-
[フルエクスポート] または [増分エクスポート] を選択します。フルエクスポートでは、指定した時点のテーブルのフルテーブルスナップショットが出力されます。増分エクスポートでは、指定したエクスポート期間中にテーブルに加えられた変更が出力されます。出力は、エクスポート期間における項目の最終状態のみを含むように圧縮されます。同じエクスポート期間内に複数の更新があったとしても、項目はエクスポートに 1 回しか表示されません。
- Full export
-
-
テーブルスナップショット全体をエクスポートする時点を選択します。これは PITR ウィンドウ内のどの時点でもかまいません。または、[現在の時刻] を選択して最新のスナップショットをエクスポートすることもできます。
-
[エクスポートされたファイル形式] で、[DynamoDB JSON] と [Amazon Ion] のどちらかを選択します。デフォルトで、テーブルは、ポイントインタイムリカバリウィンドウの復元可能な最新の時点から DynamoDB JSON 形式でエクスポートされ、Amazon S3 キー (SSE S3) を使用して暗号化されます。これらのエクスポート設定は、必要に応じて変更できます。
AWS Key Management Service (AWS KMS) によって保護されたキーを使用してエクスポートを暗号化することを選択した場合、そのキーはエクスポート先 S3 バケットと同じリージョンにある必要があります。
- Incremental export
-
-
増分データをエクスポートする [エクスポート期間] を選択します。PITR ウィンドウ内で開始時刻を選択します。エクスポート期間は 15 分~24 時間に設定する必要があります。エクスポート期間の開始時刻は期間に含まれ、終了時刻は期間に含まれません。
-
[絶対モード] または [相対モード] を選択します。
-
[絶対モード] では、指定した期間の増分データがエクスポートされます。
-
[相対モード] では、エクスポートジョブの送信時間を基準にしたエクスポート期間の差分データがエクスポートされます。
-
[エクスポートされたファイル形式] で、[DynamoDB JSON] と [Amazon Ion] のどちらかを選択します。デフォルトで、テーブルは、ポイントインタイムリカバリウィンドウの復元可能な最新の時点から DynamoDB JSON 形式でエクスポートされ、Amazon S3 キー (SSE S3) を使用して暗号化されます。これらのエクスポート設定は、必要に応じて変更できます。
AWS Key Management Service (AWS KMS) によって保護されたキーを使用してエクスポートを暗号化することを選択した場合、そのキーはエクスポート先 S3 バケットと同じリージョンにある必要があります。
-
[エクスポートビュータイプ] では、[新旧イメージ] または [新しいイメージのみ] を選択します。新しいイメージには、項目の最新の状態が表示されます。古いイメージには、指定した「開始日時」の直前の項目の状態が表示されます。デフォルト設定は [新旧イメージ] です。新旧イメージの詳細については、「増分エクスポート出力」を参照してください。
-
(オプション) テーブルデータのサブセットのみをエクスポートするには、エクスポートのフィルターを指定します。任意の属性のフィルター式、パーティションキー値で項目を選択するキー条件式、出力に含める属性を選択するプロジェクション式を指定できます。これらの式の仕組みや、処理されるデータにどのような影響を与えるかについての詳細は、「テーブルのエクスポートのフィルタリング」を参照してください。
-
[エクスポート] を選択して開始します。
エクスポートされたデータは、トランザクションとして一貫しません。トランザクションオペレーションは、2 つのエクスポート出力間で分断される可能性があります。トランザクションオペレーションで変更された項目のサブセットはエクスポートに反映される一方で、同じトランザクションで変更された別のサブセットは同じエクスポートリクエストに反映されない場合があります。ただし、最終的にエクスポートの一貫性は保たれます。エクスポート中にトランザクションが分断された場合、残りのトランザクションは直後のエクスポートに (重複することなく) 含まれます。エクスポートに使用される時間は内部システムクロックに基づいており、変動する可能性はアプリケーションのローカルクロックの 1 分のみです。
AWS マネジメントコンソール で過去のエクスポートの詳細を取得する
過去に実行したエクスポートタスクに関する情報は、ナビゲーションサイドバーで [S3 へのエクスポート] セクションを選択して確認できます。このセクションには、過去 90 日間に作成したエクスポートの一覧が表示されます。[エクスポート] タブにリストされているタスクの ARN を選択すると、エクスポートに関する情報 (選択した詳細設定など) を取得できます。エクスポートタスクのメタデータは 90 日後に期限切れになり、それより古いジョブはこのリストに表示されなくなりますが、S3 バケット内のオブジェクトは、バケットポリシーで許可されている限り維持されます。エクスポート中に S3 バケットに作成されたオブジェクトが DynamoDB によって削除されることはありません。
AWS CLI および AWS SDK を使用してエクスポートをリクエストする
以下の例は、既存のテーブルを S3 バケットにエクスポートする方法を示しています。
この手順は、ポイントインタイムリカバリを有効にしていることを前提としています。この機能を MusicCollection テーブルに対して有効にするには、次のコマンドを実行します。
aws dynamodb update-continuous-backups \
--table-name MusicCollection \
--point-in-time-recovery-specification PointInTimeRecoveryEnabled=True
フルエクスポート
- AWS CLI
-
クロスアカウントテーブルのエクスポートをリクエストする場合は、必ず --s3-bucket-owner オプションを含めます。
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:us-west-2:111122223333:table/MusicCollection \
--s3-bucket ddb-export-musiccollection-9012345678 \
--s3-prefix 2020-Nov \
--export-format DYNAMODB_JSON \
--export-time 1604632434 \
--s3-bucket-owner 9012345678 \
--s3-sse-algorithm AES256
- Python
-
import boto3
from datetime import datetime
client = boto3.client('dynamodb')
client.export_table_to_point_in_time(
TableArn='arn:aws:dynamodb:us-east-1:111122223333:table/TABLE',
ExportTime=datetime(2023, 9, 20, 12, 0, 0),
S3Bucket='bucket',
S3Prefix='prefix',
S3SseAlgorithm='AES256',
ExportFormat='DYNAMODB_JSON'
)
- Java
-
DynamoDbClient client = DynamoDbClient.create();
client.exportTableToPointInTime(b -> b
.tableArn("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE")
.exportTime(Instant.parse("2023-09-20T12:00:00Z"))
.s3Bucket("bucket")
.s3Prefix("prefix")
.s3SseAlgorithm(S3SseAlgorithm.AES256)
.exportFormat(ExportFormat.DYNAMODB_JSON));
- .NET
-
var client = new AmazonDynamoDBClient();
await client.ExportTableToPointInTimeAsync(new ExportTableToPointInTimeRequest
{
TableArn = "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
ExportTime = new DateTime(2023, 9, 20, 12, 0, 0, DateTimeKind.Utc),
S3Bucket = "bucket",
S3Prefix = "prefix",
S3SseAlgorithm = S3SseAlgorithm.AES256,
ExportFormat = ExportFormat.DYNAMODB_JSON
});
- JavaScript
-
import { DynamoDBClient, ExportTableToPointInTimeCommand } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient();
await client.send(new ExportTableToPointInTimeCommand({
TableArn: "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
ExportTime: new Date("2023-09-20T12:00:00Z"),
S3Bucket: "bucket",
S3Prefix: "prefix",
S3SseAlgorithm: "AES256",
ExportFormat: "DYNAMODB_JSON"
}));
- Go
-
cfg, _ := config.LoadDefaultConfig(context.TODO())
client := dynamodb.NewFromConfig(cfg)
exportTime := time.Date(2023, 9, 20, 12, 0, 0, 0, time.UTC)
client.ExportTableToPointInTime(context.TODO(), &dynamodb.ExportTableToPointInTimeInput{
TableArn: aws.String("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"),
ExportTime: &exportTime,
S3Bucket: aws.String("bucket"),
S3Prefix: aws.String("prefix"),
S3SseAlgorithm: types.S3SseAlgorithmAes256,
ExportFormat: types.ExportFormatDynamodbJson,
})
増分エクスポート
- AWS CLI
-
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:REGION:ACCOUNT:table/TABLENAME \
--s3-bucket BUCKET --s3-prefix PREFIX \
--incremental-export-specification ExportFromTime=1693569600,ExportToTime=1693656000,ExportViewType=NEW_AND_OLD_IMAGES \
--export-type INCREMENTAL_EXPORT
- Python
-
import boto3
from datetime import datetime
client = boto3.client('dynamodb')
client.export_table_to_point_in_time(
TableArn='arn:aws:dynamodb:us-east-1:111122223333:table/TABLE',
IncrementalExportSpecification={
'ExportFromTime': datetime(2023, 9, 20, 12, 0, 0),
'ExportToTime': datetime(2023, 9, 20, 13, 0, 0),
'ExportViewType': 'NEW_AND_OLD_IMAGES'
},
ExportType='INCREMENTAL_EXPORT',
S3Bucket='bucket',
S3Prefix='prefix',
S3SseAlgorithm='AES256',
ExportFormat='DYNAMODB_JSON'
)
- Java
-
DynamoDbClient client = DynamoDbClient.create();
client.exportTableToPointInTime(b -> b
.tableArn("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE")
.exportType(ExportType.INCREMENTAL_EXPORT)
.incrementalExportSpecification(i -> i
.exportFromTime(Instant.parse("2023-09-20T12:00:00Z"))
.exportToTime(Instant.parse("2023-09-20T13:00:00Z"))
.exportViewType(ExportViewType.NEW_AND_OLD_IMAGES))
.s3Bucket("bucket")
.s3Prefix("prefix")
.s3SseAlgorithm(S3SseAlgorithm.AES256)
.exportFormat(ExportFormat.DYNAMODB_JSON));
- .NET
-
var client = new AmazonDynamoDBClient();
await client.ExportTableToPointInTimeAsync(new ExportTableToPointInTimeRequest
{
TableArn = "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
ExportType = ExportType.INCREMENTAL_EXPORT,
IncrementalExportSpecification = new IncrementalExportSpecification
{
ExportFromTime = new DateTime(2023, 9, 20, 12, 0, 0, DateTimeKind.Utc),
ExportToTime = new DateTime(2023, 9, 20, 13, 0, 0, DateTimeKind.Utc),
ExportViewType = ExportViewType.NEW_AND_OLD_IMAGES
},
S3Bucket = "bucket",
S3Prefix = "prefix",
S3SseAlgorithm = S3SseAlgorithm.AES256,
ExportFormat = ExportFormat.DYNAMODB_JSON
});
- JavaScript
-
import { DynamoDBClient, ExportTableToPointInTimeCommand } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient();
await client.send(new ExportTableToPointInTimeCommand({
TableArn: "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
ExportType: "INCREMENTAL_EXPORT",
IncrementalExportSpecification: {
ExportFromTime: new Date("2023-09-20T12:00:00Z"),
ExportToTime: new Date("2023-09-20T13:00:00Z"),
ExportViewType: "NEW_AND_OLD_IMAGES"
},
S3Bucket: "bucket",
S3Prefix: "prefix",
S3SseAlgorithm: "AES256",
ExportFormat: "DYNAMODB_JSON"
}));
- Go
-
cfg, _ := config.LoadDefaultConfig(context.TODO())
client := dynamodb.NewFromConfig(cfg)
fromTime := time.Date(2023, 9, 20, 12, 0, 0, 0, time.UTC)
toTime := time.Date(2023, 9, 20, 13, 0, 0, 0, time.UTC)
client.ExportTableToPointInTime(context.TODO(), &dynamodb.ExportTableToPointInTimeInput{
TableArn: aws.String("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"),
ExportType: types.ExportTypeIncrementalExport,
IncrementalExportSpecification: &types.IncrementalExportSpecification{
ExportFromTime: &fromTime,
ExportToTime: &toTime,
ExportViewType: types.ExportViewTypeNewAndOldImages,
},
S3Bucket: aws.String("bucket"),
S3Prefix: aws.String("prefix"),
S3SseAlgorithm: types.S3SseAlgorithmAes256,
ExportFormat: types.ExportFormatDynamodbJson,
})
フィルタリングされたエクスポート
次の例では、エクスポートリクエストに FilterSpecification を含めることでテーブルのサブセットをエクスポートします。各例では、1 つのパーティションキー値を選択するためにキー条件式を使用し、非キー属性を一致させるためにフィルター式を使用し、出力する属性を選択するためにプロジェクション式を使用しています。FilterSpecification は、フルエクスポートまたは増分エクスポートのいずれにも適用できます。式のサイズは最大 4 KB、属性名は最大 250 バイト、属性値は最大 2 MB まで指定でき、式には最大 300 個の演算子を含めることができます。キー条件式を指定すると、パーティションキーをフィルター式に含めることはできません。詳細については、「テーブルのエクスポートのフィルタリング」を参照してください。
- AWS CLI
-
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:us-east-1:111122223333:table/MusicCollection \
--s3-bucket ddb-export-musiccollection-9012345678 \
--s3-prefix 2020-Nov \
--export-format DYNAMODB_JSON \
--export-time 1604632434 \
--s3-sse-algorithm AES256 \
--filter-specification '{
"KeyConditionExpression": "customer_id = :cid",
"FilterExpression": "#tier = :premium",
"ProjectionExpression": "customer_id, #tier",
"ExpressionAttributeNames": {"#tier": "tier"},
"ExpressionAttributeValues": {":cid": {"S": "cust-123"}, ":premium": {"S": "premium"}}
}'
- Python
-
import boto3
from datetime import datetime
client = boto3.client('dynamodb')
client.export_table_to_point_in_time(
TableArn='arn:aws:dynamodb:us-east-1:111122223333:table/TABLE',
ExportTime=datetime(2023, 9, 20, 12, 0, 0),
S3Bucket='bucket',
S3Prefix='prefix',
S3SseAlgorithm='AES256',
ExportFormat='DYNAMODB_JSON',
FilterSpecification={
'KeyConditionExpression': 'customer_id = :cid',
'FilterExpression': '#tier = :premium',
'ProjectionExpression': 'customer_id, #tier',
'ExpressionAttributeNames': {'#tier': 'tier'},
'ExpressionAttributeValues': {
':cid': {'S': 'cust-123'},
':premium': {'S': 'premium'}
}
}
)
- Java
-
DynamoDbClient client = DynamoDbClient.create();
client.exportTableToPointInTime(b -> b
.tableArn("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE")
.exportTime(Instant.parse("2023-09-20T12:00:00Z"))
.s3Bucket("bucket")
.s3Prefix("prefix")
.s3SseAlgorithm(S3SseAlgorithm.AES256)
.exportFormat(ExportFormat.DYNAMODB_JSON)
.filterSpecification(f -> f
.keyConditionExpression("customer_id = :cid")
.filterExpression("#tier = :premium")
.projectionExpression("customer_id, #tier")
.expressionAttributeNames(Map.of("#tier", "tier"))
.expressionAttributeValues(Map.of(
":cid", AttributeValue.fromS("cust-123"),
":premium", AttributeValue.fromS("premium")))));
- .NET
-
var client = new AmazonDynamoDBClient();
await client.ExportTableToPointInTimeAsync(new ExportTableToPointInTimeRequest
{
TableArn = "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
ExportTime = new DateTime(2023, 9, 20, 12, 0, 0, DateTimeKind.Utc),
S3Bucket = "bucket",
S3Prefix = "prefix",
S3SseAlgorithm = S3SseAlgorithm.AES256,
ExportFormat = ExportFormat.DYNAMODB_JSON,
FilterSpecification = new FilterSpecification
{
KeyConditionExpression = "customer_id = :cid",
FilterExpression = "#tier = :premium",
ProjectionExpression = "customer_id, #tier",
ExpressionAttributeNames = new Dictionary<string, string>
{
{ "#tier", "tier" }
},
ExpressionAttributeValues = new Dictionary<string, AttributeValue>
{
{ ":cid", new AttributeValue { S = "cust-123" } },
{ ":premium", new AttributeValue { S = "premium" } }
}
}
});
- JavaScript
-
import { DynamoDBClient, ExportTableToPointInTimeCommand } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient();
await client.send(new ExportTableToPointInTimeCommand({
TableArn: "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE",
ExportTime: new Date("2023-09-20T12:00:00Z"),
S3Bucket: "bucket",
S3Prefix: "prefix",
S3SseAlgorithm: "AES256",
ExportFormat: "DYNAMODB_JSON",
FilterSpecification: {
KeyConditionExpression: "customer_id = :cid",
FilterExpression: "#tier = :premium",
ProjectionExpression: "customer_id, #tier",
ExpressionAttributeNames: { "#tier": "tier" },
ExpressionAttributeValues: {
":cid": { S: "cust-123" },
":premium": { S: "premium" }
}
}
}));
- Go
-
cfg, _ := config.LoadDefaultConfig(context.TODO())
client := dynamodb.NewFromConfig(cfg)
exportTime := time.Date(2023, 9, 20, 12, 0, 0, 0, time.UTC)
client.ExportTableToPointInTime(context.TODO(), &dynamodb.ExportTableToPointInTimeInput{
TableArn: aws.String("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"),
ExportTime: &exportTime,
S3Bucket: aws.String("bucket"),
S3Prefix: aws.String("prefix"),
S3SseAlgorithm: types.S3SseAlgorithmAes256,
ExportFormat: types.ExportFormatDynamodbJson,
FilterSpecification: &types.FilterSpecification{
KeyConditionExpression: aws.String("customer_id = :cid"),
FilterExpression: aws.String("#tier = :premium"),
ProjectionExpression: aws.String("customer_id, #tier"),
ExpressionAttributeNames: map[string]string{
"#tier": "tier",
},
ExpressionAttributeValues: map[string]types.AttributeValue{
":cid": &types.AttributeValueMemberS{Value: "cust-123"},
":premium": &types.AttributeValueMemberS{Value: "premium"},
},
},
})
DynamoDB は、フィルタリングされたエクスポートを開始する前に式を検証します。式が含まれていない FilterSpecification を指定した場合、または式が無効である場合、リクエストは ValidationException となり、失敗します。DescribeExport オペレーションは、エクスポートに適用した FilterSpecification を返します。ListExports オペレーションは変更されず、フィルタリングによって新しいエクスポートタイプが導入されることもありません。エクスポートタイプ (FULL_EXPORT または INCREMENTAL_EXPORT) でも、データがエクスポートされるタイミングが決まります。どのデータがエクスポートされるかは、フィルターによって決まります。
AWS Key Management Service (AWS KMS) によって保護されたキーを使用してエクスポートを暗号化することを選択した場合、そのキーはエクスポート先 S3 バケットと同じリージョンにある必要があります。
AWS CLI および AWS SDK を使用して過去のエクスポートの詳細を取得する
過去に実行したエクスポートリクエストに関する情報は、list-exports コマンドを実行して見つけることができます。このコマンドは、過去 90 日間に作成されたすべてのエクスポートのリストを返します。エクスポートタスクのメタデータは 90 日後に期限切れになり、それより古いジョブは list-exports コマンドによって返されなくなりますが、S3 バケット内のオブジェクトは、バケットポリシーで許可されている限り維持されます。エクスポート中に S3 バケットに作成されたオブジェクトが DynamoDB によって削除されることはありません。
エクスポートのステータスは、成功または失敗するまで PENDING となります。成功すると、ステータスは COMPLETED に変わります。失敗すると、ステータスは FAILED に変わり、failure_message と failure_reason が追加されます。
エクスポートを一覧表示する
- AWS CLI
-
aws dynamodb list-exports \
--table-arn arn:aws:dynamodb:us-east-1:111122223333:table/ProductCatalog
- Python
-
import boto3
client = boto3.client('dynamodb')
print(
client.list_exports(
TableArn='arn:aws:dynamodb:us-east-1:111122223333:table/TABLE',
)
)
- Java
-
DynamoDbClient client = DynamoDbClient.create();
ListExportsResponse response = client.listExports(b -> b
.tableArn("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"));
response.exportSummaries().forEach(System.out::println);
- .NET
-
var client = new AmazonDynamoDBClient();
var response = await client.ListExportsAsync(new ListExportsRequest
{
TableArn = "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"
});
response.ExportSummaries.ForEach(Console.WriteLine);
- JavaScript
-
import { DynamoDBClient, ListExportsCommand } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient();
const response = await client.send(new ListExportsCommand({
TableArn: "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"
}));
console.log(response.ExportSummaries);
- Go
-
cfg, _ := config.LoadDefaultConfig(context.TODO())
client := dynamodb.NewFromConfig(cfg)
response, _ := client.ListExports(context.TODO(), &dynamodb.ListExportsInput{
TableArn: aws.String("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE"),
})
fmt.Println(response.ExportSummaries)
エクスポートを記述する
- AWS CLI
-
aws dynamodb describe-export \
--export-arn arn:aws:dynamodb:us-east-1:111122223333:table/ProductCatalog/export/01695353076000-a1b2c3d4
- Python
-
import boto3
client = boto3.client('dynamodb')
print(
client.describe_export(
ExportArn='arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f',
)['ExportDescription']
)
- Java
-
DynamoDbClient client = DynamoDbClient.create();
DescribeExportResponse response = client.describeExport(b -> b
.exportArn("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f"));
System.out.println(response.exportDescription());
- .NET
-
var client = new AmazonDynamoDBClient();
var response = await client.DescribeExportAsync(new DescribeExportRequest
{
ExportArn = "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f"
});
Console.WriteLine(response.ExportDescription);
- JavaScript
-
import { DynamoDBClient, DescribeExportCommand } from "@aws-sdk/client-dynamodb";
const client = new DynamoDBClient();
const response = await client.send(new DescribeExportCommand({
ExportArn: "arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f"
}));
console.log(response.ExportDescription);
- Go
-
cfg, _ := config.LoadDefaultConfig(context.TODO())
client := dynamodb.NewFromConfig(cfg)
response, _ := client.DescribeExport(context.TODO(), &dynamodb.DescribeExportInput{
ExportArn: aws.String("arn:aws:dynamodb:us-east-1:111122223333:table/TABLE/export/01695353076000-06e2188f"),
})
fmt.Println(response.ExportDescription)