Athrun Data Intelligence


El paso rápido y confiable a la información es crucial para tomar decisiones comerciales inteligentes. Por eso las empresas están recurriendo a Servicio de búsqueda abierta de Amazon para potenciar sus capacidades de búsqueda y investigación. OpenSearch Service simplifica la implementación, operación y escalamiento de sistemas de búsqueda en la montón, permitiendo casos de uso como investigación de registros, monitoreo de aplicaciones y búsqueda de sitios web.

La papeleo válido de los índices y capital del clúster de OpenSearch Service puede ocasionar mejoras significativas en el rendimiento, la escalabilidad y la confiabilidad, todo lo cual impacta directamente en los resultados de una empresa. Sin confiscación, la industria carece de soluciones integradas y perfectamente documentadas para automatizar estas importantes tareas operativas.

Aplicar la integración continua y la implementación continua (CI/CD) para gobernar los capital del índice OpenSearch puede ayudar a lograrlo. Por ejemplo, acumular configuraciones de índice en un repositorio de origen permite un mejor seguimiento, colaboración y reversión. El uso de herramientas de infraestructura como código (IaC) puede ayudar a automatizar la creación de capital, proporcionando coherencia y reduciendo el trabajo manual. Por zaguero, el uso de una canalización de CI/CD puede automatizar las implementaciones y optimizar el flujo de trabajo.

En esta publicación, discutimos dos opciones para conquistar esto: la Proveedor Terraform OpenSearch y el Transformación biblioteca. Cuál se adapta mejor a su caso de uso depende de las herramientas con las que esté familiarizado, el verbo que elija y su canalización existente.

Descripción universal de la alternativa

Veamos una implementación sencilla. Para este caso de uso, utilizamos el Kit de incremento de la montón de AWS (AWS CDK) para aprovisionar la infraestructura relevante como se describe en el venidero diagrama de casa a continuación, AWS Lambda para activar scripts de Evolution y Construcción de código AWS para aplicar archivos Terraform. Puede encontrar el código de la alternativa completa en GitHub. repositorio.

Diagrama de arquitectura de la solución

Requisitos previos

Para seguir esta publicación, debe tener lo venidero:

Construya la alternativa

Para crear una alternativa automatizada para la papeleo de clústeres del servicio OpenSearch, siga estos pasos:

  1. Ingrese los siguientes comandos en una terminal para descargar el código de la alternativa; construir la aplicación Java; construir la capa Lambda requerida; cree un dominio OpenSearch, dos funciones Lambda y un plan CodeBuild; y desplegar el código:
git clone https://github.com/aws-samples/opensearch-automated-cluster-management
cd opensearch-automated-cluster-management
cd app/openSearchMigration
mvn package
cd ../../lambda_layer
chmox a+x create_layer.sh
./create_layer.sh
cd ../infra
npm install
npx cdk bootstrap
aws iam create-service-linked-role --aws-service-name es.amazonaws.com
npx cdk deploy --require-approval never

  1. Espere de 15 a 20 minutos para que la infraestructura termine de implementarse, luego verifique que su dominio OpenSearch esté en funcionamiento y que la función Lambda y el plan CodeBuild se hayan creado, como se muestra en las siguientes capturas de pantalla.

Dominio OpenSearch aprovisionado correctamente La función Lambda de migración de OpenSearch se creó correctamente La función OpenSearchQuery Lambda se creó correctamente Proyecto CodeBuild creado exitosamente

Antaño de utilizar herramientas automatizadas para crear plantillas de índice, puede confirmar que ya no exista ninguna utilizando el OpenSearchQuery Función lambda.

  1. En la consola Lambda, navegue hasta el archivo relevante Función
  2. en el Prueba pestaña, elija Prueba.

La función debería devolver el mensaje «No hay patrones de índice creados por Terraform o Evolution», como se muestra en la venidero captura de pantalla.

Compruebe que no se hayan creado patrones de índice

Aplicar archivos Terraform

Primero, usa Terraform con CodeBuild. El código está inteligente para que lo pruebes. Veamos algunas partes importantes de la configuración:

  1. Defina las variables requeridas para su entorno:
variable "OpenSearchDomainEndpoint" {
  type = string
  description = "OpenSearch domain URL"
}

