Amazon DynamoDB 테이블을 한 AWS 계정에서 다른 AWS 계정으로 마이그레이션하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 9월 2일

크로스 계정 Amazon DynamoDB 테이블 마이그레이션을 수행하려고 합니다.

간략한 설명

사용 사례에 따라 다음 방법 중 하나를 선택하여 DynamoDB 테이블을 다른 AWS 계정으로 마이그레이션할 수 있습니다.

  • AWS Backup
  • DynamoDB 가져오기 및 Amazon Simple Storage Service(S3)로 내보내기
  • Amazon S3 및 AWS Glue
  • AWS Data Pipeline
  • Amazon EMR

해결 방법

AWS Backup

AWS Backup을 사용하여 크로스 계정 DynamoDB 백업을 생성할 수 있습니다. 자세한 내용은 AWS 계정 간 백업 사본 생성AWS Backup 데모: 크로스 계정 및 크로스 리전 백업을 참조하세요.

대상 계정에서 다음을 수행합니다.

  1. DynamoDB가 있는 리전의 대상 계정에 AWS Backup 볼트를 생성합니다.
  2. 볼트를 생성할 때 이미 구성한 AWS Key Management Service(AWS KMS) 키를 사용합니다. 동일한 조직의 소스 계정과 이미 공유한 키입니다.
  3. 볼트를 생성한 후 동일한 조직 내의 다른 계정이 볼트에 복사할 수 있도록 허용하는 AWS Identity and Access Management(IAM) 정책을 볼트에 추가합니다. 조직에서 백업 볼트에 대한 액세스 허용 옵션을 선택하여 수행할 수 있습니다.

소스 계정에서 다음을 수행합니다.

  1. DynamoDB가 있는 소스 계정에서, 테이블 데이터를 마이그레이션해야 하는 리전에 AWS Backup 볼트를 생성합니다.
  2. 볼트를 생성할 때 이미 구성한 AWS KMS 키를 사용합니다. 조직의 다른 계정과 공유한 키입니다.
  3. 조직의 다른 계정이 볼트에 복사할 수 있도록 허용하는 IAM 정책을 볼트에 추가합니다. 조직에서 백업 볼트에 대한 액세스 허용 옵션을 선택하여 수행할 수 있습니다.
  4. 소스 계정의 DynamoDB 테이블을 대상 계정에 백업하는 백업 플랜을 생성합니다.
  5. 백업 볼트의 경우 소스 계정에서 생성한 볼트를 선택해야 합니다.
  6. 그런 다음 Copy to another account's vault(다른 계정의 볼트로 복사) 옵션을 선택합니다.
  7. 리소스 할당에는 백업해야 하는 리소스를 포함해야 합니다. Include specific resource types(특정 리소스 유형 포함)를 선택할 수 있습니다.
  8. Select specific resource types(특정 리소스 유형 선택)에서 DynamoDB를 선택합니다. 모든 테이블을 선택할 수도 있고, 백업해야 하는 테이블만 선택할 수도 있습니다.

대상 계정에서 다음을 수행합니다.

  1. 대상 계정에서, 생성한 볼트로 이동합니다.
    Recovery points(복구 지점)가 소스 계정과 동일하다는 것을 알 수 있습니다.
  2. 대상 계정에서 DynamoDB 테이블을 복원할 수 있습니다.

참고: 이 접근 방식에서는 소스 계정과 대상 계정이 동일한 조직에 있어야 합니다.

DynamoDB 가져오기 및 Amazon S3로 내보내기

  1. DynamoDB 테이블을 대상 계정의 Amazon S3 버킷으로 내보내서 DynamoDB 테이블 데이터를 마이그레이션합니다. DynamoDB에 이 S3 버킷에 대한 s3:ListBucket 권한이 있는지 확인하세요. 내보낸 데이터에 대한 액세스를 거부하는 액세스 제어 목록이 S3 버킷에 없어야 합니다.
  2. 내보내기가 완료되면 S3 버킷에서 대상 계정의 새 테이블로 데이터를 가져옵니다. 자세한 내용은 Amazon S3에서 DynamoDB 데이터 가져오기: 작동 방식을 참조하세요.

