本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DynamoDB 資料表匯出可讓您將資料表資料匯出至 Amazon S3 儲存貯體,讓您使用 Athena、 AWS Glue、Amazon SageMaker AIEMR、Amazon 和 等 AWS 其他服務,對資料執行分析和複雜的查詢 AWS Lake Formation。您可以使用 AWS Management Console、 AWS CLI或 DynamoDB 來請求資料表匯出API。
注意
不支援請求者支付 Amazon S3 儲存貯體。
DynamoDB 同時支援完整匯出和增量匯出:
-
透過完整匯出,您可以將資料表的完整快照從復原 (PITR) 時段內 point-in-time的任何時間點匯出至 Amazon S3 儲存貯體。
-
使用增量匯出,您可以將資料從 DynamoDB 資料表匯出,該資料表在PITR視窗內指定的時段之間變更、更新或刪除,並傳送到您的 Amazon S3 儲存貯體。
主題
必要條件
啟用 PITR
若要使用匯出至 S3 功能,您必須在資料表PITR上啟用 。如需如何啟用 的詳細資訊PITR,請參閱 Point-in-time 復原。如果您請求匯出未PITR啟用的資料表,您的請求將會失敗,並出現例外狀況訊息:「呼叫 ExportTableToPointInTime
操作時發生錯誤 (PointInTimeRecoveryUnavailableException):資料表 ' 未啟用時間點復原my-dynamodb-table」。
設定 S3 許可
您可以將資料表資料匯出至您擁有寫入許可的任何 Amazon S3 儲存貯體。目的地儲存貯體不需要位於相同的 AWS 區域,也不需要擁有與來源資料表擁有者相同的擁有者。Your 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的使用者/角色提供。如需加密的詳細資訊,包括最佳實務,請參閱 DynamoDB 如何使用 AWS KMS和使用自訂KMS金鑰
使用 AWS Management Console請求匯出
以下範例示範如何使用 DynamoDB 主控台匯出名為 MusicCollection
的現有資料表。
注意
此程序假設您已啟用 point-in-time復原。若要為MusicCollection
資料表啟用它,請在資料表的概觀索引標籤的資料表詳細資訊區段中,選擇啟用 Point-in-time 復原。
請求資料表匯出
登入 AWS Management Console ,並在 開啟 DynamoDB 主控台https://console.aws.amazon.com/dynamodb/
。 -
在主控台左側的導覽窗格中,選擇 Exports to S3 (匯出至 S3)。
-
選取匯出至 S3 按鈕。
-
選擇來源資料表和目的地 S3 儲存貯體。如果您的帳戶擁有該目的地儲存貯體,您可以使用 Browse S3 (瀏覽 S3) 按鈕尋找它。否則,請使用
prefix
是選用資料夾,輸入儲存貯URL體的s3://
,以協助保持目的地儲存貯體井有條。bucketname
/prefix
format. -
選擇完整匯出或增量匯出。完整匯出會輸出資料表在您所指定時間點的完整資料表快照。增量匯出會輸出在指定匯出期間對資料表所做的變更。您的輸出會壓縮,因此只包含匯出期間項目的最終狀態。即使項目在同一匯出期間內有多個更新,該項目也只會在匯出中出現一次。
-
選取您要匯出完整資料表快照的來源時間點。這可以是PITR視窗內的任何時間點。或者,您可以選取目前時間以匯出最新快照。
-
對於匯出的檔案格式,選擇 DynamoDB JSON 和 Amazon Ion。根據預設,您的資料表會從時間復原時段中的最新可還原時間以 DynamoDB JSON 格式匯出,並使用 Amazon S3 金鑰 (SSE-S3) 加密。您可以視需要變更這些匯出設定。
注意
如果您選擇使用受 AWS Key Management Service (AWS KMS) 保護的金鑰來加密匯出,則金鑰必須位於與目的地 S3 儲存貯體相同的區域。
-
選擇匯出以開始。
匯出的資料在交易上不一致。您的交易操作可以在兩個匯出輸出之間撕裂。匯出中反映的交易操作可以修改項目子集,而相同交易中的另一個修改子集不會反映在相同的匯出請求中。不過,匯出最後會是一致的。如果交易在匯出期間遭到撕裂,則您下次連續匯出時將擁有剩餘的交易,無需重複。用於匯出的期間是以內部系統時鐘為基礎,且可能與您的應用程式本機時鐘相差一分鐘。
取得 中過去匯出的詳細資訊 AWS Management Console
您可以在導覽側邊欄中選擇匯出至 S3 區段,找到您過去執行之匯出任務的相關資訊。此區段包含您在過去 90 天內建立的所有匯出清單。選取匯出標籤中列出的任務ARN的 ,以擷取該匯出的相關資訊,包括您選擇的任何進階組態設定。請注意,雖然匯出任務中繼資料會在 90 天後過期,也無法在此清單中找到早於該時間的任務,但只要儲存貯體政策允許,S3 儲存貯體中的物件就會保留。DynamoDB 絕不會刪除在匯出時其在您的 S3 儲存貯體中建立的任何物件。
使用 AWS CLI請求匯出
下列範例示範如何使用 AWS CLI 將名為 的現有資料表匯出MusicCollection
至名為 的 S3 儲存貯體ddb-export-musiccollection
。
注意
此程序假設您已啟用 point-in-time復原。若要針對 MusicCollection
資料表啟用程序,請執行下列命令。
aws dynamodb update-continuous-backups \ --table-name MusicCollection \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=True
以下命令會將 MusicCollection
匯出至名為 ddb-export-musiccollection-9012345678
的 S3 儲存貯體 (字首為 2020-Nov
)。資料表資料將從時間點復原時段內的特定時間以 DynamoDB JSON 格式匯出,並使用 Amazon S3 金鑰 (SSE-S3) 加密。
注意
如果要求跨帳戶資料表匯出,請務必包含 --s3-bucket-owner
選項。
aws dynamodb export-table-to-point-in-time \ --table-arn arn:aws:dynamodb:us-west-2:123456789012: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
注意
如果您選擇使用受 AWS Key Management Service (AWS KMS) 保護的金鑰來加密匯出,則金鑰必須位於與目的地 S3 儲存貯體相同的區域。
取得 中過去匯出的詳細資訊 AWS CLI
使用 list-exports
命令即可找到您過去曾執行之匯出請求的相關資訊。此命令會傳回您在過去 90 天內建立的所有匯出清單。請注意,雖然匯出任務中繼資料會在 90 天後過期,也無法使用 list-exports
命令傳回早於該時間的任務,但只要儲存貯體政策允許,S3 儲存貯體中的物件就會保留。DynamoDB 絕不會刪除在匯出時其在您的 S3 儲存貯體中建立的任何物件。
在匯出成功或失敗之前,其狀態會是 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您選擇的 請求資料表匯出。
完整匯出
import boto3
from datetime import datetime
# remove endpoint_url for real use
client = boto3.client('dynamodb')
# https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/export_table_to_point_in_time.html
client.export_table_to_point_in_time(
TableArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE',
ExportTime=datetime(2023, 9, 20, 12, 0, 0),
S3Bucket='bucket',
S3Prefix='prefix',
S3SseAlgorithm='AES256',
ExportFormat='DYNAMODB_JSON'
)
增量匯出
import boto3
from datetime import datetime
client = boto3.client('dynamodb')
client.export_table_to_point_in_time(
TableArn='arn:aws:dynamodb:us-east-1:0123456789: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'
)
使用 取得過去匯出的詳細資訊 AWS SDK
使用這些程式碼片段,使用 AWS SDK您選擇的 取得過去資料表匯出的詳細資訊。
清單
import boto3
client = boto3.client('dynamodb')
# https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/list_exports.html
print(
client.list_exports(
TableArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE',
)
)
描述
import boto3
client = boto3.client('dynamodb')
# https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/describe_export.html
print(
client.describe_export(
ExportArn='arn:aws:dynamodb:us-east-1:0123456789:table/TABLE/export/01695353076000-06e2188f',
)['ExportDescription']
)