DynamoDB에서 테이블 내보내기 요청 - Amazon DynamoDB

DynamoDB에서 테이블 내보내기 요청

DynamoDB 테이블 내보내기를 사용하면 테이블 데이터를 Amazon S3 버킷으로 내보낼 수 있으므로, Athena, AWS Glue, Amazon SageMaker, Amazon EMR, AWS Lake Formation 등의 다른 AWS 서비스를 사용하여 데이터에 대한 분석과 복잡한 쿼리를 수행할 수 있습니다. AWS Management Console, AWS CLI 또는 DynamoDB API를 사용하여 DynamoDB 테이블 내보내기를 요청할 수 있습니다.

참고

Amazon S3 요청자 지불 버킷은 지원되지 않습니다.

DynamoDB는 전체 내보내기와 증분 내보내기를 모두 지원합니다.

  • 전체 내보내기를 사용하면 특정 시점 복구(PITR) 기간 내 어느 시점에서든 테이블의 전체 스냅샷을 Amazon S3 버킷으로 내보낼 수 있습니다.

  • 증분 내보내기를 사용하면 PITR 기간 내에서 지정된 기간 사이에 변경, 업데이트 또는 삭제된 DynamoDB 테이블의 데이터를 Amazon S3 버킷으로 내보낼 수 있습니다.

필수 조건

PITR 활성화

