내용으로 건너뛰기

AWS CLI와 jq를 사용하여 AWS DMS 작업 설정의 백업을 만들려면 어떻게 해야 합니까?

3분 분량
0

나중에 복원하거나 다른 작업의 템플릿으로 사용하기 위해 AWS Database Migration Service(AWS DMS) 복제 작업 설정을 백업하려고 합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

AWS DMS 복제 작업 설정의 백업을 만들려면 AWS CLI 및 jq 명령줄 JSON 프로세서를 사용하십시오.

복제 작업 설정 가져오기

AWS DMS 복제 작업 설정을 가져오려면 describe-replication-tasks라는 AWS CLI 명령을 실행합니다. 다음 항목 중 하나와 일치하는 작업만 반환하려면 --filters 플래그를 사용합니다.

  • 복제 작업 ID
  • 복제 작업 Amazon 리소스 이름(ARN)

복제 작업 ID를 사용하여 AWS DMS 작업에 대한 복제 작업 설정을 가져오려면 다음 describe-replication-tasks 명령을 실행합니다.

aws dms describe-replication-tasks --filter Name=replication-task-id,Values=dms_task_id --output json

참고: dms_task_id를 AWS DMS 복제 작업 ID로 바꾸십시오.

복제 작업 ARN을 사용하여 AWS DMS 작업에 대한 복제 작업 설정을 가져오려면 다음 명령을 실행합니다.

aws dms describe-replication-tasks --filter Name=replication-task-arn,Values=dms_task_arn --output json

참고: dms_task_arn을 AWS DMS 복제 작업 ARN으로 바꾸십시오.

jq를 사용하여 출력 JSON 필터링 및 변환

참고: jq 도구를 다운로드하려면 jqlang 웹 사이트에서 ./jq를 참조하십시오.

나중에 복원할 수 있도록 복제 작업 설정 JSON을 필터링하고 변환해야 합니다.

실행하는 작업 유형에 따라 jq 명령줄 JSON 프로세서를 사용하여 출력 JSON을 수정합니다.

전체 로드 작업의 경우 다음 데이터를 제거하십시오.

  • ReplicationTaskArn
  • ReplicationTaskStartDate
  • ReplicationTaskStats
  • 상태
  • StopReason
  • ReplicationTaskCreationDate
  • CloudWatchLogGroup
  • CloudWatchLogStream
  • RecoveryCheckpoint

변경 데이터 캡처(CDC) 작업의 경우 CdcStartPosition 키를 추가한 다음 값을 RecoveryCheckpoint로 설정합니다. 또한 다음 데이터를 제거합니다.

  • ReplicationTaskArn
  • ReplicationTaskStartDate
  • ReplicationTaskStats
  • 상태
  • StopReason
  • ReplicationTaskCreationDate
  • CloudWatchLogGroup
  • CloudWatchLogStream
  • RecoveryCheckpoint

전체 로드 및 CDC 작업의 경우 다음 데이터를 제거하십시오.

  • ReplicationTaskArn
  • ReplicationTaskStartDate
  • ReplicationTaskStats
  • 상태
  • StopReason
  • ReplicationTaskCreationDate
  • CloudWatchLogGroup
  • CloudWatchLogStream
  • RecoveryCheckpoint

출력 JSON을 jq로 전송한 다음 복제 작업 데이터를 필터링 및 변환하려면 다음 describe-replication-tasks 명령 중 하나를 실행합니다.

AWS DMS 복제 작업 ID를 사용하려면 다음 명령을 실행합니다.

aws dms describe-replication-tasks --filter Name=replication-task-id,Values=dms_task_id --output json | jq '.ReplicationTasks | .[] | .TableMappings |= fromjson | .ReplicationTaskSettings |= fromjson | .["CdcStartPosition"] = .RecoveryCheckpoint | delpaths([    ["ReplicationTaskArn"],["ReplicationTaskStartDate"],["ReplicationTaskStats"],["Status"],["StopReason"],["ReplicationTaskCreationDate"],["ReplicationTaskSettings","Logging","CloudWatchLogGroup"],["ReplicationTaskSettings","Logging","CloudWatchLogStream"],["RecoveryCheckpoint"]])    | .TableMappings |= tostring |.ReplicationTaskSettings |= tostring'

참고: dms_task_id를 AWS DMS 복제 작업 ID로 바꾸십시오.

AWS DMS 복제 작업 ARN을 사용하려면 다음 명령을 실행합니다.

