Blog de Amazon Web Services (AWS)

Usar Amazon S3 para almacenar un índice de Amazon OpenSearch Service

Por Jon Handler, Arquitecto de Soluciones de AWS

 

8 de septiembre de 2021: Amazon Elasticsearch ha cambiado de nombre a Amazon OpenSearch Service. Ver más detalles.

 

Como se describe en nuestra documentación, puede usar las acciones del API de OpenSearch en Amazon OpenSearch Service para hacer instantáneas manuales de su dominio. Sin embargo, ¿sabía que también puede tomar instantáneas y restaurar un solo índice o varios índices? Esta publicación lo guiará a través de la realización de copias de seguridad y la restauración de un único índice mediante el uso de una bucket de Amazon S3.

Nota: Esta publicación utiliza un dominio de la versión 1.0 de Amazon OpenSearch Service.

 

 

Si está ejecutando una carga de trabajo de análisis de registros, use esta técnica para mover los índices más antiguos fuera de su clúster y conservarlos en Amazon S3 para uso futuro. Ahorrará en costos, y aún podrá recuperar y explorar los datos. También puede utilizar esta técnica para migrar un índice de un dominio de Amazon OpenSearch Service a otro para actualizaciones de versión. También puede copiar el índice a otra región de AWS e implementarlo allí para una copia entre regiones.

 

Configurar Amazon S3 y AWS Identity and Access Management (IAM)

Lo primero que debe hacer es crear una bucket en Amazon S3. Llamé a mi bucket os-s3-repository.

 

 

Ahora debe crear un rol de IAM con una política que permita a Amazon OpenSearch Service escribir en su bucket. Esto se describe a continuación, pero para obtener más detalles, consulte la documentación de IAM.

Para crear esta política de IAM, abra la consola de IAM, cambie a la pestaña Políticas y elija Crear política. Seleccione Crear su propia política y asigne un nombre a su política (nombré a la mía os-s3-repository).

Pegue el siguiente documento de política en el cuadro de texto provisto en la consola. Asegúrese de sustituir el nombre de su depósito donde tengo os-s3-repository. Este documento de política otorga permisos de listar, obtener, colocar y eliminar objetos a quienquiera que asuma el rol al que está adscrito. Cuando haya terminado, elija Crear política.

