

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Caricamento di dati in streaming da una tabella Amazon DynamoDB
<a name="integrations-dynamodb"></a>

Puoi utilizzarlo AWS Lambda per inviare dati al tuo dominio di OpenSearch servizio da Amazon DynamoDB. I nuovi dati che arrivano nella tabella di database attivano una notifica eventi per Lambda, che quindi esegue il codice personalizzato per eseguire l'indicizzazione.

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

Prima di procedere, devi disporre delle risorse indicate di seguito.


| Prerequisito | Description | 
| --- | --- | 
| DynamoDB tabella | La tabella contiene i dati di origine. Per ulteriori informazioni, consultare [Operazioni di base sulle tabelle DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html) nella *Guida per gli sviluppatori di Amazon DynamoDB*.**La tabella deve risiedere nella stessa regione del dominio di OpenSearch servizio e avere uno stream impostato su Nuova immagine.** Per ulteriori informazioni, consultare [Abilitazione di un flusso](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Enabling). | 
| OpenSearch Dominio di servizio | La destinazione dei dati dopo che la funzione Lambda li ha elaborati. Per ulteriori informazioni, consultare [Creazione OpenSearch di domini di servizio](createupdatedomains.md#createdomains). | 
| Ruolo IAM | Questo ruolo deve disporre delle autorizzazioni di esecuzione di base di OpenSearch Service, DynamoDB e Lambda, come le seguenti:  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": "*"
    }
  ]
}
```    Il ruolo deve avere la relazione di trust seguente:  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```    Per ulteriori informazioni, consultare [Creazione di ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) nella *Guida per l'utente di IAM*. | 

## Creazione della funzione Lambda
<a name="integrations-dynamodb-lambda"></a>

Procedi come descritto in [Creazione il pacchetto di implementazione Lambda](integrations-s3-lambda.md#integrations-s3-lambda-deployment-package), ma crea una directory denominata `ddb-to-opensearch` e utilizza il codice seguente per `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.'
```

Modifica le variabili per `region` e `host`.

[Installare pip](https://pip.pypa.io/en/stable/installation/), se non è già stato fatto, quindi utilizzare i seguenti comandi per installare le dipendenze:

```
cd ddb-to-opensearch

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

Procedi quindi come descritto in [Creazione della funzione Lambda](integrations-s3-lambda.md#integrations-s3-lambda-create), ma specifica il ruolo IAM dai [Prerequisiti](#integrations-dynamodb-prereq) e le impostazioni seguenti per il trigger:
+ **Tabella**: la tabella DynamoDB
+ **Batch size (Dimensione batch)**: 100
+ **Starting position (Posizione di inizio)**: orizzonte di taglio

Per ulteriori informazioni, consultare [Elaborazione di nuovi elementi con DynamoDB Streams e Lambda](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html)nella *Guida per gli sviluppatori di Amazon DynamoDB*.

A questo punto, hai a disposizione un set completo di risorse: una tabella DynamoDB per i dati di origine, un flusso DynamoDB di modifiche alla tabella, una funzione che viene eseguita dopo le modifiche dei dati di origine e indicizza tali modifiche e un dominio di servizio per la ricerca e la visualizzazione. OpenSearch 

## Test della funzione Lambda
<a name="integrations-dynamodb-lambda-test"></a>

Una volta creata la funzione, è possibile eseguirne il test aggiungendo un nuovo elemento alla tabella DynamoDB utilizzando 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
```

Utilizzate quindi la console di OpenSearch servizio o le OpenSearch dashboard per verificare che contenga un documento. `lambda-index` Puoi inoltre utilizzare la seguente richiesta:

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