

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Chargement de données de streaming à partir d'Amazon DynamoDB
<a name="integrations-dynamodb"></a>

Vous pouvez l'utiliser AWS Lambda pour envoyer des données vers votre domaine de OpenSearch service depuis Amazon DynamoDB. Les nouvelles données qui arrivent dans la table de la base de données déclenchent l'envoi d'une notification d'événement à Lambda, qui exécute ensuite votre code personnalisé pour effectuer l'indexation.

## Conditions préalables
<a name="integrations-dynamodb-prereq"></a>

Avant de poursuivre, vous devez disposer des ressources suivantes.


| Prérequis | Description | 
| --- | --- | 
| Tableau DynamoDB | Le tableau contient vos données sources. Pour plus d'informations, consultez [Opérations de base sur les tables DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html)dans le *Guide du développeur Amazon DynamoDB*.La table doit résider dans la même région que votre domaine de OpenSearch service et avoir un flux défini sur **Nouvelle image**. Pour en savoir plus, consultez [Activation d'un flux](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Enabling). | 
| OpenSearch Domaine de service | Destination des données après leur traitement par votre fonction Lambda. Pour de plus amples informations, veuillez consulter [Création de domaines OpenSearch de service](createupdatedomains.md#createdomains). | 
| Rôle IAM | Ce rôle doit disposer des autorisations d'exécution de base de OpenSearch service, DynamoDB et Lambda, telles que les suivantes :  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": "*"
    }
  ]
}
```    Le rôle doit avoir la relation d'approbation suivante :  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```    Pour en savoir plus, consultez [Création de rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) dans le *Guide de l'utilisateur IAM*. | 

## Créer la fonction Lambda
<a name="integrations-dynamodb-lambda"></a>

Suivez les instructions fournies dans [Créer le package de déploiement Lambda](integrations-s3-lambda.md#integrations-s3-lambda-deployment-package), mais créez un répertoire nommé `ddb-to-opensearch` et utilisez le code suivant pour `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.'
```

Modifiez les variables des champs `region` et `host`.

Si vous ne l'avez pas encore fait, [installez pip](https://pip.pypa.io/en/stable/installation/), puis utilisez les commandes suivantes pour installer vos dépendances :

```
cd ddb-to-opensearch

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

Ensuite, suivez les instructions fournies dans [Créer la fonction Lambda](integrations-s3-lambda.md#integrations-s3-lambda-create), mais spécifiez le rôle IAM issu de [Conditions préalables](#integrations-dynamodb-prereq) et les paramètres suivants pour le déclencheur :
+ **Table** : votre table DynamoDB
+ **Taille de lot** : 100
+ **Position de départ** : horizon Trim

Pour en savoir plus, consultez [Traitement des nouveaux éléments avec DynamoDB Streams et Lambda](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html) dans le *Guide du développeur Amazon DynamoDB*.

À ce stade, vous disposez d'un ensemble complet de ressources : une table DynamoDB pour vos données source, un flux DynamoDB contenant les modifications apportées à la table, une fonction qui s'exécute après les modifications de vos données source et indexe ces modifications, et un domaine de service pour la recherche et la visualisation. OpenSearch 

## Test de la fonction Lambda
<a name="integrations-dynamodb-lambda-test"></a>

Après avoir créé la fonction, vous pouvez la tester en ajoutant un nouvel élément dans la table DynamoDB à l'aide de l'interface 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
```

Utilisez ensuite la console OpenSearch de service ou OpenSearch les tableaux de bord pour vérifier qu'il `lambda-index` contient un document. Vous pouvez également utiliser la demande suivante :

```
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"
        }
    }
}
```