{
    "Version":"2012-10-17",
    "Statement": [
        {
            "Action": [ "s3:ListBucket" ],
            "Effect": "Allow",
            "Resource": [ "arn:aws:s3:::os-s3-repository" ]
        },
        {
            "Action": ["s3:GetObject",
                       "s3:PutObject",
                       "s3:DeleteObject",
                       "iam:PassRole"
                      ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::os-s3-repository/*"
            ]
        }
    ]
}

Puede utilizar la AWS Command Line Interface (AWS CLI) para crear un rol para adjuntar el documento de política. Si aún no lo ha hecho, debe instalar la AWS CLI.

A continuación, ejecute el siguiente comando para crear la nueva política. Asegúrese de reemplazar os-s3-repository con un nombre diferente.

aws iam create-role --role-name os-s3-repository --assume-role-policy-document '{"Version": "2012-10-17", "Statement": [{"Sid": "", "Effect": "Allow", "Principal": {"Service": "es.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'

Regrese a la consola de IAM, elija la pestaña Roles. Si no ve su función en la lista, elija    para actualizar la lista. Elija el rol que acaba de crear. Copie el nombre de recurso de Amazon (ARN) del rol; lo necesitará en un minuto. Luego elija Adjuntar política. Busque la política que creó anteriormente, seleccione la casilla de verificación junto a ella y luego elija Adjuntar política nuevamente.

Ahora tiene un rol que establece una relación de confianza entre Amazon OpenSearch Service y Amazon S3, lo que permite que Amazon OpenSearch Service escriba en su bucket de repositorio de Amazon S3.

Configurar un repositorio en Amazon OpenSearch Service

Utiliza la acción _snapshot del API de OpenSearch para registrar un repositorio con Amazon OpenSearch Service. Para realizar esta acción, necesita un cliente que pueda enviar solicitudes a su dominio.

Mis dominios están configurados para el control de acceso basado en el usuario, lo que requiere que firme mis solicitudes con la firma de AWS SigV4. Para simplificar el acceso ad hoc a mi clúster, utilizo un proxy de firma, disponible aquí en github.

Nota: Este proxy de firma fue desarrollado por un tercero, no AWS. AWS no es responsable del funcionamiento o la idoneidad del contenido externo. Este proxy es ideal para el desarrollo y la prueba, pero no es adecuado para cargas de trabajo de producción.

Descargue e instale el proxy, luego apúntelo a su dominio. Puede usar curl, enviando a localhost:9200.

curl -XPUT -H 'Content-Type: application/json' 'http://localhost:9200/_snapshot/snapshot-repository' -d'{
    "type": "s3",
    "settings": {
        "bucket": "os-s3-repository",
        "region": "us-west-2",
        "role_arn": "arn:aws:iam::123456789012:role/os-s3-repository"
    }
}'

Reemplace snapshot-repository con su propio nombre de repositorio. Reemplace os-s3-repository, us-west-2 y arn:aws:iam::123456789012:role/os-s3-repository con los detalles de su bucket y rol de Amazon S3.

Nota: Debe usar la llamada PUT, REST para hacer esto.

Hacer una copia de seguridad de un índice

Una vez que haya configurado su repositorio, use la acción _snapshot del API para crear una instantánea de su índice. De forma predeterminada, Amazon OpenSearch Service toma instantáneas de los índices de todo el clúster. Sin embargo, puede modificar este comportamiento con la configuración del parámetro «indices» en la petición.

curl -XPUT -H 'Content-Type: application/json' 'localhost:9200/_snapshot/os-s3-repository/snapshot_1' -d'
{
  "indices": "movies",
  "ignore_unavailable": true,
  "include_global_state": false
}'

Puede especificar uno o más índices para la copia de seguridad en esta instantánea. Puede optar por ignorar los errores si alguno de los índices no está disponible estableciendo ignore_unavailable en false. También es posible que desee almacenar el estado global del clúster. Sin embargo, para las copias de seguridad a nivel de índice, hacer esto generalmente no tiene sentido. Establezca include_global_state en false.

También puede usar la acción de la API _snapshot para verificar el estado de su instantánea u obtener una lista de todas las instantáneas en el repositorio.

curl -XGET localhost:9200/_snapshot/os-s3-repository/_status
curl -XGET localhost:9200/_snapshot/os-s3-repository/_all

Restaure su índice en el mismo clúster

Puede restaurar un solo índice a partir de una instantánea. Para restaurar, debe asegurarse de que el índice no esté abierto. Este estado suele ser el caso si vuelve a cargar datos antiguos en el mismo clúster. Si el índice está abierto, primero elimine el índice existente y luego restaure su copia de seguridad.

curl -XPOST -H 'Content-Type: application/json' 'localhost:9200/_snapshot/os-s3-repository/snapshot_1/_restore' -d'{
  "indices": "movies",
  "ignore_unavailable": false,
  "include_global_state": false
}'

Cuando restaure, deberá especificar la instantánea y también los índices que están en la instantánea. Lo hará de la misma manera que cuando tomó la instantánea inicialmente.

A dónde ir desde aquí

Al realizar una instantánea de un solo índice, se obtiene flexibilidad en cuanto a dónde y cuándo restaurar los datos.

Para datos de transmisión basados en el tiempo, se utiliza un conjunto continuo de índices. Por lo general, crea un índice nuevo para cada día. Usted administra su almacenamiento y uso de recursos limitando la cantidad de días que retiene datos, eliminando el índice más antiguo todos los días. Antes de eliminar el índice, realice una copia de seguridad en Amazon S3. Esta copia de seguridad le permite restaurarla en el futuro cuando necesite mirar más atrás de lo que tiene en su «clúster activo».

En todos los casos, puede utilizar copias de seguridad de índice único (o de clúster completo) para migrar sus datos entre regiones, entre clústeres e incluso entre versiones de Amazon OpenSearch Service (si la compatibilidad lo permite).

 

Este artículo fue traducido del Blog de AWS en Inglés.

 


Sobre el autor

Jon Handler es un arquitecto de soluciones de AWS que se especializa en tecnologías de búsqueda. Trabaja con nuestros clientes para proporcionar orientación y asistencia técnica en proyectos de bases de datos, ayudándoles a mejorar el valor de sus soluciones cuando utilizan AWS.

 

 

 

 

Sobre el traductor

Servio Reyes es Arquitecto de Soluciones en AWS México.

 

 

 

 

 

 

Sobre los revisores

Fabiana Serangelli es arquitecta de soluciones en AWS México.

 

 

 

 

 

 

Roberto Luna Rojas es arquitecto de soluciones especialista en ElastiCache en AWS.