aws dms describe-replication-tasks --filter Name=replication-task-arn,Values=dms-task-arn --output json | jq '.ReplicationTasks | .[] | .TableMappings |= fromjson | .ReplicationTaskSettings |= fromjson | .["CdcStartPosition"] = .RecoveryCheckpoint | delpaths([    ["ReplicationTaskArn"],["ReplicationTaskStartDate"],["ReplicationTaskStats"],["Status"],["StopReason"],["ReplicationTaskCreationDate"],["ReplicationTaskSettings","Logging","CloudWatchLogGroup"],["ReplicationTaskSettings","Logging","CloudWatchLogStream"],["RecoveryCheckpoint"]])    | .TableMappings |= tostring |.ReplicationTaskSettings |= tostring'

참고: dms_task_arn을 AWS DMS 복제 작업 ARN으로 바꾸십시오.

출력을 JSON 파일에 저장

출력을 백업으로 저장하려면 JSON 파일로 리디렉션합니다. 예를 들어 다음 명령은 작업 ID가 dms_original_task인 AWS DMS 작업의 작업 설정을 task_backup.json이라는 JSON 파일에 저장합니다.

aws dms describe-replication-tasks --filter Name=replication-task-id,Values=original-dms-task --output json | jq '.ReplicationTasks | .[] | .TableMappings |= fromjson | .ReplicationTaskSettings |= fromjson | .["CdcStartPosition"] = .RecoveryCheckpoint | delpaths([ ["ReplicationTaskArn"],["ReplicationTaskStartDate"],["ReplicationTaskStats"],["Status"],["StopReason"],["ReplicationTaskCreationDate"],["ReplicationTaskSettings","Logging","CloudWatchLogGroup"],["ReplicationTaskSettings","Logging","CloudWatchLogStream"],["RecoveryCheckpoint"]]) | .TableMappings |= tostring |.ReplicationTaskSettings |= tostring' > task_backup.json

예제 출력 JSON 파일:


