Por que minha tarefa do AWS DMS não está incluída em tentar novamente?

Data da última atualização: 18/8/2022

Tenho uma tarefa do AWS Database Migration Service (AWS DMS) que foi interrompida e não está incluída em tentar novamente. Como posso retomar a operação da minha tarefa do AWS DMS?

Resolução

O AWS DMS é um serviço gerenciado projetado para ter um comportamento de autorrecuperação. Isso significa que, quando ocorrem problemas, o AWS DMS tenta corrigir o problema e retomar a operação sem que você precise realizar nenhuma ação. No entanto, existem algumas situações em que a migração é interrompida e não está incluída em tentar novamente.

Primeiro, é importante entender os dois tipos de erros que você pode encontrar ao usar o AWS DMS:

  • Erros fatais
  • Erros recuperáveis

Erros fatais

Se o AWS DMS encontrar um erro que o impeça de continuar com a migração, a tarefa será interrompida e entrará em um estado FALHA. Isso é chamado de erro fatal. Alguns exemplos incluem:

  • O endpoint de origem não está configurado, o que é um pré-requisito para a migração.
  • A instância de replicação do AWS DMS não busca objetos de origem do banco de dados de origem.

Nos logs de tarefas, você vê mensagens semelhantes a esta:

"2022-05-28T16:07:35 [TASK_MANAGER    ]E:  Task 'K7YJOFK7GYXIK44C2KLGFNG7ZONLZGPWPD5RWHA' encountered a fatal error"

Quando o AWS DMS encontra um erro fatal, ele tenta reiniciar seis vezes. Se sua tarefa não estiver mais incluída em tentar novamente, provavelmente já concluiu essas tentativas.

Erros recuperáveis

O AWS DMS considera todos os erros ambientais como erros recuperáveis. Portanto, se uma tarefa ou instância de replicação encontrar um erro ambiental, a tarefa será interrompida, mas se recuperará e, em seguida, tentará novamente.

Exemplos de erros recuperáveis incluem:

  • A conectividade da instância de replicação do AWS DMS com o banco de dados de origem/destino é interrompida.
  • Devido à manutenção, a instância de replicação foi reiniciada.

Nos logs de tarefas, você vê mensagens semelhantes a esta:

"Last Error Task error notification received from subtask 0, thread 0 [reptask/replicationtask.c:2673] [1022502] Stop Reason RECOVERABLE_ERROR Error Level RECOVERABLE"

Por padrão, uma tarefa com um erro recuperável é incluída em tentar novamente, indefinidamente. A configuração RecoverableErrorCount controla esse comportamento. Esse parâmetro define o número máximo de tentativas que o AWS DMS faz para reiniciar uma tarefa quando encontra um erro ambiental. Depois que o sistema tentar reiniciar a tarefa um determinado número de vezes, a tarefa será interrompida e a intervenção manual será necessária. O valor padrão é -1, que informa ao AWS DMS para reiniciar a tarefa indefinidamente.

Se um erro recuperável fizer com que uma tarefa seja interrompida e ela não for incluída em tentar novamente, verifique se:

  • O parâmetro RecoverableErrorCount é definido como um valor personalizado.
  • A instância de replicação em si está inativa.

Verifique se outras configurações de valor não padrão estão impedindo novas tentativas

Se essas configurações forem definidas com um valor não padrão, elas poderão impedir que a tarefa do AWS DMS tente novamente:

"ErrorBehavior": {
        "FailOnNoTablesCaptured": false,
        "ApplyErrorUpdatePolicy": "LOG_ERROR",  --- can be set to STOP_TASK
        "FailOnTransactionConsistencyBreached": false,
        "RecoverableErrorThrottlingMax": 1800,
        "DataErrorEscalationPolicy": "SUSPEND_TABLE",  --- can be set to STOP_TASK
        "ApplyErrorEscalationCount": 0,
        "RecoverableErrorStopRetryAfterThrottlingMax": false,
        "RecoverableErrorThrottling": true,
        "ApplyErrorFailOnTruncationDdl": false,
        "DataTruncationErrorPolicy": "LOG_ERROR",  --- can be set to STOP_TASK
        "ApplyErrorInsertPolicy": "LOG_ERROR",  --- can be set to STOP_TASK
        "EventErrorPolicy": "IGNORE",
        "ApplyErrorEscalationPolicy": "LOG_ERROR",  --- can be set to STOP_TASK
        "RecoverableErrorCount": -1,
        "DataErrorEscalationCount": 0,
        "TableErrorEscalationPolicy": "STOP_TASK",
        "RecoverableErrorInterval": 5,
        "ApplyErrorDeletePolicy": "IGNORE_RECORD",  --- can be set to STOP_TASK
        "TableErrorEscalationCount": 0,
        "FullLoadIgnoreConflicts": true,
        "DataErrorPolicy": "LOG_ERROR",
        "TableErrorPolicy": "SUSPEND_TABLE"
    },