

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Carregamento de dados de transmissão do Amazon DynamoDB
<a name="integrations-dynamodb"></a>

Você pode usar AWS Lambda para enviar dados para seu domínio de OpenSearch serviço do Amazon DynamoDB. Os novos dados recebidos na tabela do banco de dados acionam uma notificação de evento para o Lambda, que executa seu código personalizado para realizar a indexação.

## Pré-requisitos
<a name="integrations-dynamodb-prereq"></a>

Para continuar, você deve ter os recursos a seguir.


| Pré-requisito | Description | 
| --- | --- | 
| Tabela DynamoDB | A tabela contém os dados de origem. Para saber mais, consulte [Operações básicas nas tabelas do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html) no *Guia do desenvolvedor do Amazon DynamoDB*.A tabela deve residir na mesma região do seu domínio OpenSearch de serviço e ter um stream definido como **Nova imagem**. Para saber mais, consulte [Como habilitar um stream](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Enabling). | 
| OpenSearch Domínio do serviço | O destino dos dados depois que a função do Lambda os processa. Para saber mais, consulte [Criação OpenSearch de domínios de serviço](createupdatedomains.md#createdomains). | 
| perfil do IAM | Essa função deve ter permissões básicas OpenSearch de execução de Service, DynamoDB e Lambda, como as seguintes:  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": "*"
    }
  ]
}
```    A função deve ter a seguinte relação de confiança:  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```    Para saber mais, consulte [Criação de funções do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) no *Manual do usuário do IAM*. | 

## Criar a função do Lambda
<a name="integrations-dynamodb-lambda"></a>

Siga as instruções no [Criar o pacote de implantação do Lambda](integrations-s3-lambda.md#integrations-s3-lambda-deployment-package), mas crie um diretório chamado `ddb-to-opensearch` e use o seguinte 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 as variáveis de `region` e `host`.

Caso ainda não tenha feito, [instale o pip](https://pip.pypa.io/en/stable/installation/). Em seguida, use os seguintes comandos para instalar as dependências:

```
cd ddb-to-opensearch

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

Depois siga as instruções em [Criar a função do Lambda](integrations-s3-lambda.md#integrations-s3-lambda-create), mas especifique a função do IAM por [Pré-requisitos](#integrations-dynamodb-prereq) e as seguintes configurações do gatilho:
+ **Tabela**: a tabela do DynamoDB
+ **Tamanho do lote**: 100
+ **Posição inicial**: redução horizontal

Para saber mais, consulte [Processar novos itens com o DynamoDB Streams e o Lambda](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html) no *Guia do desenvolvedor do Amazon DynamoDB*.

Neste momento, você tem um conjunto completo de recursos: uma tabela do DynamoDB para seus dados de origem, um stream de alterações na tabela do DynamoDB, uma função que é executada após a alteração dos dados de origem e indexa essas alterações e um domínio de serviço para pesquisa e visualização. OpenSearch 

## Testar a função do Lambda
<a name="integrations-dynamodb-lambda-test"></a>

Depois de criar a função, você poderá testá-la adicionando um novo item à tabela do DynamoDB usando a 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
```

Em seguida, use o console de OpenSearch serviço ou os OpenSearch painéis para verificar se `lambda-index` contém um documento. Você também pode usar a seguinte solicitação:

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