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

최종 업데이트 날짜: 2021년 3월 24일

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

간략한 설명

다음을 수행하여 DynamoDB 테이블을 다른 AWS 계정으로 마이그레이션할 수 있습니다.

  1. DynamoDB 테이블 데이터를 다른 계정의 Amazon S3(Amazon Simple Storage Service) 버킷으로 내보냅니다.
  2. AWS Glue 작업을 사용하여 데이터를 가져옵니다.

AWS Data Pipeline 또는 Amazon EMR을 사용하여 DynamoDB 테이블을 다른 AWS 계정으로 이동할 수도 있습니다. Data Pipeline은 가장 쉽게 테이블을 이동할 수 있는 방법이지만 사용자 지정 옵션이 적습니다. Amazon EMR은 프로세스를 기술 전문성을 보유한 사용자가 더 효과적으로 제어하고자 할 때 더 나은 선택입니다.

해결 방법

Amazon S3 및 AWS Glue

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

  1. 테이블을 다른 계정의 Amazon S3 버킷으로 내보내 DynamoDB 테이블의 초기 마이그레이션을 수행할 수 있습니다. 자세한 내용은 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 테이블에 씁니다. 자세한 내용은AWS Glue의 ETL 연결 유형 및 옵션을 참조하세요.
  3. 테이블을 Amazon S3 버킷으로 내보낸 후 DynamoDB 스트림과 AWS Lambda를 사용하여 원본 테이블의 데이터 삽입 및 업데이트를 다른 계정의 대상 테이블로 마이그레이션합니다. 자세한 내용은Cross-account replication with Amazon DynamoDB를 참조하세요.

Data Pipeline

Data Pipeline을 사용하여 DynamoDB 테이블을 다른 계정으로 이전하려면 DynamoDB 테이블을 다른 계정의 S3 버킷으로 백업하기 위해 Data Pipeline을 어떻게 사용할 수 있습니까?를 참조하세요.

참고: 대상 계정은 Amazon Simple Storage Service(Amazon S3) 버킷의 DynamoDB 데이터에 액세스할 수 없습니다. 데이터를 사용하여 작업하려면 DynamoDB 테이블로 데이터를 복원합니다.

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단계를 반복합니다.