Conexiones de OpenSearch Service - AWS Glue

Conexiones de OpenSearch Service

Puede usar AWS Glue for Spark para leer y escribir en tablas de OpenSearch Service en AWS Glue 4.0 y versiones posteriores. Puede definir qué leer del servicio OpenSearch con una consulta de OpenSearch. Se conecta a OpenSearch Service mediante credenciales de autenticación básica HTTP almacenadas AWS Secrets Manager a través de una conexión de AWS Glue. Esta característica no es compatible con OpenSearch Service sin servidor.

Para obtener más información acerca de Amazon OpenSearch Service, consulte la documentación de Amazon OpenSearch Service.

Configurar conexiones de OpenSearch Service

Para conectarse a OpenSearch Service desde AWS Glue, deberá crear y almacenar sus credenciales de OpenSearch Service en un AWS Secrets Manager secreto y, a continuación, asociar ese secreto a una conexión OpenSearch Service AWS Glue.

Requisitos previos:

  • Identifique el punto de conexión del dominio, el AOSEndpoint y el puerto, AOSport desde el que desea leer o cree el recurso siguiendo las instrucciones de la documentación de Amazon OpenSearch Service. Para obtener más información sobre la creación de un dominio, consulte Crear y administrar dominios de Amazon OpenSearch Service en la documentación de Amazon OpenSearch Service.

    Un punto de conexión de dominio de Amazon OpenSearch Service tendrá el siguiente formulario predeterminado: https://search-domainName-unstructuredIdContent.region.es.amazonaws.com. Para obtener más información sobre cómo identificar su punto de conexión de dominio, consulte Crear y administrar dominios de Amazon OpenSearch Service en la documentación de Amazon OpenSearch Service.

    Identifique o genere credenciales de autenticación básica HTTP, aosUser y aosPassword para su dominio.

Para configurar una conexión a OpenSearch Service:
  1. En AWS Secrets Manager, cree un secreto con sus credenciales de OpenSearch Service. Para crear un secreto en Secrets Manager, siga el tutorial disponible en Crear un secreto AWS Secrets Manager en la documentación AWS Secrets Manager. Después de crear el secreto, conserve el nombre secreto, secretName, para el siguiente paso.

    • Al seleccionar pares clave/valor, genere un par para la clave opensearch.net.http.auth.user con el valor aosUser.

    • Al seleccionar pares clave/valor, genere un par para la clave opensearch.net.http.auth.pass con el valor aosPassword.

  2. En la consola de AWS Glue, genere una conexión mediante los pasos que se indican en Adición de una conexión de AWS Glue. Tras crear la conexión, conserve el nombre de la conexión, connectionName, para el uso futuro en AWS Glue.

    • Al seleccionar un tipo de conexión, seleccione OpenSearch Service.

    • Al seleccionar un punto de conexión de dominio, proporcione aosEndpoint.

    • Al seleccionar un puerto, proporcione aosPort.

    • Al seleccionar un secreto AWS, proporcione un secretName.

Tras crear una conexión AWS Glue OpenSearch Service, deberá realizar los siguientes pasos antes de ejecutar su trabajo de AWS Glue:

  • Otorgue al rol de IAM asociado al permiso de su trabajo de AWS Glue para leer secretName.

  • En la configuración del trabajo de Glue AWS, proporcione connectionName como una conexión de red adicional.

Lectura de los índices de OpenSearch Service

Requisitos previos:

  • Un índice de OpenSearch Service del que quiera leer, aosIndex.

  • Una conexión de AWS Glue OpenSearch Service configurada para proporcionar información de autenticación y ubicación de red. Para obtenerla, complete los pasos del procedimiento anterior, para configurar una conexión al servicio OpenSearch. Necesitará el nombre de la conexión de AWS Glue, connectionName.

En este ejemplo se lee un índice de Amazon OpenSearch Service. Deberá proporcionar el parámetro pushdown.

Por ejemplo:

opensearch_read = glueContext.create_dynamic_frame.from_options( connection_type="opensearch", connection_options={ "connectionName": "connectionName", "opensearch.resource": "aosIndex", "pushdown": "true", } )

También puede proporcionar una cadena de consultas para filtrar los resultados devueltos a su DynamicFrame. Deberá configurar opensearch.query.

opensearch.query puede tomar una cadena de parámetros de consulta de URL queryString o un objeto DSL JSON de consulta queryObject. Para obtener más información sobre la consulta DSL, consulte Query DSL en la documentación de OpenSearch. Para proporcionar una cadena de parámetros de consulta de URL, anteponga ?q= a la consulta, tal y como lo haría en una URL completa. Para proporcionar un objeto DSL de consulta, coloque la cadena escape del objeto JSON antes de proporcionarlo.