참고: 테이블을 내보내더라도 테이블의 읽기 용량이 소모되지 않으며 테이블 성능이나 가용성에도 영향을 주지 않습니다. 또한 테이블을 가져올 때 라이터 용량이 소모되지 않습니다. 따라서 가져오기 프로세스 중에 추가 용량이 필요하지 않습니다.

Amazon S3 및 AWS Glue

S3 버킷과 AWS Glue 작업을 사용하여 DynamoDB 테이블을 다른 AWS 계정으로 마이그레이션할 수 있습니다.

1. 테이블을 다른 계정의 Amazon S3 버킷으로 내보내 DynamoDB 테이블의 초기 마이그레이션을 수행할 수 있습니다.

테이블을 계정 A에서 계정 B의 S3 버킷으로 내보낼 때 객체는 여전히 계정 A에 의해 소유됩니다. 계정 B의 AWS Identify Access Management(IAM) 사용자는 기본적으로 객체에 액세스할 수 없습니다. 내보내기 기능은 액세스 제어 목록(ACL) bucket-owner-full-control을 사용하여 데이터를 쓰지 않습니다. 이 객체 소유권 문제에 대한 임시 해결 방법으로, 내보내기가 완료된 후 내보낸 모든 객체에 PutObjectAcl 권한을 부여합니다. 이 임시 해결 방법은 계정 B의 버킷 소유자에게 내보낸 모든 객체에 대한 액세스 권한을 부여합니다. 자세한 내용은 다른 AWS 계정에서 제 Amazon S3 버킷에 업로드한 객체에 액세스할 수 없는 이유는 무엇입니까?를 참조하세요.

2. Glue 작업을 사용하여 S3 버킷에서 파일을 읽고 대상 DynamoDB 테이블에 씁니다. 1단계에서 설명한 대로 대상 계정의 S3 버킷으로 데이터를 내보낸 후 대상 계정에서 다음을 수행합니다.

Amazon S3의 데이터에 대해 AWS Glue 크롤러를 실행합니다. 크롤러는 스키마를 유추하고 해당 스키마 정의를 사용하여 AWS Glue 데이터 카탈로그 테이블을 생성합니다.

AWS Glue Studio를 사용하여 ETL 작업을 생성합니다. 소스, 변환 및 대상을 지정하면 AWS Glue Studio가 이러한 입력을 기반으로 PySpark 코드를 자동으로 생성합니다. 이 작업의 경우 AWS Glue 데이터 카탈로그 테이블을 소스로 지정하고 ApplyMapping을 변환으로 지정합니다. 대상은 지정하지 않습니다. AWS Glue Studio는 S3에서 DynamicFrame을 생성하기 위해 PySpark 코드를 생성합니다.

AWS Glue Studio에서 생성한 코드의 키 이름 및 데이터 유형 매핑이 올바른지 확인하세요. 매핑이 올바르지 않으면 코드를 수정하고 매핑을 수정합니다. AWS Glue 작업을 생성할 때 대상을 지정하지 않았으므로 이 예제에서 다음과 유사한 싱크 작업을 추가합니다. 이 작업을 추가하면 작업이 대상 DynamoDB 테이블에 직접 쓸 수 있습니다.

glueContext.write_dynamic_frame_from_options ( frame = Mapped, connection_type = "dynamodb", connection_options = { "dynamodb.region": "", "dynamodb.output.tableName": "", "dynamodb.throughput.write.percent": "1.0" } )

대상 테이블에 데이터를 로드하려면 AWS Glue Studio 또는 AWS Glue 콘솔의 Jobs(작업) 페이지에서 작업을 실행합니다.

3. 테이블을 Amazon S3 버킷으로 내보낸 후 DynamoDB Streams 및 AWS Lambda를 사용하여 소스 테이블의 데이터 삽입 및 업데이트를 다른 계정의 대상 테이블로 마이그레이션합니다. 자세한 내용은 Amazon DynamoDB를 사용한 크로스 계정 복제를 참조하세요.

AWS Glue

AWS Glue ETL 작업은 다른 계정의 DynamoDB 테이블에서 데이터를 읽고 쓰는 기능을 모두 지원합니다. dynamodb.sts.roleArn 파라미터를 사용하여 작업 스크립트에서 교차 계정 역할을 수임할 수 있습니다. 이 역할을 수임하면 DynamoDB에 대한 크로스 계정 액세스에 사용해야 하는 임시 자격 증명을 가져올 수 있습니다. 자세한 내용은 DynamoDB 테이블에 대한 크로스 계정 크로스 리전 액세스AWS Step Functions 및 AWS Glue를 사용하여 Amazon DynamoDB 테이블을 Amazon S3로 내보내는 방법을 참조하세요.

