

# Conexiones de OpenSearch Service
<a name="aws-glue-programming-etl-connect-opensearch-home"></a>

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](https://docs.aws.amazon.com/opensearch-service/).

## Configurar conexiones de OpenSearch Service
<a name="aws-glue-programming-etl-connect-opensearch-configure"></a>

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](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/createupdatedomains.html) 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](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/createupdatedomains.html) 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](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) 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 `USERNAME` con el valor {{aosUser}}.
   + Al seleccionar **pares clave/valor**, genere un par para la clave `PASSWORD` con el valor {{aosPassword}}.

1. 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](console-connections.md). 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
<a name="aws-glue-programming-etl-connect-opensearch-read"></a>

**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](https://opensearch.org/docs/latest/query-dsl/index/) 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](https://opensearch.org/docs/latest/query-dsl/full-text/query-string/#query-string-syntax) 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
<a name="aws-glue-programming-etl-connect-opensearch-write"></a>

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
<a name="aws-glue-programming-etl-connect-opensearch-reference"></a>
+ `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](#aws-glue-programming-etl-connect-opensearch-read) 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 anterior [Lectura de los índices de OpenSearch Service](#aws-glue-programming-etl-connect-opensearch-read).