Por ejemplo:

queryObject = "{ "query": { "multi_match": { "query": "Sample", "fields": [ "sample" ] } } }" queryString = "?q=queryString" opensearch_read_query = glueContext.create_dynamic_frame.from_options( connection_type="opensearch", connection_options={ "connectionName": "connectionName", "opensearch.resource": "aosIndex", "opensearch.query": queryString, "pushdown": "true", } )

Para obtener más información sobre cómo crear una consulta fuera de su sintaxis específica, consulte Sintaxis de cadenas de consulta en la documentación de OpenSearch.

Al leer colecciones de OpenSearch que contengan datos de tipo matriz, debe especificar qué campos son de tipo matriz en la llamada al método mediante el parámetro opensearch.read.field.as.array.include.

Por ejemplo, al leer el siguiente documento, encontrará los campos de matriz genre y actor:

{ "_index": "movies", "_id": "2", "_version": 1, "_seq_no": 0, "_primary_term": 1, "found": true, "_source": { "director": "Frankenheimer, John", "genre": [ "Drama", "Mystery", "Thriller", "Crime" ], "year": 1962, "actor": [ "Lansbury, Angela", "Sinatra, Frank", "Leigh, Janet", "Harvey, Laurence", "Silva, Henry", "Frees, Paul", "Gregory, James", "Bissell, Whit", "McGiver, John", "Parrish, Leslie", "Edwards, James", "Flowers, Bess", "Dhiegh, Khigh", "Payne, Julie", "Kleeb, Helen", "Gray, Joe", "Nalder, Reggie", "Stevens, Bert", "Masters, Michael", "Lowell, Tom" ], "title": "The Manchurian Candidate" } }

En este caso, debería incluir esos nombres de campo en su llamada al método. Por ejemplo:

"opensearch.read.field.as.array.include": "genre,actor"

Si el campo de matriz está anidado dentro de la estructura del documento, consúltelo mediante la notación de puntos: "genre,actor,foo.bar.baz". Esto especificaría una matriz baz incluida en el documento fuente a través del documento incrustado foo, que contiene el documento bar incrustado.

Escribir en tablas de OpenSearch Service

En este ejemplo, se escribe información de un DynamicFrame existente, dynamicFrame en OpenSearch Service. Si el índice ya contiene información, AWS Glue agregará los datos de su DynamicFrame. Deberá proporcionar el parámetro pushdown.

Requisitos previos:

  • Una tabla de OpenSearch Service a la que desearía escribir. Necesitará información de la identificación para la tabla. Llamemos a esto tableName.

  • Una conexión de AWS Glue OpenSearch Service configurada para proporcionar información de autenticación y ubicación de red. Para obtenerla, complete los pasos del procedimiento anterior, para configurar una conexión al servicio OpenSearch. Necesitará el nombre de la conexión de AWS Glue, connectionName.

Por ejemplo:

glueContext.write_dynamic_frame.from_options( frame=dynamicFrame, connection_type="opensearch", connection_options={ "connectionName": "connectionName", "opensearch.resource": "aosIndex", }, )

Referencia de opciones de conexión de OpenSearch Service

  • connectionName: obligatorio. Se utiliza para lectura/escritura. El nombre de una conexión de AWS Glue OpenSearch Service configurada para proporcionar información de autenticación y ubicación de red a su método de conexión.

  • opensearch.resource: obligatorio. Se utiliza para lectura/escritura. Valores válidos: nombres de índice de OpenSearch. El nombre del índice con el que interactuará su método de conexión.

  • opensearch.query: se utiliza para leer. Valores válidos: cadena JSON escapada o, si esta cadena comienza con ?, la parte de búsqueda de una URL. Una consulta de OpenSearch que filtra lo que se debe recuperar al leerlo. Para obtener más información sobre el uso de este parámetro, consulte la sección Lectura de los índices de OpenSearch Service anterior.

  • pushdown: obligatorio si. Se usa para leer. Valores válidos: booleano. Indica a Spark que pase las consultas de lectura a OpenSearch para que la base de datos solo devuelva los documentos relevantes.

  • opensearch.read.field.as.array.include: necesario si se leen datos de tipo matriz. Se usa para leer. Valores válidos: listas de nombres de campos separados por comas. Especifica los campos que se van a leer como matrices de los documentos de OpenSearch. Para obtener más información sobre el uso de este parámetro, consulte la sección Lectura de los índices de OpenSearch Service anterior.