DMS (EC2 mysql to S3)

Volc·2024년 2월 2일
0

AWS

목록 보기
6/6

목표

  • DMS를 통해 EC2 mysql에서 S3로 데이터를 migration 한다.

Mysql 설치

  • 우선 EC2를 생성해 myqsl을 설치해보자.
  • EC2 인스턴스 설정
    • 이름 설정
    • OS : Amazon Linux 프리티어
    • 인스턴스 유형 : 프리티어
  • 터미널 환경에 접속하여 mysql을 설치한다.
sudo yum install http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

sudo yum install mysql-community-server
  • mysql을 실행시킨다.
sudo systemctl enable mysqld

sudo systemctl start mysqld
  • 초기 비밀번호를 알아야 한다.
sudo grep 'temporary password' /var/log/mysqld.log
  • root로 접속해본다.
mysql -u root -p
  • root 비밀번호를 변경한다.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Bigdata12!@';
  • test 계정을 만든다.
create user 'test'@'%' identified by 'Bigdata12!@';
  • test 계정에 모든 권한을 부여한다.
grant all privileges on *.* to 'test'@'%';

FLUSH PRIVILEGES;
  • db를 생성한다.
create database testdb;
  • table을 만든다.
use testdb;

CREATE TABLE member_table (
 NAME    VARCHAR(20),
 AGE     INT,
 PRIMARY KEY(AGE)
) ENGINE=MYISAM CHARSET=utf8;
  • mysql을 나와 table에 데이터를 넣어주는 python script를 작성합니다.
import pymysql
import time


jh_db = pymysql.connect(
    user="test", 
    passwd="Bigdata12!@", 
    host="127.0.0.1", 
    db="testdb", 
    port=3306,
    charset='utf8'
)

cursor = jh_db.cursor(pymysql.cursors.DictCursor)
  
def insertsql():
    sql_query = """INSERT INTO member_table(NAME, AGE) VALUES (%s, %s)"""
    i = 0
    while i < 100:
        i = i + 1
        cursor.execute(sql_query,('jh'+str(i), i))
        jh_db.commit()
        time.sleep(1)
    jh_db.close()

    
if __name__ == "__main__":
    insertsql()
  • pymysql 라이브러리를 설치합니다.
sudo yum install python3-pip
pip install pymysql
  • python script를 실행한다.
python3 sc.py

인바운드 규칙 설정

  • EC2의 보안그룹에 들어가 인바운드 규칙에 3306을 추가합니다.

S3 버킷 생성

  • AWS 리전 : 서울(ap-northeast-2)
  • 버킷 이름 : my-bucket

IAM Role 생성

  • console에 IAM에 들어가 역할을 생성한다.
  • AWS 서비스 선택
  • 사용 사례 : DMS
  • 권한 정책 : AmazonS3FullAccess 선택
  • 역할 이름 : dms-role

DMS 서브넷 그룹 생성

  • 이름 : my-subnet-group
  • vpc 선택
  • subnet 추가 : 2개 추가

DMS 복제 인스턴스 생성

  • 이름 : my-instance
  • VPC 선택 : 기본 VPC
  • 복제 서브넷 그룹 선택 : my-subnet-group

Source endpoint 생성

  • 소스 엔드포인트 선택
  • 엔드포인트 식별자 : source-endpoint
  • 소스 엔진 : mysql
  • 수동으로 액세스 정보 제공 선택
  • 서버 이름 : EC2의 private dns 주소
  • 포트 : 3306
  • 사용자 이름 : testdb
  • 암호 : Bigdata12!@

Destination endpoint 생성

  • 대상 엔드포인트 선택
  • 엔드포인트 식별자 : dest-endpoint
  • 대상 엔진 : Amazon S3
  • 서비스 액세스 역할의 Amazon 리소스 이름(ARN) : IAM의 역할에 들어가 dms-role의 ARN을 복사
  • 버킷 이름 : my-bucket
  • 버킷 폴더 : dms/
  • 엔드포인트 설정 : DataFormat=parquet
    • 설정 하지 않으면 csv로 S3에 저장된다.

데이터베이스 마이그레이션 태스크 생성

  • 태스크 식별자 : my-task
  • 복제 인스턴스 : my-instance
  • 소스 데이터베이스 엔드포인트 : source-endpoint
  • 대상 데이터베이스 엔드포인트 : dest-endpoint
  • 테이블 매핑 선택 규칙 추가
    • 스키마 입력
    • 소스 이름 : testdb
    • 소스 테이블 이름 : %

확인

  • S3에 들어가서 parquet으로 잘 저장되었는지 확인한다.
profile
미래를 생각하는 개발자

0개의 댓글