본문 바로가기
일/aws

AWS DMS :: from aurora mySQL to S3

by blair2dev 2021. 12. 6.

DMS는 데이터베이스의 데이터를 빠르고 안전하게 aws 로 마이그레이션 할 수 있도록 도와준다. 

 

DMS 는 이기종 간 마이그레이션도 지원한다. 

여러 소스에서 s3 로 복제하여 데이터레이크 솔루션을 구축할 수도 있다. 

 

여기서는 오로라 디비의 데이터 증분을 지속적으로 복제하는 DMS  를 구축 해본다. 

 

DMS 는 네 가지를 생성하면 된다. 

  1. 복제 인스턴스
    복제를 수행할 컴퓨팅 파워이다.
  2. 타겟 엔드포인트
    데이터를 보낼 장소를 연결
  3. 소스 엔드포인트
    데이터를 가져올 장소를 연결
  4. 태스크
    복제 작업을 정의한다.

 

  1. 복제 인스턴스 생성
    이름과 인스턴스 타입, 엔진 버전을 선택한다. 엔진은 3.4.1 이상으로 만들어야 s3 파티션 별 복제가 가능하다.
    있어야 하는 VPC 를 선택하고 AZ 를선택한다. (운영은  다중 AZ)

 

  1. 엔드포인트
    여기서는 소스/타겟에 해당하는 엔드포인트를 설정해준다.

 

식별자와 엔진, 서버 주소와 포트, 접속 계정 정보등을 입력해준다. 

 

 

엔드포인트 설정은 기존에 만들어 두었던 설정 정보 json 이 없다면 마법사를 선택하고 

KMS 키가 있다면 선택 해준다 

엔드포인트 연결 테스트 에서는 복제 인스턴스 (실제로 복제를 프로세싱 해주는 인스턴스, DMS 복제 인스턴스 버전은 3.4.1 이상으로 해야 s3 복제가 가능해진다.) 와 VPC 를 선택해준 후 테스트를 해준다. 

 

테스트가 완료되면 엔드포인트 생성을 클릭하면 끝.

 

  1. 타겟 엔드포인트 생성

 

 타겟 엔드포인트는 데이터가 도착해야 할 위치이다. 

엔드포인트 이름 을 입력하고 대상 엔진에 Amazon S3를 선택한다. 그리고 원하는 버킷의 이름과 폴더를 입력

 

 

우리 서비스의 경우 에 해당하는 json 포맷을 입력하였다. 

{

  "CsvRowDelimiter": "\\n",                                             : 로우 단위 식별자 

  "CsvDelimiter": ",",               : csv 딜리미터

  "CompressionType": "GZIP", : 압축 타입

  "DataFormat": "parquet", : 데이터 타입

  "EnableStatistics": true,

  "DatePartitionEnabled": true, : 날짜별로 파티션 해서 넣어준다.

  "DatePartitionSequence": "yyyymmddhh", : 날짜 포맷

  "DatePartitionDelimiter": "slash" : 슬래쉬로 한정자

}

 

 

처음 구축시 필요하다면 엔드포인트 설정을 입력한다. 

https://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Target.S3.html

공식 문서에 필요한 파라미터에 대한 설명이 있으므로 참조하여 넣자. 

 

여기까지  완료가 되면 소스 엔드포인트에서 했던 것과 같이 VPC 와 복제인스턴스를 선택하고 테스트를 실행한 후 문제가 없다면 엔드포인트를 생성해준다. 

 

  1. 테스크 생성
    데이터 복제를 프로세싱하는 테스크를 생성한다.

 

테스크 식별자 : 테스크의 이름을 지어주면 된다. 

복제 인스턴스 : 위에서 생성한 복제인스턴스를 선택해준다. 

소스 엔드포인트 : 위에서 생성한 소스 엔드포인트 를 선택

대상 엔드포인트 : 위에서 생성한 타겟 엔드포인트를 선택 한다. 

마이그레이션 유형 : 우리는 현재 데이터를 모두 이동시키고 지속적인 증분데이터를 복제할 것이므로 “기존데이터 마이그레이션 및 지속적인 변경사항 복제”를 선택한다. 

 

 

테스크 설정에서는 마법사를 선택하고 

대상 테이블 준비모드는 아무작업 안함을 선택

 

아무 작업 안 함 - 테이블이 대상에 이미 있는 경우 그대로 남아 있습니다.  그렇지 않은 경우 AWS DMS에서 새 테이블을 만듭니다.

대상에서 테이블 삭제 - AWS DMS에서 테이블을 드롭하고, 그 위치에 새 테이블을 만듭니다.

자르기 - AWS DMS에서 테이블과 메타데이터를 그대로 두지만, 거기에서 데이터를 제거합니다.

 

cloud watch 는 활성화 한다. 

 

고급 테스크 설정 을 누른 후 

제어테이블에 대한 설정을 해준다. 

제어테이블은 복제 테스크의 상태에 대한 메타데이터를 저장해주는 테이블이다. 

복제상태, 일시중지된 테이블, 복제내역에 대한 활성화를 해준다. 

 

테이블 매핑은 아래의 예제를 참고한다. 

{

    "rules": [

        {

            "rule-type": "selection",

            "rule-id": "1",

            "rule-name": "1",

            "object-locator": {

                "schema-name": “DBNAME”,

                "table-name": “TABLENAME”

            },

            "rule-action": "include"

        },

        {

            "rule-type": "selection",

            "rule-id": "2",

            "rule-name": "2",

            "object-locator": {

                "schema-name": "DBNAME",

                "table-name": "TABLENAME"

            },

            "rule-action": "include"

    ]

}

 

  • 위 예제는 비식별화 컬럼이 존재하지 않아서 테이블 전체 데이터를 다 가져와도 될 때 사용
  • schema-name은 DB명, table-name은 테이블 이름

 

{

    "rules": [

        {

            "rule-type": "selection",

            "rule-id": "1",

            "rule-name": "1",

            "object-locator": {

                "schema-name": "DBNAME",

                "table-name": "TABLENAME"

            },

            "rule-action": "include"

        },

        {

            "rule-type": "transformation",

            "rule-id": "2",

            "rule-name": "2",

            "rule-target": "column",

            "object-locator": {

                "schema-name": "DBNAME",

                "table-name": "TABLENAME",

                "column-name": “EXCEPTCOL”

            },

            "rule-action": "remove-column"

  ]

}

 

  • 위 예제는 필요 없는 컬럼을 제외하고 S3로 마이그레이션 할 때 사용하는 예제

제외할 컬럼 지정 시 rule-type을 transformation, rule-target에 column, rule-action에 remove-column 을 명시해준다.

 

 

생성시 자동으로를 선택 태스크 생성을 누르면 태스크가 생성되고 자동으로 복제가 시작된다.