Data Pipeline

Data Pipeline을 사용하여 DynamoDB 테이블을 다른 계정으로 이동하려면 다음을 수행할 수도 있습니다.

  1. DynamoDB 테이블을 소스 계정에서 대상 계정의 Amazon S3로 내보냅니다.
  2. 내보낸 데이터를 S3 버킷에서 가져옵니다.

자세한 내용은 Data Pipeline을 사용하여 DynamoDB 테이블을 다른 계정에 있는 S3 버킷에 백업하려면 어떻게 해야 합니까?AWS Data Pipeline을 사용하여 한 AWS 계정에서 다른 계정으로 Amazon DynamoDB 테이블을 마이그레이션하는 방법을 참조하세요.

참고: 대상 계정은 S3 버킷의 DynamoDB 데이터에 액세스할 수 없습니다. 데이터를 사용하여 작업하려면 DynamoDB 테이블로 데이터를 복원합니다. Data Pipeline은 최소한의 수작업으로 테이블을 이동할 수 있는 가장 쉬운 방법을 제공합니다. 그러면서도 사용자 지정 옵션은 더 적습니다.

Amazon EMR

Amazon EMR을 사용하여 DynamoDB 테이블을 마이그레이션하는 경우 사용 사례에 따라 다음 중 하나의 옵션을 사용할 수 있습니다.

  • 마이그레이션 중에 가동 중지 시간을 감당할 수 있는 경우 소스 테이블에 대한 쓰기 작업을 중지합니다. 이는 대상 테이블이 소스 테이블과 동기화되었는지 확인하기 위한 것입니다.
  • 가동 중지 시간을 감당할 수 없다면 마이그레이션 중에 발생하는 모든 트랜잭션을 스테이징 테이블에 저장해야합니다. 원래 테이블을 다른 AWS 계정으로 마이그레이션한 후 스테이징 테이블에서 대상 테이블로 새 트랜잭션을 푸시합니다.

참고: Amazon EMR을 사용하여 테이블을 마이그레이션하는 데 필요한 시간은 DynamoDB 테이블의 프로비저닝된 처리량 네트워크 성능, 테이블에 저장된 데이터 양 등에 따라 크게 달라질 수 있습니다.

Amazon EMR을 사용하여 DynamoDB 테이블을 마이그레이션하려면 다음을 수행하세요.

  1. 소스 계정과 대상 계정 모두에서 EMR 클러스터를 시작합니다. Software configuration(소프트웨어 구성) 섹션에서 Apache Hive를 포함하는 옵션을 선택해야 합니다. 참고: Amazon EMR 클러스터를 프라이빗 서브넷으로 시작하는 것이 보안 모범 사례입니다. 프라이빗 서브넷에는 Amazon S3 VPC 엔드포인트와 DynamoDB로의 경로가 있어야 합니다. 자세한 내용은 프라이빗 서브넷을 참조하세요. 클러스터가 인터넷에 액세스해야 하는 경우 퍼블릭 서브넷에 상주하는 NAT 게이트웨이를 사용합니다. 자세한 내용은 퍼블릭 및 프라이빗 서브넷이 있는 VPC(NAT)를 참조하세요.
  2. 두 계정 모두의 EMR_EC2_DefaultRole IAM 역할에는 대상 계정의 S3 버킷에 대한 쓰기 권한이 있어야 합니다. 자세한 내용은 AWS 서비스 및 리소스에 대한 Amazon EMR 권한을 위한 IAM 서비스 역할 구성을 참조하세요.
  3. 소스 계정에서 SSH를 사용하여 마스터 노드에 연결합니다.
  4. 소스 계정에서 Hive 명령을 사용하여 DynamoDB 테이블 데이터를 대상 계정의 S3 버킷으로 내보냅니다.
  5. 대상 계정에서 Amazon S3 데이터를 새 DynamoDB 테이블로 가져옵니다.
  6. 스테이징 테이블을 사용하여 마이그레이션 중에 발생한 쓰기를 캡처하는 경우 스테이징 테이블에서 4단계와 5단계를 반복합니다.

이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요하세요?