variable "IAMRoleARN" {
  type = string
  description = "IAM Role ARN to interact with OpenSearch"
}

  1. Especificar y configurar el proveedor.
terraform {
  required_providers {
    opensearch = {
      source = "opensearch-project/opensearch"
      version = "2.3.1"
    }
  }
}

provider "opensearch" {
  url = "https://${var.OpenSearchDomainEndpoint}"
  aws_assume_role_arn = "${var.IAMRoleARN}"
}

NOTA: A la momento de publicación de este post, existe una bicho en el proveedor Terraform OpenSearch que se activará al iniciar su plan CodeBuild y que impedirá una ejecución exitosa. Hasta que se solucione, utilice la venidero traducción:

terraform {
  required_providers {
    opensearch = {
      source = "gnuletik/opensearch"
      version = "2.7.0"
    }
  }
}

  1. Crear una plantilla de índice
resource "opensearch_index_template" "template_1" {
  name = "cicd_template_terraform"
  body = <

Ahora está inteligente para realizar la prueba.

  1. En la consola de CodeBuild, navegue hasta el plan correspondiente y elija Comenzar a construir.

La compilación debería completarse correctamente y debería ver las siguientes líneas en los registros:

opensearch_index_template.template_1: Creating...
opensearch_index_template.template_1: Creation complete after 0s (id=cicd_template_terraform)
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Puede comprobar que la plantilla de índice se ha creado correctamente utilizando la misma función Lambda que ayer y debería ver los siguientes resultados.

Índice de Terraform creado correctamente

Ejecutar scripts de progreso

En el venidero paso, utilizará la biblioteca Evolution. El código está inteligente para que lo pruebes. Veamos algunas partes importantes del código y la configuración:

  1. Para principiar, debe asociar la última traducción de la biblioteca principal de Evolution y el SDK de AWS como dependencias de Maven. El archivo xml completo está acondicionado en GitHub. repositorio; para comprobar la compatibilidad de la biblioteca Evolution con diferentes versiones de OpenSearch, consulte aquí.

    com.senacor.elasticsearch.evolution
    elasticsearch-evolution-core
    0.6.0


   software.amazon.awssdk
   auth

  1. Cree Evolution Bean y un interceptor de AWS (que implemente HttpRequestInterceptor).

Los interceptores son mecanismos abiertos en los que el SDK flama al código que usted escribe para inyectar comportamiento en el ciclo de vida de la solicitud y la respuesta. La función del interceptor de AWS es conectarse a la ejecución de solicitudes de API y crear una solicitud firmada por AWS con el sello de las funciones de IAM adecuadas. Puedes usar lo venidero código para crear su propia implementación para firmar todas las solicitudes realizadas a OpenSearch interiormente de AWS.

  1. Cree su propio cliente OpenSearch para encargar la creación cibernética de índices, asignaciones, plantillas y apelativo.

El cliente ElasticSearch predeterminado que viene incluido como parte de la dependencia de Maven no se puede utilizar para realizar PUT llamadas al clúster OpenSearch. Por lo tanto, debe evitar la instancia de cliente REST predeterminada y asociar una CallBack en torno a AwsRequestSigningInterceptor.

La venidero es una implementación de muestra:

private RestClient getOpenSearchEvolutionRestClient() {
    return RestClient.builder(getHttpHost())
        .setHttpClientConfigCallback(hacb -> 
            hacb.addInterceptorLast(getAwsRequestSigningInterceptor()))
        .build();
}

  1. Utilice el Evolution Bean para vocear a su método de migración, que es responsable de iniciar la migración de los scripts definidos ya sea usando classpath o filepath:
public void executeOpensearchScripts() {
    ElasticsearchEvolution opensearchEvolution = ElasticsearchEvolution.configure()
        .setEnabled(true) // true or false
        .setLocations(Arrays.asList("classpath:opensearch_migration/almohadilla",
            "classpath:opensearch_migration/dev")) // List of all locations where scripts are located.
        .setHistoryIndex("opensearch_changelog") // Tracker index to store history of scripts executed.
        .setValidateOnMigrate(false) // true or false
        .setOutOfOrder(true) // true or false
        .setPlaceholders(Collections.singletonMap("env","dev")) // list of placeholders which will get replaced in the script during execution.
        .load(getElasticsearchEvolutionRestClient());
    opensearchEvolution.migrate();
}

  1. Un Evolution El script de migración representa una citación REST a la API OpenSearch (por ejemplo, PUT /_index_template/cicd_template_evolution), donde se definen patrones de índice, configuraciones y asignaciones en formato JSON. Evolution interpreta estos scripts, gestiona su control de versiones y proporciona una ejecución ordenada. Vea el venidero ejemplo:
PUT /_index_template/cicd_template_evolution
Content-Type: application/json

{
  "index_patterns": ("evolution_index_*"),
  "template": {
    "settings": {
      "number_of_shards": "1"
    },
    "mappings": {
        "_source": {
            "enabled": false
        },
        "properties": {
            "host_name": {
                "type": "keyword"
            },
            "created_at": {
                "type": "date",
                "format": "EEE MMM dd HH:mm:ss Z YYYY"
            }
        }
    }
  }
}

Las dos primeras líneas debe ir seguido de una término en blanco. Evolution asimismo admite líneas de comentarios en sus scripts de migración. Cada término que comienza con # o // se interpretará como una término de comentario. Las líneas de comentarios no se envían a OpenSearch. En cambio, son filtrados por Evolution.

La convención de nomenclatura de archivos del script de migración debe seguir un patrón:

  • Principiar con esMigrationPrefix que es por defecto V o el valía que se ha configurado mediante la opción de configuración esMigrationPrefix
  • Seguido de un número de traducción, que debe ser numeral y puede estructurarse separando las partes de la traducción con un punto (.)
  • Seguido por el versionDescriptionSeparator: __ (el símbolo de doble subrayado)
  • Seguido de una descripción, que puede ser cualquier texto que admita su sistema de archivos.
  • Terminar con esMigrationSuffixes que es por defecto .http y es configurable y no distingue entre mayúsculas y minúsculas

Ahora está inteligente para ejecutar su primer cambio automatizado. Ya se ha creado un ejemplo de script de migración, al que puede consultar en una sección susodicho. Creará una plantilla de índice citación cicd_template_evolution.

  1. En la consola Lambda, navegue hasta su función.
  2. en el Prueba pestaña, elija Prueba.

A posteriori de unos segundos, la función debería completarse exitosamente. Puede revisar la salida del registro en el Detalles sección, como se muestra en las siguientes capturas de pantalla.

La función de migración finaliza con éxito

La plantilla de índice ahora existe y puede confirmar que su configuración esté en término con el script, como se muestra en la venidero captura de pantalla.

Plantilla de índice de evolución creada correctamente

Quitar

Para escobillar los capital que se crearon como parte de esta publicación, ejecute los siguientes comandos (en el infra carpeta):

Conclusión

En esta publicación, demostramos cómo automatizar las plantillas de índice de OpenSearch utilizando prácticas y herramientas de CI/CD como Terraform o la biblioteca Evolution.

Para obtener más información sobre el servicio OpenSearch, consulte la Prontuario para desarrolladores del servicio Amazon OpenSearch. Para explorar más a fondo la biblioteca Evolution, consulte la documentación. Para obtener más información sobre el proveedor Terraform OpenSearch, consulte la documentación.

Esperamos que esta breviario detallada y el código adjunto le ayuden a principiar. Pruébelo, háganos memorizar su opinión en la sección de comentarios y no dude en comunicarse con nosotros si tiene preguntas.


Acerca de los autores

Camille BirbesCamille Birbes es arquitecto senior de soluciones en AWS y tiene su sede en Hong Kong. Trabaja con las principales instituciones financieras para diseñar y crear soluciones seguras, escalables y de incorporación disponibilidad en la montón. Fuera del trabajo, Camille disfruta de cualquier forma de charnela, desde juegos de mesa hasta el zaguero videojuego.

Sriharsha Subramanya Begolli Trabaja como arquitecto senior de soluciones en AWS, con sede en Bengaluru, India. Su enfoque principal es ayudar a los clientes de grandes empresas a modernizar sus aplicaciones y desarrollar sistemas basados ​​en la montón para cumplir con sus objetivos comerciales. Su experiencia radica en los dominios de datos y investigación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *