[AWS DMS] RDS to OPENSEARCH

rejs·2024년 9월 1일

opensearch를 검색엔진으로 사용하기 위해선 일단 document를 넣어줘야한다.

logstash 또는 kafka connect 등을 사용할 수 있지만 AWS에 DMS 서비스가 있어서 사용하였다

RDS 설정

https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html

rds로는 maria_db를 사용한다.

RDS의 파라미터 그룹으로 가서 binlog_row_image를 FULL로 binlog_format를 ROW로 설정해주어야한다.
주의할점은 파라미터그룹을 변경했으면 RDS를 재부팅해야한다는 것이다.

Opensearch 생성하기

2가지를 주의해야한다.

  1. opensearch는 VPC액세스로 생성해야한다. 그렇지 않으면 접근을 못하는 듯 하다

  2. DMS는 세분화된 액세스 제어가 없는 도메인에서 작동한다

    • 액세스 정책이 지금은 "AWS" : ["*"]로 되어있는데 이 부분에 AWS IAM의 ARN을 넣어주면 된다. *로 한 경우 모든 AWS ROLE 및 USER가 접근할 수 있다는 뜻이다.

VPC 외부에서 OpenSearch 접근하기

https://repost.aws/ko/articles/ARlnlpfQIFSISRopWeP-zuVw/vpc-외부에서-open-search-dashboards에-엑세스하는-방법

VPC 내부의 EC2 인스턴스가 public으로 opensearch와 연결해주면 된다.

server {
        listen       80;
        listen       [::]:80;
        server_name  localhost;
        location / {
            proxy_pass <opensearch의 VPC 엔드포인트>;
        }  
}

이렇게 해주면 퍼블릭 IP를 가지는 EC2 인스턴스를 통해 vpc내부에 있는 opensearch에 접근할 수 있다.

배포할때는 EC2 인스턴스 내부(VPC내부)에 존재하므로 상관없을 거 같고, 개발할때(내컴퓨터=VPC외부) EC2인스턴스로 연결하면 된다. (또는 dashboards(=kibana)에 연결할때)

DMS

복제인스턴스 생성

db 마이그레이션의 옵션에는 동종데이터마이그레이션, 서버리스 복제, 인스턴스 기반 마이그레이션이 있는데 인스턴스 기반 마이그레이션을 선택하겠다

인스턴스 기반 마이그레이션은 이름 그대로 복제 인스턴스가 데이터를 마이그레이션 및 복제해주는 것이다.
즉 데이터를 마이그레이션 해줄 복제인스턴스가 필요하다.

AWS 프리티어는 dms.t2.micro인스턴스를 750시간(31.25일) 지원한다.

복제 서브넷 그룹 생성

복제 인스턴스를 생성하는 데 어려운 건 없는데, 주의할만한 점은 복제 서브넷을 생성해야한다는 것이다.


ReplicationSubnetGroupDescription과 관련된 메시지가 나오며 복제 인스턴스를 생성할 수 없다면 복제 서브넷을 확인해보자

VPC에서 생성하는 줄 알고 한참을 헤맸는데, 알고보니 DMS에 서브넷 그룹이 따로 있었다...

엔드포인트 생성

kafka connect도 source랑 sink가 있는 것처럼 dms도 엔드포인트를 만들어야한다

이번 주제가 RDS to Opensearch이므로 RDS가 소스 엔드포인트, Opensearch를 대상 엔드포인트로 2개의 엔드포인트를 생성해주면된다.

주의할점은 연결테스트를 꼭해주어야한다.
연결이 되지 않아도 일단 엔드포인트를 생성하기 때문이다.
DMS가 작동하지 않는다면 엔드포인트가 연결되는 지 먼저 확인해야한다.

OPENSEARCH 엔드포인트를 만들때 UseNewMappingType 옵션에 true값을 넣어주어야 제대로 작동한다

아시다시피 최신버전의 opensearch와 elasticsearch는 인덱스에 document를 넣어줄때 PUT /index/_doc을 사용하는 데 UseNewMappingType 옵션이 true가 아니면 PUT /index/doc으로 데이터를 넣으려고 시도한다.
이 속성의 기본값은 true로 해야하는 게 아닐까하는 생각이 든다.

데이터베이스 마이그레이션 테스크 생성하기

아까 만든 복제 인스턴스와 엔드포인트를 설정한다.

변경사항 복제 옵션(=CDC)을 선택하면 데이터베이스에서 DDL이 실행되면 그게 반영된다.

CloudWatch Logs는 키는 것이 좋다.
에러가 발생할 경우 DMS에서는 로그메시지를 따로 저장하지 않아서 왜 에러가 발생했는지 확인할 방법이 없다.
아래와 같은 에러는 로그를 보지 않고서는 찾을 방법이 없다.
(opensearch 엔드포인트의 UseNewMappingType를 true로 해주어야한다)

참고

https://dev.to/aws-builders/using-dms-to-replicate-data-from-rdsmysql-to-open-search-57cg
https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html
https://repost.aws/ko/articles/ARlnlpfQIFSISRopWeP-zuVw/vpc-외부에서-open-search-dashboards에-엑세스하는-방법

0개의 댓글