¿Cómo resuelvo el error de instantánea manual en mi clúster de Amazon OpenSearch Service?

Última actualización: 01/09/2021

Quiero restaurar una instantánea manual de mi clúster de Amazon OpenSearch Service (sucesor de Amazon Elasticsearch Service). Sin embargo, recibo un error cuando intento registrar un repositorio o acceder a un repositorio registrado. ¿Por qué sucede esto y cómo puedo resolverlo?

Descripción breve

Para migrar correctamente los datos de una instantánea manual en OpenSearch Service, siga estos pasos:

1.    Elija un bucket de Amazon Simple Storage Service (Amazon S3) en el que desee almacenar la instantánea.

2.    Registre el bucket de Amazon S3 con el clúster fuente de OpenSearch Service.

3.    Tome una instantánea del clúster fuente de OpenSearch Service y luego almacénela en su bucket de Amazon S3.

4.    Registre el clúster de destino con el mismo bucket de Amazon S3 para asegurarse de que puede ver la instantánea manual.

5.    Restaure la instantánea manual en el clúster de destino en OpenSearch Service.

De lo contrario, es posible que se produzca uno de los siguientes problemas:

  • Error 403 Unauthorized (403 No autorizado)
  • repository_missing_exception
  • concurrent_snapshot_execution_exception
  • snapshot_restore_exception
  • a_w_s_security_token_service_exception
  • Estado de instantánea “PARTIAL” (PARCIAL)
  • Problema de clase de almacenamiento en Amazon S3 Glacier

Resolución

Error 403 no autorizado

Si habilitó el control de acceso detallado (FGAC) en el dominio de OpenSearch Service, es posible que reciba el siguiente error al tomar una instantánea:

{"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 el error 403 Unauthorized (403 No autorizado), asegúrese de especificar un parámetro username:password cada vez que tome una instantánea manual:

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

Nota: Debe ser un superusuario para habilitar el control de acceso detallado para su dominio de OpenSearch Service. Puede utilizar su nombre de superusuario y contraseña o establecer un rol de AWS Identity Access Management (IAM) como superusuario. Al acceder a la instantánea del clúster, especifique las credenciales de superusuario o el rol de IAM. Si especifica un rol de IAM, ese rol debe firmar las solicitudes HTTP mediante sigv4. Para obtener más información sobre el uso de roles de IAM y control de acceso detallado, consulte Creación y administración de dominios de Amazon OpenSearch Service.

También debe registrar un repositorio de instantáneas con la instantánea y asignar el rol manage_snapshots a un rol de IAM. El rol manage_snapshots debe tener los permisos adecuados (IAM:PassRole) para asumir el rol de IAM (TheSnapshotRole). Para obtener más información, consulte Requisitos previos de las instantáneas manuales.

Para asignar el rol manage_snapshots a un rol de IAM, siga estos pasos:

1.    Abra la consola de paneles de OpenSearch.

2.    Inicie sesión como usuario principal.

3.    Elija Security (Seguridad).

4.    Elija Roles.

5.    Elija manage_snapshots como su rol.

6.    Elija Mapped users (Usuarios asignados).

7.    Elija Manage mapping (Administrar mapeo).

8.    En Users (Usuarios), agregue su ARN de usuario (por ejemplo: “arn:aws:iam። 012345678912:user/username”).

9.    Registre el repositorio de instantáneas manuales.

Repository_missing_exception

Antes de tomar una instantánea del índice manual, debe registrar un repositorio de instantáneas manuales con OpenSearch Service. Su rol de IAM (TheSnapshotRole) también debe configurarse para que funcione con Amazon S3.

Si no ha registrado el repositorio de instantáneas antes de tomar una instantánea manual o utiliza un nombre de repositorio incorrecto, recibirá el siguiente error:

{"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 este error, asegúrese de que cumple los requisitos previos de las instantáneas manuales. Además, asegúrese de comprobar si hay erratas en el nombre del repositorio.

Concurrent_snapshot_execution_exception

Si hay una instantánea en curso, aparece el siguiente error al intentar tomar otra instantánea:

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 verificar si hay otra instantánea en curso, ejecute el siguiente comando:

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

Si ya hay una instantánea en curso, espere a que se complete la instantánea actual. O bien, si sospecha que la instantánea está bloqueada, compruebe el historial de instantáneas por hora. Para obtener más información, consulte ¿Por qué no puedo eliminar un índice o actualizar mi clúster de Amazon OpenSearch Service?

Snapshot_restore_exception

Si intenta migrar datos de un clúster en las instalaciones a un dominio de OpenSearch Service, es posible que se produzca la siguiente excepción:

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

Este mensaje de error aparece cuando una instantánea tomada en un clúster existente se ejecuta en una versión de Elasticsearch distinta de OpenSearch Service. Si su clúster se ejecuta en una versión de Elasticsearch anterior a la de OpenSearch Service, considere la posibilidad de actualizar su versión de Elasticsearch. También puede utilizar la API de reindexación remota para migrar los índices.

a_w_s_security_token_service_exception

Si el rol de IAM asociado a la instantánea manual no tiene una relación de confianza establecida para “es.amazonaws.com”, recibirá la siguiente excepción:

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

Con las instantáneas del servicio OpenSearch, se crea un rol interno (como arn:aws:sts::332315457451:assumed-role/cp-sts-grant-role/swift-us-west-2-prod-679203657591). Este rol interno asume el rol de IAM asociado a la instantánea manual y, a continuación, lleva a cabo las operaciones necesarias.

Para resolver la excepción del token de seguridad, asegúrese de especificar el rol de IAM asociado a la instantánea manual. Si no tiene un rol de IAM asociado a la instantánea manual, debe crear uno. Para obtener más información, consulte Requisitos previos de las instantáneas manuales.

Además, verifique la relación de confianza del rol de IAM asociado a la instantánea manual. La relación de confianza del rol debe especificar OpenSearch Service en la instrucción Principal de la siguiente manera:

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

Estado de instantánea PARTIAL (PARCIAL)

Una instantánea entra en estado “PARTIAL” (PARCIAL) por los siguientes motivos:

Una instantánea parcial indica que los datos de una partición no se han podido almacenar. Aún puede restaurar datos a partir de una instantánea parcial, pero debe usar instantáneas anteriores para restaurar los índices que falten. Para verificar si el clúster entró en estado “PARTIAL” (PARCIAL), compruebe el historial de instantáneas. Para obtener más información, consulte Restauración de instantáneas.

Problema de clase de almacenamiento en Amazon S3 Glacier

Si va a almacenar una instantánea restaurada en la clase de almacenamiento Amazon Simple Storage Service Glacier, evite aplicar una regla de ciclo de vida de Amazon S3 Glacier al bucket. Las instantáneas manuales no son compatibles con la clase de almacenamiento Amazon S3 Glacier. Por lo tanto, si aplica una política de ciclo de vida de Amazon S3 Glacier al bucket de S3, debe retroceder cualquier objeto que se encuentre en transición.

Después de volver a mover los objetos a la clase de almacenamiento estándar de Amazon S3, puede restaurar los objetos a partir de esas instantáneas. Para obtener más información, consulte Requisitos previos de las instantáneas manuales.