

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Carga de datos de streaming desde Amazon DynamoDB
<a name="integrations-dynamodb"></a>

Puede utilizarlos AWS Lambda para enviar datos a su dominio de OpenSearch servicio desde Amazon DynamoDB. Cuando llegan datos nuevos a la tabla de base de datos, activan una notificación de eventos en Lambda que, a su vez, ejecuta el código personalizado para realizar la indexación.

## Requisitos previos
<a name="integrations-dynamodb-prereq"></a>

Antes de continuar, debe contar con los siguientes recursos.


| Requisito previo | Description (Descripción) | 
| --- | --- | 
| Tabla de DynamoDB | La tabla contiene los datos de origen. Para más información, consulte [Operaciones básicas en tablas de DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html) en la *Guía para desarrolladores de Amazon DynamoDB*.La tabla debe residir en la misma región que su dominio de OpenSearch servicio y tener una transmisión configurada como **Nueva** imagen. Para más información, consulte [Habilitación de un flujo](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Enabling). | 
| OpenSearch Dominio de servicio | Es el destino de los datos después de que la función de Lambda los procesa. Para más información, consulte [Creación de dominios OpenSearch de servicio](createupdatedomains.md#createdomains). | 
| rol de IAM | Esta función debe tener permisos básicos OpenSearch de ejecución de Servicios, DynamoDB y Lambda, como los siguientes:  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpPost",
        "es:ESHttpPut",
        "dynamodb:DescribeStream",
        "dynamodb:GetRecords",
        "dynamodb:GetShardIterator",
        "dynamodb:ListStreams",
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "*"
    }
  ]
}
```    El rol debe tener la siguiente relación de confianza:  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```    Para más información, consulte [Creación de roles de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) en la *Guía del usuario de IAM*. | 

## Crear la función de Lambda
<a name="integrations-dynamodb-lambda"></a>

Siga las instrucciones de [Crear el paquete de implementación de Lambda](integrations-s3-lambda.md#integrations-s3-lambda-deployment-package), pero cree un directorio denominado `ddb-to-opensearch` y utilice el siguiente código para `sample.py`:

```
import boto3
import requests
from requests_aws4auth import AWS4Auth

region = '' # e.g. us-east-1
service = 'es'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

host = '' # the OpenSearch Service domain, e.g. https://search-mydomain.us-west-1.es.amazonaws.com
index = 'lambda-index'
datatype = '_doc'
url = host + '/' + index + '/' + datatype + '/'

headers = { "Content-Type": "application/json" }

def handler(event, context):
    count = 0
    for record in event['Records']:
        # Get the primary key for use as the OpenSearch ID
        id = record['dynamodb']['Keys']['id']['S']

        if record['eventName'] == 'REMOVE':
            r = requests.delete(url + id, auth=awsauth)
        else:
            document = record['dynamodb']['NewImage']
            r = requests.put(url + id, auth=awsauth, json=document, headers=headers)
        count += 1
    return str(count) + ' records processed.'
```

Edite las variables para `region` y `host`.

[Instale pip](https://pip.pypa.io/en/stable/installation/), si todavía no lo hizo, luego utilice los siguientes comandos para instalar las dependencias:

```
cd ddb-to-opensearch

pip install --target ./package requests
pip install --target ./package requests_aws4auth
```

A continuación, siga las instrucciones de [Crear la función de Lambda](integrations-s3-lambda.md#integrations-s3-lambda-create), pero especifique el rol de IAM de [Requisitos previos](#integrations-dynamodb-prereq) y la configuración siguiente para el desencadenador:
+ **Tabla**: tabla de DynamoDB
+ **Tamaño del lote**: 100
+ **Posición inicial**: Trim horizon

Para más información, consulte [Process New Items with DynamoDB Streams and Lambda](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html) en la *Guía para desarrolladores de Amazon DynamoDB*.

En este punto, dispone de un conjunto completo de recursos: una tabla de DynamoDB para los datos de origen, un flujo de cambios de DynamoDB en la tabla, una función que se ejecuta después de que los datos de origen cambien e indexa esos cambios, y un dominio de servicio para la búsqueda y la visualización. OpenSearch 

## Prueba de la función de Lambda
<a name="integrations-dynamodb-lambda-test"></a>

Después de crear la función, puede probarla al agregar un elemento a la tabla de DynamoDB mediante la AWS CLI:

```
aws dynamodb put-item --table-name test --item '{"director": {"S": "Kevin Costner"},"id": {"S": "00001"},"title": {"S": "The Postman"}}' --region us-west-1
```

A continuación, utilice la consola de OpenSearch servicio o los OpenSearch paneles de control para comprobar que contiene un documento. `lambda-index` También puede utilizar la solicitud siguiente:

```
GET https://domain-name/lambda-index/_doc/00001
{
    "_index": "lambda-index",
    "_type": "_doc",
    "_id": "00001",
    "_version": 1,
    "found": true,
    "_source": {
        "director": {
            "S": "Kevin Costner"
        },
        "id": {
            "S": "00001"
        },
        "title": {
            "S": "The Postman"
        }
    }
}
```