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

Última atualização: 01-09-2021

Quero restaurar um snapshot manual do cluster do Amazon OpenSearch Service (sucessor do Amazon Elasticsearch 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.    Faça 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)

Caso tenha habilitado o controle de acesso refinado (FGAC) no domínio do OpenSearch Service, o seguinte erro pode aparecer 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, especifique um parâmetro de nome de usuário:senha sempre que tirar um snapshot manual:

curl -XPUT -u username:password123$ 'opensearch-domain-endpoint/_snapshot/snapshot-repository-name/snapshot-name'

Observação: é necessário ser um superusuário para habilitar o controle de acesso refinado para o 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 for especificada uma função do IAM, ela deverá assinar as solicitações HTTP usando sigv4. Para obter mais informações sobre o uso de controle de acesso refinado e funções do IAM, consulte Criação e gerenciamento de domínios do Amazon OpenSearch Service.

Também é necessário registrar um repositório de snapshots com o snapshot e mapear a função manage_snapshots para uma função 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:

The below error “concurrent_snapshot_execution_exception” means that a snapshot is already in progress
{"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 Como soluciono um erro "Prior snapshot operation has not yet completed" (Operação de snapshot anterior ainda não concluída) enquanto faço o upgrade do cluster do Amazon OpenSearch Service?

Snapshot_restore_exception

Ao tentar migrar dados de um cluster local para um domínio do OpenSearch Service, a seguinte exceção pode ser encontrada:

{
  "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 de classe de armazenamento do Amazon S3 Glacier

Caso esteja armazenando um snapshot restaurado na classe de armazenamento do Amazon Simple Storage Service 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 a classe 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.