{ "ReplicationTaskIdentifier": "original-dms-task",  "SourceEndpointArn": "arn:aws:dms:us-east-1:xxxxxxxxxxxx:endpoint:QKMQN2TCULCPYIK3CMGF2CRDC5DIWZ433BCKHZY",
  "TargetEndpointArn": "arn:aws:dms:us-east-1:xxxxxxxxxxxx:endpoint:6LEFAZCDPQD2HWHJIXJYUU4PGMTKA2AKKFN4KCA",
  "ReplicationInstanceArn": "arn:aws:dms:us-east-1:xxxxxxxxxxxx:rep:C4CAB7ANKQU2AU7WFH4BYCJSLPS3YYUGCTHL3UA",
  "MigrationType": "full-load-and-cdc",
  "TableMappings": "{\"rules\":[{\"rule-type\":\"selection\",\"rule-id\":\"293111713\",\"rule-name\":\"293111713\",\"object-locator\":{\"schema-name\":\"%\",\"table-name\":\"%\"},\"rule-action\":\"include\",\"filters\":[]}]}",
  "ReplicationTaskSettings": "{\"Logging\":{\"EnableLogging\":true,\"LogComponents\":[{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"TRANSFORMATION\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"SOURCE_UNLOAD\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"IO\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"TARGET_LOAD\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"PERFORMANCE\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"SOURCE_CAPTURE\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"SORTER\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"REST_SERVER\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"VALIDATOR_EXT\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"TARGET_APPLY\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"TASK_MANAGER\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"TABLES_MANAGER\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"METADATA_MANAGER\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"FILE_FACTORY\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"COMMON\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"ADDONS\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"DATA_STRUCTURE\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"COMMUNICATION\"},{\"Severity\":\"LOGGER_SEVERITY_DEFAULT\",\"Id\":\"FILE_TRANSFER\"}]},\"StreamBufferSettings\":{\"StreamBufferCount\":3,\"CtrlStreamBufferSizeInMB\":5,\"StreamBufferSizeInMB\":8},\"ErrorBehavior\":{\"FailOnNoTablesCaptured\":true,\"ApplyErrorUpdatePolicy\":\"LOG_ERROR\",\"FailOnTransactionConsistencyBreached\":false,\"RecoverableErrorThrottlingMax\":1800,\"DataErrorEscalationPolicy\":\"SUSPEND_TABLE\",\"ApplyErrorEscalationCount\":0,\"RecoverableErrorStopRetryAfterThrottlingMax\":true,\"RecoverableErrorThrottling\":true,\"ApplyErrorFailOnTruncationDdl\":false,\"DataTruncationErrorPolicy\":\"LOG_ERROR\",\"ApplyErrorInsertPolicy\":\"LOG_ERROR\",\"EventErrorPolicy\":\"IGNORE\",\"ApplyErrorEscalationPolicy\":\"LOG_ERROR\",\"RecoverableErrorCount\":-1,\"DataErrorEscalationCount\":0,\"TableErrorEscalationPolicy\":\"STOP_TASK\",\"RecoverableErrorInterval\":5,\"ApplyErrorDeletePolicy\":\"IGNORE_RECORD\",\"TableErrorEscalationCount\":0,\"FullLoadIgnoreConflicts\":true,\"DataErrorPolicy\":\"LOG_ERROR\",\"TableErrorPolicy\":\"SUSPEND_TABLE\"},\"ValidationSettings\":{\"ValidationPartialLobSize\":0,\"PartitionSize\":10000,\"RecordFailureDelayLimitInMinutes\":0,\"SkipLobColumns\":false,\"FailureMaxCount\":10000,\"HandleCollationDiff\":false,\"ValidationQueryCdcDelaySeconds\":0,\"ValidationMode\":\"ROW_LEVEL\",\"TableFailureMaxCount\":1000,\"RecordFailureDelayInMinutes\":5,\"MaxKeyColumnSize\":8096,\"EnableValidation\":true,\"ThreadCount\":5,\"RecordSuspendDelayInMinutes\":30,\"ValidationOnly\":false},\"TTSettings\":{\"TTS3Settings\":null,\"TTRecordSettings\":null,\"EnableTT\":false},\"FullLoadSettings\":{\"CommitRate\":10000,\"StopTaskCachedChangesApplied\":false,\"StopTaskCachedChangesNotApplied\":false,\"MaxFullLoadSubTasks\":8,\"TransactionConsistencyTimeout\":600,\"CreatePkAfterFullLoad\":false,\"TargetTablePrepMode\":\"DROP_AND_CREATE\"},\"TargetMetadata\":{\"ParallelApplyBufferSize\":0,\"ParallelApplyQueuesPerThread\":0,\"ParallelApplyThreads\":0,\"TargetSchema\":\"\",\"InlineLobMaxSize\":0,\"ParallelLoadQueuesPerThread\":0,\"SupportLobs\":true,\"LobChunkSize\":0,\"TaskRecoveryTableEnabled\":false,\"ParallelLoadThreads\":0,\"LobMaxSize\":32,\"BatchApplyEnabled\":false,\"FullLobMode\":false,\"LimitedSizeLobMode\":true,\"LoadMaxFileSize\":0,\"ParallelLoadBufferSize\":0},\"BeforeImageSettings\":null,\"ControlTablesSettings\":{\"historyTimeslotInMinutes\":5,\"HistoryTimeslotInMinutes\":5,\"StatusTableEnabled\":false,\"SuspendedTablesTableEnabled\":false,\"HistoryTableEnabled\":false,\"ControlSchema\":\"\",\"FullLoadExceptionTableEnabled\":false},\"LoopbackPreventionSettings\":null,\"CharacterSetSettings\":null,\"FailTaskWhenCleanTaskResourceFailed\":false,\"ChangeProcessingTuning\":{\"StatementCacheSize\":50,\"CommitTimeout\":1,\"BatchApplyPreserveTransaction\":true,\"BatchApplyTimeoutMin\":1,\"BatchSplitSize\":0,\"BatchApplyTimeoutMax\":30,\"MinTransactionSize\":1000,\"MemoryKeepTime\":60,\"BatchApplyMemoryLimit\":500,\"MemoryLimitTotal\":1024},\"ChangeProcessingDdlHandlingPolicy\":{\"HandleSourceTableDropped\":true,\"HandleSourceTableTruncated\":true,\"HandleSourceTableAltered\":true},\"PostProcessingRules\":null}",
  "CdcStartPosition": "checkpoint:V1#102#00000000/B803EBA0#0#0#*#0#277"
}

JSON 파일을 편집하고 복원하려면 create-replication-task 명령을 실행합니다.

예를 들어, task_backup.json 파일을 사용하여 작업 ID가 restored-dms-task인 AWS DMS 복제 작업을 만들려면 다음 명령을 실행합니다.

aws dms create-replication-task --replication-task-identifier restored-dms-task --cli-input-json file://task_backup.json

참고: 명령에 replication-task-identifier가 포함된 경우 task_backup.json 파일의 replication-task-identifier 값을 재정의합니다.

관련 정보

AWS DMS 작업의 작업 설정 지정

AWS DMS를 사용하여 지속적인 복제를 위한 작업 만들기

AWS 공식업데이트됨 일 년 전