Como resolver o erro de snapshot manual no meu cluster do Amazon OpenSearch Service?

7 minuto de leitura
0

Desejo restaurar um snapshot manual do meu cluster do Amazon OpenSearch Service. No entanto, recebo um erro quando tento registrar um repositório ou acessar um repositório registrado. Por que isso está acontecendo e como soluciono?

Breve descrição

Para migrar dados com êxito de um snapshot manual no OpenSearch Service, execute as seguintes etapas:

1.    Escolha um bucket do Amazon Simple Storage Service (Amazon S3) onde deseja armazenar o snapshot.

2.    Registre o bucket do Amazon S3 com o cluster de origem do OpenSearch Service.

3.    Tire um snapshot do cluster de origem do OpenSearch Service e, em seguida, armazene-o no bucket do Amazon S3.

4.    Registre o cluster de destino com o mesmo bucket do Amazon S3 para garantir que seja possível visualizar o snapshot manual.

5.    Restaure o snapshot manual no cluster de destino no OpenSearch Service.

Caso contrário, poderá ocorrer um dos seguintes problemas:

  • Erro 403 Unauthorized (Não autorizado)
  • repository_missing_exception
  • concurrent_snapshot_execution_exception
  • snapshot_restore_exception
  • a_w_s_security_token_service_exception
  • Status do snapshot “PARCIAL”
  • Problema de classe de armazenamento do Amazon S3 Glacier

Resolução

Erro 403 Unauthorized (Não autorizado)

Se você ativou o controle de acesso refinado (FGAC) em seu domínio do OpenSearch Service, poderá receber o seguinte erro ao tirar um snapshot:

{
    "error": {
        "root_cause": [{
            "type": "security_exception",
            "reason": "no permissions for [cluster:admin/repository/put] and User [name=arn:aws:iam::012345678912:user/username, backend_roles=[], requestedTenant=null]"
    }],
        "type": "security_exception",
        "reason": "no permissions for [cluster:admin/repository/put] and User [name=arn:aws:iam::012345678912:user/username, backend_roles=[], requestedTenant=null]"
    },
    "status": 403
}

Para resolver o erro 403 Unauthorized (Não autorizado), especifique um parâmetro de nome de usuário:senha sempre que tirar um snapshot manual:

curl -XPUT -u 'opensearch-domain-endpoint/_snapshot/snapshot-repository-name/snapshot-name'

Observação: você deve ser um superusuário para ativar o controle de acesso refinado para seu domínio do OpenSearch Service. É possível usar seu nome e senha de superusuário ou definir uma função do AWS Identity Access Management (IAM) como o superusuário. Ao acessar o snapshot do cluster, especifique as credenciais de superusuário ou a função do IAM. Se você especificar um perfil do IAM, ele deverá assinar as solicitações HTTP usando sigv4. Para obter mais informações sobre o uso de controle de acesso refinado e perfis do IAM, consulte Como criar e gerenciar domínios do OpenSearch Service.

Também é necessário registrar um repositório de snapshots com seu snapshot e mapear a função manage_snapshots para um perfil do IAM. A função manage_snapshots deve ter as permissões adequadas (IAM:PassRole) para assumir a função do IAM (TheSnapshotRole). Para obter mais informações, consulte Pré-requisitos de snapshots manuais.

Para mapear a função manage_snapshots para uma função do IAM, execute as seguintes etapas:

1.    Abra o console do OpenSearch Dashboards.

2.    Faça login como usuário principal.

3.    Escolha Security (Segurança).

4.    Escolha Roles (Funções).

5.    Escolha manage_snapshots como sua função.

6.    Escolha Mapped users (Usuários mapeados).

7.    Escolha Manage mapping (Gerenciar mapeamento).

8.    Em Users (Usuários), adicione o ARN do usuário (por exemplo: “arn:aws:iam::012345678912:user/username”).

9.    Registre seu repositório de snapshots manuais.

Repository_missing_exception

Antes de tirar um snapshot manual do índice, é necessário registrar um repositório de snapshots manuais com o OpenSearch Service. Sua função do IAM (TheSnapshotRole) também deve ser configurada para funcionar com o Amazon S3.

Caso não tenha registrado o repositório de snapshots antes de tirar um snapshot manual ou caso use um nome de repositório incorreto, o seguinte erro será exibido:

{
    "error": {
        "root_cause": [{
            "type": "repository_missing_exception",
            "reason": "[snapshot-repository-name] missing"
        }],
        "type": "repository_missing_exception",
        "reason": "[snapshot-repository-name] missing"
    },
    "status": 404
}

Para resolver esse erro, certifique-se de atender aos pré-requisitos de snapshots manuais. Além disso, confira se há erros de digitação no nome do repositório.

Concurrent_snapshot_execution_exception

Se um snapshot estiver em andamento, o seguinte erro será exibido ao tentar tirar outro snapshot:

{
    "error": {
        "root_cause": [{
            "type": "concurrent_snapshot_execution_exception",
            "reason": "[snapshot-repository-name:snapshot-name] a snapshot is already running"
        }],
        "type": "concurrent_snapshot_execution_exception",
        "reason": "[snapshot-repository-name:snapshot-name] a snapshot is already running"
    }
}

Para conferir se há outro snapshot em andamento, execute o seguinte comando:

curl -XGET 'opensearch-domain-endpoint/_snapshot/_status'

Se um snapshot já estiver em andamento, aguarde a conclusão do snapshot atual. Ou, caso suspeite que o snapshot esteja travado, confira o histórico de snapshots por hora. Para obter mais informações, consulte Por que não consigo excluir um índice nem atualizar o meu cluster do OpenSearch Service?

Snapshot_restore_exception

Se você tentar migrar dados de um cluster on-premises para um domínio do OpenSearch Service, poderá encontrar a seguinte exceção:

{
    "error": {
        "root_cause": [{
            "type": "snapshot_restore_exception",
            "reason": "[manual-snapshot-repo:my-manual-snapshot1/HPOcIJryTj6a6GJvyP79bw] the snapshot was created with Elasticsearch version [6.8.0] which is higher than the version of this node [6.7.0]"
        }],
        "type": "snapshot_restore_exception",
        "reason": "[manual-snapshot-repo:my-manual-snapshot1/HPOcIJryTj6a6GJvyP79bw] the snapshot was created with Elasticsearch version [6.8.0] which is higher than the version of this node [6.7.0]"
    },
    "status": 500
}

Essa mensagem de erro ocorre quando um snapshot tirado em um cluster existente é executado em uma versão diferente do Elasticsearch que o OpenSearch Service. Se o cluster estiver sendo executado em uma versão anterior do Elasticsearch ao OpenSearch Service, considere atualizar sua versão do Elasticsearch. Ou é possível usar a API de reindexação remota para migrar seus índices.

a_w_s_security_token_service_exception

Se a função do IAM associada ao snapshot manual não tiver uma relação de confiança estabelecida para “es.amazonaws.com”, a seguinte exceção será exibida:

{
    "error": {
        "root_cause": [{
            "type": "repository_exception",
            "reason": "[es_01082021_repo] Could not determine repository generation from root blobs"
        }],
        "type": "repository_exception",
        "reason": "[es_01082021_repo] Could not determine repository generation from root blobs",
        "caused_by": {
            "type": "i_o_exception",
            "reason": "Exception when listing blobs by prefix [index-]",
            "caused_by": {
                "type": "a_w_s_security_token_service_exception",
                "reason": "a_w_s_security_token_service_exception: User: arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::679203657591:role/ES_Backup_Role (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: 36d09b93-d94f-457e-8fa5-b0a50ba436c3)"
            }
        }
    },
    "status": 500
}

Com os snapshots do OpenSearch Service, uma função interna é criada (como arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591). Essa função interna assume a função do IAM associada ao snapshot manual e, em seguida, executa todas as operações necessárias.

Para resolver a exceção do token de segurança, especifique a função do IAM associada ao snapshot manual. Caso não tenha uma função do IAM associada ao snapshot manual, será necessário criar uma. Para obter mais informações, consulte Pré-requisitos de snapshots manuais.

Além disso, confira a relação de confiança para a função do IAM associada ao snapshot manual. A relação de confiança para a função deve especificar o OpenSearch Service na instrução Principal, assim:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Sid": "",
        "Effect": "Allow",
        "Principal": {
            "Service": "es.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
    }]
}

Status de snapshot PARCIAL

Um snapshot entra em um estado “PARCIAL” pelos seguintes motivos:

Um snapshot parcial indica que os dados de um shard não puderam ser armazenados. Ainda é possível restaurar dados de um snapshot parcial, mas será necessário usar snapshots anteriores para restaurar quaisquer índices ausentes. Para conferir se o cluster entrou em um estado “PARCIAL”, confira o histórico de snapshots. Para obter mais informações, consulte Restaurar snapshots.

Problema nas classes de armazenamento do Amazon S3 Glacier

Caso esteja armazenando um snapshot restaurado em uma das classes de armazenamento do Amazon S3 Glacier, evite aplicar uma regra de ciclo de vida do Amazon S3 Glacier ao bucket. Os snapshots manuais não são compatíveis com as classes de armazenamento do Amazon S3 Glacier. Portanto, ao aplicar uma política de ciclo de vida do Amazon S3 Glacier ao bucket do S3, será necessário mover de volta quaisquer objetos que fizerem a transição.

Depois de mover os objetos de volta para a classe de armazenamento padrão do Amazon S3, será possível restaurar os objetos desses snapshots. Para obter mais informações, consulte Pré-requisitos de snapshots manuais.


Informações relacionadas

Como resolver o erro “cannot restore index [.kibana] because it's open” no Amazon OpenSearch Service?

Tirar snapshots manuais

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos