목표
- 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
sudo systemctl enable mysqld
sudo systemctl start mysqld
sudo grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Bigdata12!@';
create user 'test'@'%' identified by 'Bigdata12!@';
grant all privileges on *.* to 'test'@'%';
FLUSH PRIVILEGES;
create database testdb;
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()
sudo yum install python3-pip
pip install pymysql
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
데이터베이스 마이그레이션 태스크 생성
- 태스크 식별자 : my-task
- 복제 인스턴스 : my-instance
- 소스 데이터베이스 엔드포인트 : source-endpoint
- 대상 데이터베이스 엔드포인트 : dest-endpoint
- 테이블 매핑 선택 규칙 추가
- 스키마 입력
- 소스 이름 : testdb
- 소스 테이블 이름 : %
확인
- S3에 들어가서 parquet으로 잘 저장되었는지 확인한다.