
AWS DMS
데이터베이스 및 분석 워크로드를 AWS로 빠르고 안전하게 이동하여 가동 중단 시간 및 데이터 손실을 방지하는 데 도움이 되는
관리형 마이그레이션 및 복제 서비스입니다.
본 게시물은 AWS DMS를 활용하여 EC2에 설치된 DB의 데이터를 RDS로 마이그레이션 하는 과정을 담고있습니다
1. 소스 DB 설치 및 구성
❗️본 게시물은 DMS 실습을 위한 리소스 생성 단계부터 시작하므로 DMS 사용 과정만 궁금하신 분들은
게시물 하단 부분에 ‘AWS DMS 설정‘ 부터 보시는 것을 권장합니다

yum -y install mariadb mariadb-devel mariadb-server
EC2 인스턴스에 소스 데이터베이스를 설치
– 해당 인스턴스는 퍼블릭 서브넷에 위치합니다
– OS는 Amazon-Linux2로 진행하였습니다

sudo systemctl restart mariadb sudo systemctl enable mariadb sudo systemctl status mariadb
데이터베이스 시작 및 상태 확인

mysql_secure_installation
데이터베이스 초기 설정 구성
– 처음 Root 암호 입력은 공백 상태로 Enter를 입력하고 그 후 모든 설정 값에 대해서는 Y를 입력하여 진행합니다

데이터베이스에 접속

create user 'user name'@'%' identified by 'password';
유저 생성

create database 'name';
스키마 생성

create table 'table name' (name char(20) NOT NULL PRIMARY KEY, city char(20) NOT NULL, age int NOT NULL);
테스트용 테이블 생성

insert into 'table name' values('value1','value2','value3');
테이블에 데이터 추가

select * from 'table name';
테이블과 데이터가 잘 생성이 됐는지 확인

grant all privileges on *.* to 'user name'@'%';
위에서 생성한 유저에게 권한을 부여
2. 마이그레이션 대상이 될 RDS 생성

AWS 콘솔에서 RDS로 이동하여 마이그레이션 대상이 될 RDS를 생성
– 본 실습에서는 소스 DB와 같은 엔진인 MariaDB를 사용하였습니다

DB 인스턴스 이름 및 마스터 사용자 이름과 비밀번호를 설정


DB 인스턴스 크기 및 스토리지 설정


RDS 네트워크 설정
– VPC는 소스 DB가 설치된 EC2 인스턴스가 위치한 VPC로 설정하였습니다
– 보안 그룹 설정으로는 인바운드 규칙에서 이후에 생성할 DMS 복제 인스턴스의 보안 그룹에 대해 3306 포트를 허용하였습니다
(기본으로 두고 이후에 보안 그룹을 수정하셔도 됩니다)
– 가용 영역 역시 소스 DB가 위치한 가용 영역을 설정하였습니다



모니터링 OFF, 초기 DB 이름 입력, 마이너 버전 자동 업그레이드 사용 OFF 등 기타 옵션 설정 후 RDS 생성

마이그레이션 대상이 될 RDS가 생성된 것을 확인
3. AWS DMS 설정
1. 서브넷 그룹 생성
2. 복제 인스턴스 생성
3. 소스 및 타겟 엔드포인트 생성
4. 마이그레이션 작업 생성
복제 서브넷 그룹 생성

AWS 콘솔에서 DMS 검색 후 이동

좌측 메뉴에서 ‘서브넷 그룹’ 탭 클릭

복제 서브넷 그룹을 생성
– VPC를 선택하면 서브넷 추가가 나오며 여기서 퍼블릭 서브넷을 선택합니다

복제 서브넷 그룹이 생성된 것을 확인
DMS 복제 인스턴스 생성

다음으로 복제 인스턴스를 생성하기 위해 좌측 메뉴에서 ‘복제 인스턴스’ 탭으로 이동

복제 인스턴스 생성을 클릭하여 인스턴스를 구성
– 복제 인스턴스 클래스는 작업에 따라 달라집니다
(마이그레이션에 적합한 DMS 인스턴스 유형)
– 다중 AZ 옵션을 통해 복제 인스턴스의 고가용성을 확보할 수 있습니다
(해당 실습에서는 단일 AZ로 설정했습니다)

복제 인스턴스의 스토리지 구성
– 복제 인스턴스의 스토리지는 로그 파일들을 버퍼하거나 사용해야하기 때문에 소스 데이터베이스가 큰 경우에는
스토리지 용량도 커야할 필요성이 있습니다

복제 인스턴스의 네트워크 및 보안 설정
– VPC와 위에서 먼저 생성한 복제 서브넷 그룹을 선택합니다

