PythonSDK를 이용하여 RDS데이터베이스를 DynamoDB로 마이그레이션 하는 방법

3분 분량
콘텐츠 수준: 고급
0

해당 기사에서는 Python SDK인 Boto3를 이용하여 RDS의 테이블을 읽은뒤에 DynamoDB로 마이그레이션 하는 방법에 대해 알려드립니다.

많은 고객님들께서 MySQL 과 같은 관계형 데이터베이스에서 DynamoDB 로 마이그레이션 하고 자 합니다. 왜냐하면, 완전 관리형, 고성능, 높은 확장성과 유연성을 갖춘 NoSQL 데이터베이스 서비스이기 때문입니다. DynamoDB의 경우, 트래픽 및 비즈니스 요구 사항에 따라 용량을 유연하게 증가 및 감소시킬 수 있기 때문에 서비스에 필요한 총 비용을 기존의 서버 기반의 RDBMS보다 더 쉽게 최적화 하는 것이 가능합니다. 해당 기사에서는 RDS Mysql 데이터 베이스 내의 테이블간의 연관관계가 없을때를 가정하여 DynamoDB로 마이그레이션 하는 방법을 안내해드립니다.

전제 조건

  • pymysql 모듈이 설치 되어 있어야 합니다.
    • pip install pymysql 커맨드를 이용하여 설치가 가능합니다.
  • Python IDE(Pycharm, Visual Studio..etc)가 설치되어있어야 합니다.
  • RDS mysql 데이터베이스가 생성되어있어야 합니다.
    • 해당 기사에서는 아래의 샘플 테이블을 사용합니다

User 테이블

idnamepassword
1sample_name11234
2sample_name21234
3sample_name31234

Product 테이블

idnamepricequantity
1sample_product1100010
2sample_product2100015
3sample_product3100010

1단계 : IAM 사용자 생성

  • IAM 페이지에 접속합니다.
  • [액세스 관리],[사용자],[사용자 생성]
  • [사용자 이름]에 이름을 입력하고 [직접 정책 연결]을 클릭하여 아래의 권한을 넣습니다.
    • AmazonDynamoDBFullAccess,AmazonRDSFullAccess
  • 위의 IAM 사용자를 이용하여 자격증명을 수행합니다. [1]

단계2. 환경에 따라 코드를 수정한뒤 마이그레이션을 실행 합니다.

  • 환경에 맞추어 아래의 <> 처리된 코드를 변경합니다.
  • 해당 코드는 DynamoDB 테이블을 생성한뒤 배치처리를 적용하여 마이그레이션 하는 에제코드입니다.[2]
import pymysql
import boto3

# RDS 데이터베이스 연결 정보

host = '<엔드포인트>'
user = '<데이터베이스 접속 아이디>'
password = '<비밀번호>'
db_name = '<데이터베이스 이름>'

# dynamodb 리소스 생성
dynamodb = boto3.resource('dynamodb')

# RDS에 연결
conn = pymysql.connect(host=host, user=user, password=password, db=db_name)

cursor = conn.cursor()

query = "SHOW TABLES"
cursor.execute(query)

tables=cursor.fetchall()

for table in tables:
    table=table[0]

    query = "SHOW COLUMNS FROM "+table
    cursor.execute(query)

    column_infos = cursor.fetchall()

    row_name=[]
    row_type=[]

    if column_infos:
        for row in column_infos:
            row_name.append(row[0])
            row_type.append(row[1])

    for i,type in enumerate(row_type):
        if type=="int":
            row_type[i]="N"
        else:
            row_type[i]="S"

    table_name=table
    table = dynamodb.create_table(
        TableName=table_name,
        KeySchema=[
            {'AttributeName': row_name[0], 'KeyType': 'HASH'}
        ],
        AttributeDefinitions=[
            {'AttributeName': row_name[0], 'AttributeType': row_type[0]}
        ],
        ProvisionedThroughput={
            'ReadCapacityUnits': 5,
            'WriteCapacityUnits': 5
        }
    )

    table.wait_until_exists()

    query = "SELECT * FROM " + table_name
    cursor.execute(query)
    results = cursor.fetchall()

    items_to_put=[]

    for row in results:
        items_dict={}
        row=list(row)
        for i,value in enumerate(row):
            items_dict[row_name[i]]=value
        items_to_put.append(items_dict)

    with dynamodb.Table(table_name).batch_writer() as batch:
        for item in items_to_put:
            batch.put_item(Item=item)
    print("{} 테이블의 마이그레이션이 완료되었습니다.".format(table_name))

# 연결 종료
cursor.close()
conn.close()

결과

  • 정상적이게 코드가 실행되는 경우 아래와 같이 완료되었다는 메시지를 확인할수있습니다.
  • DynamoDB 콘솔 창에서 데이터가 제대로 들어갔는지 확인이 가능합니다.

Enter image description here

Enter image description here

Enter image description here

Enter image description here

참고

[1] 구성 설정 지정 및 보기

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-configure-files.html#cli-configure-files-methods

[2] Boto3 1.28.62 documentation: DynamoDB

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html

profile pictureAWS
지원 엔지니어
게시됨 7달 전559회 조회
댓글 없음

관련 콘텐츠