S3로 내보내기 기능을 사용하려면 테이블에서 PITR을 활성화해야 합니다. PITR을 활성화하는 방법에 대한 자세한 내용은 시점 복구를 참조하세요. PITR이 활성화되지 않은 테이블에 대해 내보내기를 요청하는 경우 다음 예외 메시지와 함께 요청이 실패합니다. "An error occurred (PointInTimeRecoveryUnavailableException) when calling the ExportTableToPointInTime operation: Point in time recovery is not enabled for table '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": "AllowWriteToDestinationBucket", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::your-bucket/*" } ] }

다른 계정에 있는 S3 버킷에 쓰기 작업을 수행해야 하거나 쓰기 권한이 없는 경우, S3 버킷 소유자는 DynamoDB에서 해당 버킷으로 내보낼 수 있도록 허용하는 버킷 정책을 추가해야 합니다. 다음은 대상 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:::awsexamplebucket1/*" } ] }

내보내기가 진행 중일 때 이러한 권한을 취소하면 부분 파일이 생성됩니다.

참고

내보내려는 테이블이나 버킷이 고객 관리형 키로 암호화된 경우 해당 KMS 키의 정책은 DynamoDB에 키를 사용할 수 있는 권한을 부여해야 합니다. 이 권한은 내보내기 작업을 트리거하는 IAM 사용자/역할을 통해 부여됩니다. 모범 사례를 포함한 암호화에 대한 자세한 내용은 DynamoDB가 AWS KMS를 사용하는 방법사용자 지정 KMS 키 사용을 참조하세요.

AWS Management Console을 사용하여 내보내기 요청

다음 예제에서는 DynamoDB 콘솔을 사용하여 MusicCollection이라는 기존 테이블을 내보내는 방법을 보여줍니다.

참고

이 절차에서는 특정 시점으로 복구를 활성화했다고 가정합니다. MusicCollection 테이블에 대해 이 기능을 활성화하려면 테이블의 개요 탭에 있는 테이블 세부 정보 섹션에서 특정 시점으로 복구에 대해 활성화를 선택합니다.

테이블 내보내기를 요청하려면
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/dynamodb/에서 DynamoDB 콘솔을 엽니다.

  2. 콘솔 왼쪽의 탐색 창에서 S3로 내보내기(Exports to S3)를 선택합니다.

  3. S3로 내보내기 버튼을 선택합니다.

  4. 소스 테이블과 대상 S3 버킷을 선택합니다. 사용자 계정이 대상 버킷을 소유한 경우 Browse S3(S3 찾아보기) 버튼을 클릭하여 찾을 수 있습니다. 그렇지 않은 경우, 버킷의 URL을 s3://bucketname/prefix format.으로 입력합니다. prefix는 대상 버킷을 체계적으로 구성된 상태로 유지하는 데 도움이 되는 선택적 폴더입니다.

  5. 전체 내보내기 또는 증분 내보내기를 선택합니다. 전체 내보내기는 지정한 시점의 테이블의 전체 테이블 스냅샷을 출력합니다. 증분 내보내기는 지정된 내보내기 기간 동안 테이블에 적용된 변경 사항을 출력합니다. 출력은 내보내기 기간의 최종 항목 상태만 포함하도록 압축됩니다. 동일한 내보내기 기간 내에 여러 번 업데이트된 경우에도 항목은 내보내기에 한 번만 표시됩니다.

    Full export
    1. 전체 테이블 스냅샷을 내보낼 시점을 선택합니다. PITR 기간 내의 어느 시점이나 가능합니다. 또는 현재 시간을 선택하여 최신 스냅샷을 내보낼 수도 있습니다.

    2. 내보낸 파일 형식에서 DynamoDB JSONAmazon Ion 중에 선택합니다. 기본적으로 테이블은 특정 시점으로 복구 기간 중 복원 가능한 마지막 시간부터 DynamoDB JSON 형식으로 내보내고 Amazon S3 키(SSE-S3)를 사용하여 암호화됩니다. 필요할 경우 이러한 내보내기 설정을 변경할 수 있습니다.

      참고

      AWS Key Management Service(AWS KMS)에 의해 보호되는 키를 사용하여 내보내기를 암호화하도록 선택하는 경우 해당 키는 대상 S3 버킷과 동일한 리전에 있어야 합니다.

    Incremental export
    1. 증분 데이터를 내보내려는 내보내기 기간을 선택합니다. PITR 기간에서 시작 시간을 선택합니다. 내보내기 기간은 15분 이상, 24시간 이하여야 합니다. 내보내기 기간의 시작 시간은 포함되며 종료 시간은 제외됩니다.

    2. 절대 모드상대 모드 중에서 선택합니다.

      1. 절대 모드는 지정된 기간 동안 증분 데이터를 내보냅니다.

      2. 상대 모드는 내보내기 작업 제출 시간을 기준으로 하는 내보내기 기간 동안 증분 데이터를 내보냅니다.

    3. 내보낸 파일 형식에서 DynamoDB JSONAmazon Ion 중에 선택합니다. 기본적으로 테이블은 특정 시점으로 복구 기간 중 복원 가능한 마지막 시간부터 DynamoDB JSON 형식으로 내보내고 Amazon S3 키(SSE-S3)를 사용하여 암호화됩니다. 필요할 경우 이러한 내보내기 설정을 변경할 수 있습니다.

      참고

      AWS Key Management Service(AWS KMS)에 의해 보호되는 키를 사용하여 내보내기를 암호화하도록 선택하는 경우 해당 키는 대상 S3 버킷과 동일한 리전에 있어야 합니다.

    4. 보기 유형 내보내기에서 새 이미지와 이전 이미지 또는 새 이미지만을 선택합니다. 새 이미지는 항목의 최신 상태를 제공합니다. 이전 이미지는 지정된 시작 날짜 및 시간 바로 이전의 항목 상태를 제공합니다. 기본 설정은 새 이미지와 이전 이미지입니다. 새 이미지와 이전 이미지에 대한 자세한 내용은 증분 내보내기 출력 섹션을 참조하세요.

  6. 시작하려면 내보내기를 선택합니다.

내보낸 데이터는 트랜잭션에서 일관성이 없습니다. 트랜잭션 작업이 두 개의 내보내기 출력 사이에서 혼선을 겪을 수 있습니다. 트랜잭션 작업에 의해 수정된 항목 중 일부는 내보내기에 반영되는 반면, 동일한 트랜잭션에서 수정된 다른 일부 항목은 동일한 내보내기 요청에 반영되지 않을 수 있습니다. 하지만 내보내기는 결국에 일관되게 이루어집니다. 내보내기 중에 트랜잭션이 중단되는 경우 다음 번 연속 내보내기에서 중복 없이 남은 트랜잭션이 수행됩니다. 내보내기에 사용되는 기간은 내부 시스템 시계를 기준으로 하며 애플리케이션의 로컬 시계와 1분씩 달라질 수 있습니다.

AWS Management Console에서 이전 내보내기에 대한 세부 정보 확인

이전에 실행한 내보내기 태스크에 대한 정보는 탐색 사이드바에서 S3로 내보내기 섹션을 선택하여 찾을 수 있습니다. 이 섹션에는 지난 90일간 생성한 모든 내보내기의 목록이 포함되어 있습니다. 내보내기 탭에 나열된 태스크의 ARN을 선택하면 선택한 고급 구성 설정을 포함하여 해당 내보내기에 대한 정보가 검색됩니다. 내보내기 태스크 메타데이터는 90일이 지나면 만료되고 해당 기간보다 오래된 작업은 이 목록에서 더 이상 찾을 수 없지만 S3 버킷의 객체는 버킷 정책에서 허용하는 기간까지 유지됩니다. DynamoDB는 내보내기 중 S3 버킷에서 생성하는 객체를 삭제하지 않습니다.

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
Full export

다음 명령은 MusicCollection을 접두사가 2020-Nov인 S3 버킷 ddb-export-musiccollection-9012345678으로 내보냅니다. 테이블 데이터는 특정 시점으로 복구 기간 중 특정 시간부터 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
Incremental export

다음 명령은 새 --export-type--incremental-export-specification을 제공하여 증분 내보내기를 수행합니다. 기울임꼴로 표시된 값을 사용자 고유의 값으로 대체합니다. 시간은 epoch 이후 경과 시간(초)으로 지정됩니다.

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
참고

AWS Key Management Service(AWS KMS)에 의해 보호되는 키를 사용하여 내보내기를 암호화하도록 선택하는 경우 해당 키는 대상 S3 버킷과 동일한 리전에 있어야 합니다.

AWS CLI에서 이전 내보내기에 대한 세부 정보 확인

이전에 실행한 내보내기 요청에 대한 정보는 list-exports 명령을 사용하여 확인할 수 있습니다. 이 명령은 지난 90일간 생성한 모든 내보내기의 목록을 반환합니다. 내보내기 태스크 메타데이터는 90일이 지나면 만료되고 해당 기간보다 오래된 작업은 list-exports 명령에서 더 이상 반환하지 않지만 S3 버킷의 객체는 버킷 정책에서 허용하는 기간까지 유지됩니다. DynamoDB는 내보내기 중 S3 버킷에서 생성하는 객체를 삭제하지 않습니다.

내보내기는 성공 또는 실패할 때까지의 PENDING 상태를 유지합니다. 성공하면 상태가 COMPLETED로 바뀝니다. 실패하면 상태가 FAILED로 바뀌고 failure_messagefailure_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를 사용하여 테이블 내보내기를 요청할 수 있습니다.

Python

전체 내보내기

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를 사용하여 이전 테이블 내보내기에 대한 세부 정보를 얻을 수 있습니다.

Python

전체 내보내기

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'] )