aws 서비스 정리 | DMS

Jihun Kim·2021년 12월 26일
0

aws

목록 보기
5/16
post-thumbnail

데이터베이스 마이그레이션

데이터 마이그레이션이란 데이터베이스 스키마의 버전을 관리하기 위한 하나의 방법으로, 데이터 전환을 의미한다. 데이터베이스 마이그레이션은 프레임워크의 특정 명령어(장고의 경우 migrate)를 통해 실행하고, 이 결과를 별도의 테이블에서 버전 관리 하게 된다.

애플리케이션과 스키마가 바뀌어 개발 과정에는 적용 됐지만 운영 환경에는 적용되지 않아 데이터베이스 전환시 애를 먹는 경우가 있는데, 데이터베이스 마이그레이션은 이러한 문제를 해결한다.


언제 사용하면 좋을까?



boto3로 DMS 실행하기

처음 task를 생성한 뒤 아래의 방법을 이용해 ‘ongoing replication task’를 만들 수 있다.

  • 아래 메소드를 이용할 수 있다.

    start_replication_task(**kwargs)

그 전에, aws docs에 따르면 “source endpoint”와 “target endpoint”를 지정해 놓아야 한다.

따라서, RDS의 데이터를 로컬로 옮기고 싶다면 “source endpoint”는 RDS의 endpoint가 되어야 한다.

사용 방법은 다음과 같다.

response = client.start_replication_task(
    ReplicationTaskArn='string',
    StartReplicationTaskType='start-replication'|'resume-processing'|'reload-target',
    CdcStartTime=datetime(2015, 1, 1),
    CdcStartPosition='string',
    CdcStopPosition='string'
)

StartReplicationTaskType에서 ‘start-replication’은 처음 task를 실행할 때만 유효하며 그 뒤로는 ‘resume-proecessing’ 혹은 ‘reload-target’을 이용해야 한다.

위 요청을 실행하면 response에 아래 값들이 들어온다.

{
    'ReplicationTask': {
        'ReplicationTaskIdentifier': 'string',
        'SourceEndpointArn': 'string',
        'TargetEndpointArn': 'string',
        'ReplicationInstanceArn': 'string',
        'MigrationType': 'full-load'|'cdc'|'full-load-and-cdc',
        'TableMappings': 'string',
        'ReplicationTaskSettings': 'string',
        'Status': 'string',
        'LastFailureMessage': 'string',
        'StopReason': 'string',
        'ReplicationTaskCreationDate': datetime(2015, 1, 1),
        'ReplicationTaskStartDate': datetime(2015, 1, 1),
        'CdcStartPosition': 'string',
        'CdcStopPosition': 'string',
        'RecoveryCheckpoint': 'string',
        'ReplicationTaskArn': 'string',
        'ReplicationTaskStats': {
            'FullLoadProgressPercent': 123,
            'ElapsedTimeMillis': 123,
            'TablesLoaded': 123,
            'TablesLoading': 123,
            'TablesQueued': 123,
            'TablesErrored': 123,
            'FreshStartDate': datetime(2015, 1, 1),
            'StartDate': datetime(2015, 1, 1),
            'StopDate': datetime(2015, 1, 1),
            'FullLoadStartDate': datetime(2015, 1, 1),
            'FullLoadFinishDate': datetime(2015, 1, 1)
        },
        'TaskData': 'string',
        'TargetReplicationInstanceArn': 'string'
    }
}

이 중, 원하는 값만을 취하여 사용하면 된다.

  • 진행 상태를 확인하고 싶다면 아래의 코드를 작성하면 된다.
response = client.describe_replication_tasks(
    Filters=[
        {
            'Name': 'string',
            'Values': [
                'string',
            ]
        },
    ],
    MaxRecords=123,
    Marker='string',
    WithoutSettings=True|False
)

migration시 인덱스가 바뀔 수 있으니 이를 재설정 해주는 작업도 꼭 해야 한다.

response에는 다음과 같은 내용이 들어 온다.

{
    'Marker': 'string',
    'ReplicationTasks': [
        {
            'ReplicationTaskIdentifier': 'string',
            'SourceEndpointArn': 'string',
            'TargetEndpointArn': 'string',
            'ReplicationInstanceArn': 'string',
            'MigrationType': 'full-load'|'cdc'|'full-load-and-cdc',
            'TableMappings': 'string',
            'ReplicationTaskSettings': 'string',
            'Status': 'string',
            'LastFailureMessage': 'string',
            'StopReason': 'string',
            'ReplicationTaskCreationDate': datetime(2015, 1, 1),
            'ReplicationTaskStartDate': datetime(2015, 1, 1),
            'CdcStartPosition': 'string',
            'CdcStopPosition': 'string',
            'RecoveryCheckpoint': 'string',
            'ReplicationTaskArn': 'string',
            'ReplicationTaskStats': {
                'FullLoadProgressPercent': 123,
                'ElapsedTimeMillis': 123,
                'TablesLoaded': 123,
                'TablesLoading': 123,
                'TablesQueued': 123,
                'TablesErrored': 123,
                'FreshStartDate': datetime(2015, 1, 1),
                'StartDate': datetime(2015, 1, 1),
                'StopDate': datetime(2015, 1, 1),
                'FullLoadStartDate': datetime(2015, 1, 1),
                'FullLoadFinishDate': datetime(2015, 1, 1)
            },
            'TaskData': 'string',
            'TargetReplicationInstanceArn': 'string'
        },
    ]
}

response에 들어오는 값들 중 "ReplicationTaskStats"에서 '진행 상태'와 관련된 값들을 확인할 수 있는데, "ElapsedTimeMillis"로는 진행 시간을 알 수 있고 "FullLoadProgressPercent"로는 진행 정도를 알 수 있다.

포스타입 팀에서 작성한 블로그에 따르면, 테이블 하나씩 DMS를 하는 것이 좋다고 한다... 그래야 일부 테이블 이전시 오류가 발생해도 해당 작업만 일시 중지한 후 다시 시작할 수 있기 때문이라고 한다~! 하지만 번거롭다는 단점이 있을 수 있다. 그렇기 때문에 진행 시간과 상황을 확인해 보며 DMS를 진행하는 것도 좋을 것 같다.



참고

(1) 아마존 ARN

https://docs.aws.amazon.com/ko_kr/general/latest/gr/aws-arns-and-namespaces.html

(2) 아마존 DMS doc

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

(3) 포스타입 팁 DMS

https://team.postype.com/post/7921814

profile
쿄쿄

0개의 댓글