가용 영역 및 보안 그룹 설정

복제 인스턴스에 대한 유지 관리 설정도 가능
– 본 실습에서는 마이너 버전 자동 업그레이드를 비활성화 하였습니다.
❗️복제 인스턴스는 지속적으로 과금이 발생하며 DMS 복제 인스턴스 콘솔에서만 보이므로 실습 후 삭제하도록 합니다❗️
DMS 엔드포인트 생성

다음으로는 소스 및 타겟 엔드포인트를 생성
– 각 엔드포인트를 복제 인스턴스와 연결하여 마이그레이션 작업을 수행합니다

먼저 소스 엔드포인트를 생성
– 소스 엔드포인트는 기존의 데이터베이스를 의미합니다

소스 엔드포인트 이름 및 엔진을 선택
– 소스 데이터베이스의 엔진을 선택합니다

소스 데이터베이스에 대한 정보를 수동으로 제공
– 서버 이름 / DB가 설치된 EC2 인스턴스의 프라이빗 IP 주소
– 포트 / DB의 포트 정보
– 사용자 이름 및 암호 / DB에서 권한을 부여한 유저의 정보

제일 하단 부분에 엔드포인트 연결 테스트에서 테스트 실행
– 생성한 복제 인스턴스와 엔드포인트에 대한 연결을 테스트합니다
– successful 상태가 된다면 성공적으로 연결된 것이며 failed 상태가 된다면 구성을 다시 체크합니다
(DMS 엔드포인트 테스트 연결 실패 문제 해결)

소스 엔드포인트 구성이 완료됐다면 대상 엔드포인트를 생성할 차례
– 대상 엔드포인트는 마이그레이션의 대상이 될 데이터베이스를 의미합니다

대상 엔드포인트의 이름과 데이터베이스의 엔진, 정보를 제공
– 서버 이름 / RDS의 DNS 주소
– 포트 / DB의 포트 정보
– 사용자 이름 / DB의 사용자 정보

대상 엔드포인트 연결 테스트
– 대상 엔드포인트도 제일 하단에서 연결 테스트를 수행합니다
– VPC와 연결 테스트를 수행할 복제 인스턴스를 선택합니다
– 소스 엔드포인트와 마찬가지로 상태가 successful이 된다면 연결에 성공한 것입니다
DMS TASK 생성

좌측 메뉴에서 ‘데이터베이스 마이그레이션 태스크’ 탭으로 이동

새 Task 생성 및 구성
– 태스크의 이름과 복제 인스턴스, 소스 및 대상 엔드포인트를 선택하고 마이그레이션 유형을 설정합니다

Task 설정
– 본 실습에서는 태스크 설정을 최소화 하였습니다

테이블 매핑에서 편집 모드 및 규칙 설정
– 편집모드에서 콘솔 방식 및 코드 방식을 선택할 수 있습니다
(JSON을 사용한 테이블 선택 및 변환 규칙 지정)
– 소스 이름 및 테이블 이름을 입력하고 작업에서 포함 및 제외 설정이 가능합니다
(선택 규칙 및 변환 규칙 테스트는 다른 게시물에서 다뤄보도록 하겠습니다)

Task 시작 구성 설정
– 태스크를 생성과 동시에 시작할 것인지 수동으로 시작할 것인지 선택합니다

Task 시작
– 태스크 생성과 동시에 시작합니다


Task 작업 완료 확인
– 작업이 완료되면 작업에 대한 세부 정보를 확인할 수 있습니다
– 작업에 실패한 경우 실패 메시지를 통해 어떠한 부분이 문제인지 파악할 수도 있습니다

Task 작업 콘솔에서 데이터베이스 테이블 확인

mysql -u 'user name' -p -h 'RDS DNS'
RDS로 접속하여 테이블 확인
– 직접 RDS로 접속하여 테이블을 확인한 결과 데이터들이 전부 마이그레이션 된 것을 확인할 수 있었습니다
❗️실습을 마치신 후에는 과금 발생을 막기 위해 반드시 실습에 사용한 리소스를 삭제해주세요❗️
– EC2 인스턴스 / RDS / DMS 복제 인스턴스
지금까지 AWS DMS의 사용 방법에 대해 알아보았습니다.
본 실습은 같은 VPC에 위치한 소스 DB의 데이터를 RDS로 마이그레이션 하였으며
소스 DB가 다른 VPC, 혹은 온프레미스에 있는 경우 구성이 달라지는 부분이 있으니 이 점 유의하시길 바랍니다.
감사합니다.