AWS 기술 블로그
AWS DMS Homogenous Migration 을 사용한 PostgreSQL 에서 Aurora PostgreSQL 로 마이그레이션하기
이 글은 AWS Database Blog에 게시된 AWS DMS homogenous migration from PostgreSQL to Amazon Aurora PostgreSQL by Nagarjuna Paladugula, Bhavani Akundi, and InduTeja Aligeti을 한국어 번역 및 편집 하였습니다.
AWS Database Migration Service에서 Homogeneous(동종) 마이그레이션 기능을 일부 AWS Region 에서 지원을 시작했습니다. Seoul Region의 경우 2024년 8월 1일부터 지원을 시작했습니다.
AWS DMS 동종 마이그레이션 기능을 통해서 소스 데이터베이스에서 동일한 엔진으로 기존의 데이터베이스 툴을 사용해서 마이그레이션을 할 수 있습니다.
동종 데이터 마이그레이션은 서버리스 환경이므로 AWS DMS가 마이그레이션에 필요한 환경을 자동으로 프로비저닝 합니다. 동종 데이터 마이그레이션을 통해 테이블, 파티션 테이블, 데이터 타입을 비롯해 함수, 스토어드 프로시저, 트리거, 인덱스와 같은 부수적인 오브젝트들도 마이그레이션 할 수 있습니다. 호환되는 소스와 타겟의 데이터 공급자(Data Provider)로 마이그레이션 프로젝트를 만들면 AWS DMS가 소스 데이터 공급자(Data Provider)에 연결되어 소스 데이터를 읽어서 디스크의 파일로 덤프를 수행하며 내장된 데이터베이스 툴을 사용하여 데이터를 복원합니다.
이 글을 통해서 전체 동종 마이그레이션 프로세스의 예를 보여드리며 PostgreSQL에서 Amazon Aurora PostgreSQL-Compatible Edition 와 Amazon Relational Database Service(Amazon RDS) for PostgreSQL로 마이그레이션하기 위한 문제 해결 단계를 보여드리겠습니다.
솔루션 개요
다음의 다이어그램은 AWS DMS에서 동종 데이터 마이그레이션을 사용하여 PostgreSQL 데이터베이스를 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL로 마이그레이션하는 프로세스를 보여줍니다. AWS DMS는 데이터 마이그레이션을 위한 서버리스 환경을 만듭니다.
여러 타입의 데이터 마이그레이션의 경우 DMS에서는 각기 다른 PostgreSQL 데이터베이스 툴을 사용합니다.
전체 로드(Full Load) 타입의 동종 데이터 마이그레이션의 경우DMS는 pg_dump를 사용하여 소스 데이터베이스에서 데이터를 읽고 서버리스 환경에 연결된 디스크에 저장됩니다. DMS는 모든 소스 데이터를 읽은 후 타겟 데이터베이스에서 pg_restore를 사용하여 데이터를 복원합니다.
전체 로드 & 지속적인 복제(Full Load & CDC) 인 동종 데이터 마이그레이션의 경우 DMS는 pg_dump와 pg_restore를 사용하여 소스에서 메타데이터를 읽고 타겟에 메타데이터를 로드하고 덤프 파일의 저장소로서 서버리스 환경에 연결된 디스크를 사용합니다. DMS는 타겟에 메타 데이터를 로드 한 후 초기 동기화를 위해 PostgreSQL 의 게시자(subscriber)와 구독자(publisher) 모델을 사용한 다음 복제를 수행합니다. 이 모델에서 하나 이상의 구독자(publisher)는 게시자(subscriber) 노드에서 하나 이상의 게시를 구독합니다.
지속적인 복제(CDC)를 사용한 동종 데이터 마이그레이션의 경우 AWS DMS는 복제를 시작하기 위해 네이티브 Start Position이 필요합니다. 네이티브 Start Position 을 입력하는 경우 DMS는 해당 지점에서 변경 사항을 캡처합니다. 또는 데이터 마이그레이션 설정에서 Immediately를 선택하여 실제 데이터 마이그레이션이 시작될 때 복제 시작점을 자동으로 캡처하게 할 수 있습니다.
사전 요구 사항
다음 다이어그램은 동종 데이터 마이그레이션이 작동하는 방식과 필요한 구성 요소를 보여줍니다.
AWS DMS 동종 마이그레이션은 인스턴스 프로파일에서 캡처한 데이터 공급자(Data Provider), 네트워크, 보안 세부 정보를 사용하여 소스 데이터베이스와 타겟 데이터베이스에 연결합니다. 다음 섹션에서는 이러한 구성 요소를 만드는 방법을 보여드립니다.
RDS for PostgreSQL 인스턴스 생성
이번 예제에서는 PostgreSQL 버전 14를 사용합니다. 데이터베이스를 생성하는 방법에 대한 참고는 Amazon RDS로 PostgreSQL 데이터베이스 생성 및 연결을 참조하십시오. 이 글에서는 다음 오브젝트들이 포함된 DVD 대여 샘플 데이터베이스를 예로 들어보겠습니다.
- 15개 테이블
- 1개 트리거
- 7개 뷰
- 8개 함수
- 1개 도메인
- 13개 시퀀스
소스 데이터베이스 설정을 위해서 커맨드 프롬프트를 사용해 아래의 예제처럼 PostgreSQL 로 로그인합니다:
psql "host=postgres.xxxx11hxxxxx.us-east-1.rds.amazonaws.com port=5432 dbname= dvdrental user= USERNAME password= PASSWORD"
연결 후 아래의 명령어로 데이터베이스의 상세 정보를 확인해봅니다.
소스 데이터베이스 권한 구성
소스와 타겟 데이터베이스가 CDC를 처리하려면 구성 변경이 필요합니다.
소스 데이터베이스에서 PostgreSQL 소스 데이터베이스에 대해 DMS에서 지정한 데이터베이스 사용자에 대한 Superuser 권한을 부여합니다. 데이터베이스 사용자는 소스에서 복제 관련 기능에 액세스하려면 Superuser 권한이 필요합니다. 전체 로드(Full load) 데이터 마이그레이션의 경우 데이터베이스 사용자는 테이블을 마이그레이션하기 위해 테이블에 대한 SELECT 권한이 필요합니다. 다음 구문을 참조하십시오.
RDS PostgreSQL 데이터베이스를 소스로 사용시 권한 구성
DMS에서 동종 데이터 마이그레이션을 위한 PostgreSQL 소스 데이터 공급자(provider)의 사용자 계정으로 PostgreSQL DB 인스턴스의 AWS 디폴트 사용자 계정을 사용합니다. 디폴트 사용자 계정에는 CDC를 설정하는 데 필요한 역할이 있습니다. 디폴트 사용자 계정이 아닌 다른 계정을 사용하는 경우 계정에 rds_superuser 역할과 rds_replication 역할이 있어야 합니다. rds_replication 역할은 Logical replication을 관리하고 Logical replication을 사용하여 데이터를 스트리밍할 수 있는 권한이 부여되어 있습니다. 다음 구문을 참조하십시오.
온프레미스 PostgreSQL 데이터베이스를 소스로 사용시 권한 구성
소스로 on-prem PostgreSQL 데이터베이스를 사용하는 경우 데이터베이스에 매핑 된 파라미터 그룹 레벨에서 다음 설정을 수정합니다.
[설정 파라마터 목록]
- wal_level – logical 로 설정.
- max_replication_slots – 1 보다 큰 값으로 설정.
- max_replication_slots – 1 보다 큰 값으로 설정.
- max_wal_senders – 1 보다 큰 값으로 설정
- max_wal_senders – 1 보다 큰 값으로 설정
- wal_sender_timeout – 0 으로 설정. 이 파라미터는 지정된 밀리초 보다 오래된 Inactive 상태인 복제 연결을 종료합니다. 디폴트 값은 60,000밀리초(60초)입니다. 값을 0으로 설정하면 이 매카니즘이 비활성화됩니다.
이전 파라미터를 업데이트한 후 PostgreSQL 소스 데이터베이스를 재시작합니다.
본 케이스에서는Aurora PostgreSQL 버전 15를 사용합니다.
IAM Policy 와 Role 생성
AWS Identity and Access Management (IAM) policy 와 role 이 필요합니다.
데이터베이스 권한 설정
AWS DMS는 PostgreSQL 또는 Aurora PostgreSQL 데이터베이스용 타겟 RDS로 데이터를 마이그레이션하기 위해 특정 권한이 필요합니다.
다음 스크립트는 PostgreSQL 타겟 데이터베이스에서 필요한 권한이 부여된 데이터베이스 유저를 만듭니다.
DMS는 이 동종 마이그레이션에 구독자(Subscriber)와 게시자(Publisher) 방법을 사용하므로 DB 파라미터 그룹의 rds.logical_replication 을 1로 설정하고 데이터베이스를 재시작 해야 합니다. 재시작은 업데이트된 파라미터 그룹 변경 사항이 반영되도록 하는 데 필요합니다.
AWS Secrets Manager에 소스와 타겟 데이터베이스 자격 증명(Credentials)을 저장할 수 있습니다. 자세한 내용은 하드코딩된 데이터베이스 자격 증명 Move hardcoded database credentials to AWS Secrets Manager 을 참고해 주십시오.
다음으로 데이터 공급자, 서브넷 그룹, 인스턴스 프로필을 만듭니다.
데이터 공급자(Data Provider) 생성
데이터 공급자를 생성하는 과정은 DMS의 소스 데이터베이스 엔드포인트 설정과 유사합니다
Source Provider 생성
DMS에서 PostgreSQL 데이터베이스를 동종 데이터 마이그레이션의 소스로 사용할 수 있습니다. 이 경우 소스 데이터 Provider는 온프레미스, Amazon Elastic Compute Cloud(Amazon EC2), RDS for PostgreSQL 데이터베이스에 호스팅 될 수 있습니다. 글을 포스팅하는 시점에서 Amazon Aurora PostgreSQL은 소스 Provider로 지원되지 않은 상태입니다.
마이그레이션 프로젝트를 유일하게 식별할 수 있는 소스 Provider 이름을 제공하고 엔진 유형, 서버 이름, 포트, 데이터베이스 이름, SSL 모드를 지정합니다.
Target Provider 생성
마이그레이션 프로젝트를 유일하게 식별할 수 있는 타겟 Provider 이름을 추가하고 엔진 유형, 서버 이름, 포트, 데이터베이스 이름, SSL 모드를 지정합니다.
인스턴스 프로파일 생성
AWS DMS는 동종 데이터 마이그레이션을 위한 서버리스 환경을 만듭니다. 인스턴스 프로파일을 만들 때 사용할 VPC를 지정합니다. 계정과 리전에서의 디폴트 VPC를 사용하거나 신규 VPC를 만들 수 있습니다. 각 데이터 마이그레이션에 대해 AWS DMS는 인스턴스 프로파일에 사용한 VPC와 VPC Peering 연결을 설정합니다. 그런 다음 AWS DMS는 인스턴스 프로파일과 연결된 보안 그룹에 CIDR 블록을 추가합니다. AWS DMS는 인스턴스 프로파일에 Public IP 주소를 연결하므로 동일한 인스턴스 프로파일을 사용하는 모든 데이터 마이그레이션은 동일한 Public IP 주소를 갖습니다. 데이터 마이그레이션이 중지되거나 실패하면 AWS DMS는 VPC Peering 연결을 삭제합니다.
마이그레이션 프로젝트 생성
이제 이전 단계에서 만든 리소스를 사용하여 마이그레이션 프로젝트를 만들 수 있습니다.
DMS 콘솔에서 신규 데이터 마이그레이션 프로젝트를 생성합니다.
다음의 스크린샷에서 생성된 마이그레이션 프로젝트를 보여주고 있습니다.
데이터 마이그레이션 Task 생성과 실행
DMS 콘솔에서 마이그레이션 프로젝트를 클릭한 후 표시되는 Data Migrations 탭에서 신규 데이터 마이그레이션 태스크를 생성하기 위해서 데이터 마이그레이션 생성하기를 클릭합니다.
데이터 마이그레이션 태스크를 생성하는 정보를 아래와 같이 입력합니다.
– Number of jobs (옵션) – 고급 설정을 확장하면 동시 작업을 진행할 병렬 스레드 수를 입력할 수 있습니다. 2 에서 50까지 지정이 가능합니다.
– Selection Rule (옵션): 마이그레이션 대상 스키마와 테이블 대한 선택 규칙을 지정합니다.
– Stop mode 에는 두가지 옵션이 있습니다.
- Don’t stop CDC – 전체 로드(Fullload)가 완료되면 CDC가 즉시 시작되고 Task 은 실행 상태가 됩니다. 이 옵션은 지속적인 데이터 복제(CDC)를 위한 것입니다.
- Using a server time point – 전체 로드(Fullload)가 완료되면 UTC시간으로 소스 서버의 CDC 중지 지점을 지정할 수 있습니다. 이를 통해 지정된 시간에 마이그레이션 Task를 중지할 수 있습니다.
마이그레이션 태스크 생성이 완료 된 후 태스크를 시작합니다.
다음은 시작시에 타겟 데이터베이스의 오브젝트 삭제 경고 메시지가 팝업창으로 보여집니다.
태스크를 클릭해서 표시되는 상세 페이지에서 태스크의 상태 및 정보를 확인할 수 있습니다
마이그레이션 검증
데이터가 마이그레이션된 후에는 타겟에서 오브젝트를 볼 수 있습니다. 타겟 PostgreSQL 데이터베이스에 로그인하고 \dt 명령을 실행하여 relation 의 리스트를 조회하고 \di 명령을 실행하여 인덱스를 조회합니다.
CDC 시나리오 테스트
마이그레이션이 시작되면 소스 데이터베이스에 publication slot 이 생성됩니다. 다음 쿼리를 실행하여 publication slot 아래에 있는 테이블을 볼 수 있습니다.
Note : pubname 은 publication id이여야 합니다.
소스에서 CDC 시나리오를 테스트 하기 위해 insert 와 update를 dvdrental 데이터베이스의 sample 테이블에서 대해 수행해봅니다
타겟 데이터베이스 상에서 다음의 스크린샷에서 조회되는 것처럼 subscriber 는 ID 21838 로 시작됩니다.
타겟에서 다음 업데이트를 확인할 수 있습니다.
마이그레이션 중에 문제나 검증이 있는 경우 소스와 타겟 데이터베이스의 로그를 확인해주십시오.
다음 스크린샷은 소스 데이터베이스의 로그 예를 보여주고 있습니다.
다음 타겟 데이터베이스 로그에서 max_logical_replication_workers와 관련된 경고 메시지를 발견할 수 있습니다. max_logical_replication_workers 파라미터 값을 늘리면 전체 마이그레이션 시간이 줄어들 수 있습니다.
제약 사항
다음과 같은 제약사항을 가지고 있습니다.
- 소스와 타겟에 연결할 유저명은 다음과 같은 요구 사항이있습니다.
- 길이는 2~64자여야합니다.
- 공백이포함될 수 없습니다.
- 다음의 문자가 포함될 수 있습니다. a~z, A~Z, 0~9, 밑줄(_).
- a~z 또는 A~Z로 시작해야 합니다.
- 소스와 타겟에 연결하는데 사용되는 패스워드는 다음과 같은 요구사항이 있습니다.
- 길이는 1~128자여야 합니다.
- 다음 중 하나를 포함할 수 없습니다. 작은따옴표(‘), 큰따옴표(“), 세미콜론(;), 공백
- 동종 데이터 마이그레이션은 선택 규칙(Selection Rule)은 지원하지만 변환규칙(Transformation Rule)을 사용하여 컬럼의 데이터 유형을 변경하거나 한 스키마에서 다른 스키마로 오브젝트를 이동하거나 오브젝트 명을 변경할 수 없습니다.
- 동종 데이터 마이그레이션은 데이터 검증을 위한 디폴트 툴을 제공하지 않습니다.
- PostgreSQL에서 동종 데이터 마이그레이션을 사용할 때 DMS는 뷰(View)를 테이블로서 타겟 데이터베이스로 마이그레이션합니다.
- 동종 데이터 마이그레이션은 진행 중인 데이터 복제 중에 스키마 수준의 변경 사항을 캡처하지 않습니다. 소스 데이터베이스에 새 테이블을 만들면 DMS가 이 테이블을 마이그레이션할 수 없습니다. 이 새 테이블을 마이그레이션하려면 데이터 마이그레이션을 다시 시작해야 합니다
- DMS에서 동종 데이터 마이그레이션을 사용하여 데이터베이스 상위 버전에서 하위 버전으로 데이터를 마이그레이션할 수 없습니다.
- AWS 커맨드 라인 인터페이스(AWS CLI) 또는 API는 동종 데이터 마이그레이션에서는 사용할 수 없습니다.
- 동종 데이터 마이그레이션은 VPC 보조 CIDR 범위에 있는 데이터베이스 인스턴스와의 연결을 설정하는 것을 지원하지 않습니다.
- 데이터 공급자(Data Provider)에서 동종 마이그레이션은 8081 포트를 사용할 수 없습니다.
동종 마이그레이션 이슈 해결
데이터 마이그레이션 작업 실패로 이어진 연결에 관련된 문제가 발생된 경우 다음을 확인해 주십시오.
• 소스 및 타겟 인스턴스의 보안 그룹(Security Group) 에 데이터 IP/포트에 대한 인바운드나 아웃바운드 트래픽에 대한 규칙이 포함되어 있는지 확인해주십시오. 또한 NACL 이나 라우팅 테이블 규칙도 확인해주십시오.
• 온프레미스나 Amazon EC2 데이터베이스는 생성된 VPC를 통해 액세스할 수 있어야 합니다. 그렇지 않은 경우 방화벽에서 입력된 연결 대상을 허용할 수 있도록 보안 그룹에 다음을 추가해주십시오.
- 온프레미스 인스턴스의 Public IP를 추가합니다.
- AWS 관리형 데이터베이스의 Public IP를 추가합니다.
- 데이터 마이그레이션 작업의 Elastic IP 주소를 추가합니다(Task가 생성된 후 Elastic IP가 부여됩니다).
• CDC 연결의 경우 소스와 타겟 데이터베이스가 서로 통신할 수 있어야 합니다.
• AWS DMS 동종 인스턴스의 Elastic IP 주소가 소스나 타겟 데이터베이스의 Security Group (데이터베이스 포트)에 추가되었는지 확인합니다.
또한 필수 사전 구성 요소가 누락되어 태스크 실패가 발생할 수도 있습니다. 이 경우 오류 메시지는 다음과 같습니다.
이 경우에는 소스와 타겟에서 logical Replication이 양쪽 다 반드시 활성화 되어야 합니다.
로그 파일
다음 스크린샷과 같이 마이그레이션 프로젝트의 Details 정보 페이지에서 데이터베이스 마이그레이션 진행률과 로그를 볼 수 있습니다.
다음은 마이그레이션 프로젝트의 Amazon CloudWatch log 의 예입니다.
정리
AWS DMS 동종 마이그레이션으로 생성된 AWS 리소스가 사용 중에는 계속 비용이 발생합니다. 리소스가 더 이상 필요하지 않으면 마이그레이션 프로젝트와 함께 연관된 데이터 마이그레이션을 삭제하여 정리해주십시오
결론
이 글에서는 AWS DMS 동종 마이그레이션과 PostgreSQL DB 엔진을 사용하여 데이터를 구성하고 마이그레이션하는 End-to-End 프로세스에 대해서 설명 드렸습니다. 최신 AWS DMS 동종 마이그레이션 기능은 PostgreSQL에서 Amazon Aurora PostgreSQL 또는 Amazon RDS for PostgreSQL로 쉽고 최소한의 노력으로 마이그레이션할 수 있습니다. 여러분의 생각, 질문이 있으시면 댓글로 남겨주십시오.