![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/AWS-DMS-Icon-300x192.png)
AWS DMS
데이터베이스 및 분석 워크로드를 AWS로 빠르고 안전하게 이동하여 가동 중단 시간 및 데이터 손실을 방지하는 데 도움이 되는
관리형 마이그레이션 및 복제 서비스입니다.
본 게시물은 AWS DMS를 활용하여 EC2에 설치된 DB의 데이터를 RDS로 마이그레이션 하는 과정을 담고있습니다
1. 소스 DB 설치 및 구성
❗️본 게시물은 DMS 실습을 위한 리소스 생성 단계부터 시작하므로 DMS 사용 과정만 궁금하신 분들은
게시물 하단 부분에 ‘AWS DMS 설정‘ 부터 보시는 것을 권장합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/1.db-install.png)
yum -y install mariadb mariadb-devel mariadb-server
EC2 인스턴스에 소스 데이터베이스를 설치
– 해당 인스턴스는 퍼블릭 서브넷에 위치합니다
– OS는 Amazon-Linux2로 진행하였습니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/2.-db-start.png)
sudo systemctl restart mariadb sudo systemctl enable mariadb sudo systemctl status mariadb
데이터베이스 시작 및 상태 확인
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/3.-db-config.png)
mysql_secure_installation
데이터베이스 초기 설정 구성
– 처음 Root 암호 입력은 공백 상태로 Enter를 입력하고 그 후 모든 설정 값에 대해서는 Y를 입력하여 진행합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/4.-db-connect.png)
데이터베이스에 접속
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/5.-user-create.png)
create user 'user name'@'%' identified by 'password';
유저 생성
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/6.-create-schema.png)
create database 'name';
스키마 생성
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/7.-create-table-1.png)
create table 'table name' (name char(20) NOT NULL PRIMARY KEY, city char(20) NOT NULL, age int NOT NULL);
테스트용 테이블 생성
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/7.-create-table.png)
insert into 'table name' values('value1','value2','value3');
테이블에 데이터 추가
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/9.-table-check.png)
select * from 'table name';
테이블과 데이터가 잘 생성이 됐는지 확인
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/10.-grant.png)
grant all privileges on *.* to 'user name'@'%';
위에서 생성한 유저에게 권한을 부여
2. 마이그레이션 대상이 될 RDS 생성
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/11.-create-rds.png)
AWS 콘솔에서 RDS로 이동하여 마이그레이션 대상이 될 RDS를 생성
– 본 실습에서는 소스 DB와 같은 엔진인 MariaDB를 사용하였습니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/12.-create-rds2.png)
DB 인스턴스 이름 및 마스터 사용자 이름과 비밀번호를 설정
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/26.-dms-instance2-1.png)
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/14.-create-rds4.png)
DB 인스턴스 크기 및 스토리지 설정
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/15.-create-rds5.png)
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/16.-create-rds6.png)
RDS 네트워크 설정
– VPC는 소스 DB가 설치된 EC2 인스턴스가 위치한 VPC로 설정하였습니다
– 보안 그룹 설정으로는 인바운드 규칙에서 이후에 생성할 DMS 복제 인스턴스의 보안 그룹에 대해 3306 포트를 허용하였습니다
(기본으로 두고 이후에 보안 그룹을 수정하셔도 됩니다)
– 가용 영역 역시 소스 DB가 위치한 가용 영역을 설정하였습니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/17-create-rds7.png)
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/18.-create-rds8.png)
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/19.-create-rds9.png)
모니터링 OFF, 초기 DB 이름 입력, 마이너 버전 자동 업그레이드 사용 OFF 등 기타 옵션 설정 후 RDS 생성
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/20.-create-rds10.png)
마이그레이션 대상이 될 RDS가 생성된 것을 확인
3. AWS DMS 설정
1. 서브넷 그룹 생성
2. 복제 인스턴스 생성
3. 소스 및 타겟 엔드포인트 생성
4. 마이그레이션 작업 생성
복제 서브넷 그룹 생성
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/21.-dms.png)
AWS 콘솔에서 DMS 검색 후 이동
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/22.-dms-subnet.png)
좌측 메뉴에서 ‘서브넷 그룹’ 탭 클릭
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/23.-dms-subnet2.png)
복제 서브넷 그룹을 생성
– VPC를 선택하면 서브넷 추가가 나오며 여기서 퍼블릭 서브넷을 선택합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/24.-dms-subnet3.png)
복제 서브넷 그룹이 생성된 것을 확인
DMS 복제 인스턴스 생성
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/25.-dms-instance.png)
다음으로 복제 인스턴스를 생성하기 위해 좌측 메뉴에서 ‘복제 인스턴스’ 탭으로 이동
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/26.-dms-instance2.png)
복제 인스턴스 생성을 클릭하여 인스턴스를 구성
– 복제 인스턴스 클래스는 작업에 따라 달라집니다
(마이그레이션에 적합한 DMS 인스턴스 유형)
– 다중 AZ 옵션을 통해 복제 인스턴스의 고가용성을 확보할 수 있습니다
(해당 실습에서는 단일 AZ로 설정했습니다)
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/27.-dms-instance3.png)
복제 인스턴스의 스토리지 구성
– 복제 인스턴스의 스토리지는 로그 파일들을 버퍼하거나 사용해야하기 때문에 소스 데이터베이스가 큰 경우에는
스토리지 용량도 커야할 필요성이 있습니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/28-dms-instance4.png)
복제 인스턴스의 네트워크 및 보안 설정
– VPC와 위에서 먼저 생성한 복제 서브넷 그룹을 선택합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/29.-dms-instance5.png)
가용 영역 및 보안 그룹 설정
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/30.-dms-instance6.png)
복제 인스턴스에 대한 유지 관리 설정도 가능
– 본 실습에서는 마이너 버전 자동 업그레이드를 비활성화 하였습니다.
❗️복제 인스턴스는 지속적으로 과금이 발생하며 DMS 복제 인스턴스 콘솔에서만 보이므로 실습 후 삭제하도록 합니다❗️
DMS 엔드포인트 생성
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/31.-dms-endpoint.png)
다음으로는 소스 및 타겟 엔드포인트를 생성
– 각 엔드포인트를 복제 인스턴스와 연결하여 마이그레이션 작업을 수행합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/32.-dms-endpoint2.png)
먼저 소스 엔드포인트를 생성
– 소스 엔드포인트는 기존의 데이터베이스를 의미합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/33.-dms-endpoint3.png)
소스 엔드포인트 이름 및 엔진을 선택
– 소스 데이터베이스의 엔진을 선택합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/34.-dms-endpoint4.png)
소스 데이터베이스에 대한 정보를 수동으로 제공
– 서버 이름 / DB가 설치된 EC2 인스턴스의 프라이빗 IP 주소
– 포트 / DB의 포트 정보
– 사용자 이름 및 암호 / DB에서 권한을 부여한 유저의 정보
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/35.-dms-endpoint5-1024x312.png)
제일 하단 부분에 엔드포인트 연결 테스트에서 테스트 실행
– 생성한 복제 인스턴스와 엔드포인트에 대한 연결을 테스트합니다
– successful 상태가 된다면 성공적으로 연결된 것이며 failed 상태가 된다면 구성을 다시 체크합니다
(DMS 엔드포인트 테스트 연결 실패 문제 해결)
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/36.-dms-endpoint6.png)
소스 엔드포인트 구성이 완료됐다면 대상 엔드포인트를 생성할 차례
– 대상 엔드포인트는 마이그레이션의 대상이 될 데이터베이스를 의미합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/37.-dms-endpoint7-1.png)
대상 엔드포인트의 이름과 데이터베이스의 엔진, 정보를 제공
– 서버 이름 / RDS의 DNS 주소
– 포트 / DB의 포트 정보
– 사용자 이름 / DB의 사용자 정보
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/38.-dms-endpoint8.png)
대상 엔드포인트 연결 테스트
– 대상 엔드포인트도 제일 하단에서 연결 테스트를 수행합니다
– VPC와 연결 테스트를 수행할 복제 인스턴스를 선택합니다
– 소스 엔드포인트와 마찬가지로 상태가 successful이 된다면 연결에 성공한 것입니다
DMS TASK 생성
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/39.-dms-task1.png)
좌측 메뉴에서 ‘데이터베이스 마이그레이션 태스크’ 탭으로 이동
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/40.-dms-task2.png)
새 Task 생성 및 구성
– 태스크의 이름과 복제 인스턴스, 소스 및 대상 엔드포인트를 선택하고 마이그레이션 유형을 설정합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/41.-dms-task3.png)
Task 설정
– 본 실습에서는 태스크 설정을 최소화 하였습니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/42.-dms-task4.png)
테이블 매핑에서 편집 모드 및 규칙 설정
– 편집모드에서 콘솔 방식 및 코드 방식을 선택할 수 있습니다
(JSON을 사용한 테이블 선택 및 변환 규칙 지정)
– 소스 이름 및 테이블 이름을 입력하고 작업에서 포함 및 제외 설정이 가능합니다
(선택 규칙 및 변환 규칙 테스트는 다른 게시물에서 다뤄보도록 하겠습니다)
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/43.-dms-task5.png)
Task 시작 구성 설정
– 태스크를 생성과 동시에 시작할 것인지 수동으로 시작할 것인지 선택합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/44.-dms-task6-1024x362.png)
Task 시작
– 태스크 생성과 동시에 시작합니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/45.-dms-task7-1024x151.png)
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/46.-dms-task8-1024x543.png)
Task 작업 완료 확인
– 작업이 완료되면 작업에 대한 세부 정보를 확인할 수 있습니다
– 작업에 실패한 경우 실패 메시지를 통해 어떠한 부분이 문제인지 파악할 수도 있습니다
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/47.-dms-task9.png)
Task 작업 콘솔에서 데이터베이스 테이블 확인
![](http://blog.a-cloud.co.kr/wp-content/uploads/2023/01/49.-dms-task11.png)
mysql -u 'user name' -p -h 'RDS DNS'
RDS로 접속하여 테이블 확인
– 직접 RDS로 접속하여 테이블을 확인한 결과 데이터들이 전부 마이그레이션 된 것을 확인할 수 있었습니다
❗️실습을 마치신 후에는 과금 발생을 막기 위해 반드시 실습에 사용한 리소스를 삭제해주세요❗️
– EC2 인스턴스 / RDS / DMS 복제 인스턴스
지금까지 AWS DMS의 사용 방법에 대해 알아보았습니다.
본 실습은 같은 VPC에 위치한 소스 DB의 데이터를 RDS로 마이그레이션 하였으며
소스 DB가 다른 VPC, 혹은 온프레미스에 있는 경우 구성이 달라지는 부분이 있으니 이 점 유의하시길 바랍니다.
감사합니다.