Wie kann ich mithilfe der AWS CLI und jq eine Sicherung meiner AWS-DMS-Aufgabeneinstellungen erstellen?

Letzte Aktualisierung: 28.07.2022

Ich möchte eine Sicherungskopie meiner Einstellungen für die Replikationsaufgabe des AWS Database Migration Service (AWS DMS) erstellen, um sie zu einem späteren Zeitpunkt wiederherzustellen oder als Vorlage für andere Aufgaben zu verwenden. Wie mache ich das?

Kurzbeschreibung

Verwenden Sie die AWS Command Line Interface (AWS CLI) und den jq-Befehlszeilen-JSON-Prozessor, um eine Sicherung Ihrer Einstellungen für die AWS-DMS-Replikationsaufgabe zu erstellen.

  1. Führen Sie den AWS-CLI-Befehl describe-replication-tasks aus, um Ihre Einstellungen für die Replikationsaufgabe abzurufen.
  2. Verwenden Sie den jq-Befehlszeilen-JSON-Prozessor, um die Aufgabeneinstellungen zu filtern und zu transformieren.
  3. Speichern Sie die JSON.

Auflösung

Hinweis: Wenn beim Ausführen von AWS-CLI-Befehlen Fehler gemeldet werden, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

Voraussetzungen

Abrufen der Einstellungen für Replikationsaufgaben

Um Ihre Einstellungen für die AWS-DMS-Replikationsaufgabe abzurufen, führen Sie den Befehl describe-replication-tasks mithilfe der AWS CLI aus und verwenden Sie das Flag --filters. Durch die Verwendung des Filter-Flags geben Sie nur die Aufgabe zurück, die mit einem dieser Elemente übereinstimmt:

  • Die ID der Replikationsaufgabe
  • Der ARN der Replikationsaufgabe

Führen Sie diese Abfrage aus, um die Einstellungen der Replikationsaufgabe für Ihre AWS-DMS-Aufgabe mithilfe der Replikationsaufgaben-ID abzurufen. Ersetzen Sie <dms_task_id> durch Ihre AWS-DMS-Replikationsaufgaben-ID.

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

Führen Sie diese Abfrage aus, um die Einstellungen der Replikationsaufgabe für Ihre AWS-DMS-Aufgabe mithilfe des ARN der Replikationsaufgabe abzurufen. Ersetzen Sie <dms_task_arn> durch den ARN Ihrer AWS-DMS-Replikationsaufgabe.

aws dms describe-replication-tasks --filter Name=replication-task-id,Values=<dms_task_arn> --output json

Filtern und Transformieren der JSON-Ausgabe mithilfe von jq

Filtern und transformieren Sie als Nächstes die JSON-Ausgabe aus dem vorherigen Schritt. Sie müssen diesen JSON filtern und transformieren, um ihn für die spätere Wiederherstellung kompatibel zu machen.

1.    Verwenden Sie den jq-Befehlszeilen-JSON-Prozessor, um diese Änderungen an der JSON-Ausgabe vorzunehmen:

  • Fügen Sie den Schlüssel CdcStartPosition hinzu und legen Sie ihn dann auf RecoveryCheckpoint fest.
  • Diese Daten entfernen:
    • ReplicationTaskArn
    • ReplicationTaskStartDate
    • ReplicationTaskStats
    • Status
    • StopReason
    • ReplicationTaskCreationDate
    • CloudWatchLogGroup
    • CloudWatchLogStream
    • RecoveryCheckpoint

2.    Führen Sie einen dieser Befehle aus, um die JSON-Ausgabe an jq weiterzuleiten, und filtern und transformieren Sie dann die Daten der Replikationsaufgabe:

Verwenden der Aufgaben-ID für die AWS-DMS-Replikation:

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'

Verwenden der Aufgaben-ARN für die AWS-DMS-Replikation:

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'

Speichern der Ausgabe in einer JSON-Datei

Um die resultierende Ausgabe als Sicherung zu speichern, leiten Sie sie in eine JSON-Datei um. Dieser Befehl speichert beispielsweise die Aufgabeneinstellungen für eine AWS DMS-Aufgabe mit der Aufgaben-ID dms_original_task in einer JSON-Datei namens task_backup.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

Die resultierende JSON-Datei zeigt eine ähnliche Ausgabe wie diese:

{
  "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"
}

Sie können nun die JSON-Datei mithilfe des AWS-CLI-Befehls create-replication-task bearbeiten und wiederherstellen. Dieser Befehl erstellt beispielsweise eine AWS DMS-Replikationsaufgabe mit der Aufgaben-ID restored-dms-task unter Verwendung der Datei task_backup.json:

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

Hinweis: Wenn Sie den --replication-task-identifie in den Befehl einschließen, überschreiben Sie den Wert --replication-task-identifie in der Datei task_backup.json.