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

최종 업데이트 날짜: 2022년 5월 17일

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

간략한 설명

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

  1. DynamoDB 테이블 데이터를 다른 계정의 Amazon S3(Amazon Simple Storage Service) 버킷으로 내보냅니다.
  2. AWS Glue 작업을 사용하여 데이터를 가져옵니다.
  3. AWS Glue ETL 작업을 사용하여 DynamoDB 테이블에서 데이터를 읽은 다음 다른 계정의 DynamoDB 테이블에 데이터를 씁니다.
    참고: AWS Glue ETL 작업은 DynamoDB 테이블에 대한 교차 리전 및 교차 계정 액세스를 모두 지원합니다.

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

해결 방법

Amazon S3 및 AWS Glue

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 테이블에 씁니다. 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 스트림과 AWS Lambda를 사용하여 원본 테이블의 데이터 삽입 및 업데이트를 다른 계정의 대상 테이블로 마이그레이션합니다. 자세한 내용은Amazon DynamoDB를 사용한 교차 계정 복제를 참조하세요.

AWS Glue를 사용하여 DynamoDB 테이블에 교차 계정 액세스

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

Data Pipeline

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

참고: 대상 계정은 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단계를 반복합니다.

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


결제 또는 기술 지원이 필요합니까?