

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Memuat data streaming dari Amazon DynamoDB
<a name="integrations-dynamodb"></a>

Anda dapat menggunakan AWS Lambda untuk mengirim data ke domain OpenSearch Layanan Anda dari Amazon DynamoDB. Data baru yang tiba di basis data memicu notifikasi peristiwa untuk Lambda, yang kemudian menjalankan kode kustom Anda untuk melakukan pengindeksan.

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

Sebelum melanjutkan, Anda harus memiliki sumber daya berikut.


| Prasyarat | Deskripsi | 
| --- | --- | 
| Tabel DynamoDB | Tabel berisi data sumber Anda. Untuk informasi selengkapnya, lihat [Operasi Dasar pada Tabel DynamoDB di Panduan Pengembang Amazon *DynamoDB*](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html).Tabel harus berada di Wilayah yang sama dengan domain OpenSearch Layanan Anda dan memiliki aliran yang disetel ke **Gambar baru**. Untuk mempelajari selengkapnya, lihat [Mengaktifkan Pengaliran](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Enabling). | 
| OpenSearch Domain layanan | Tujuan untuk data setelah fungsi Lambda Anda memprosesnya. Untuk informasi selengkapnya, lihat [Membuat domain OpenSearch Layanan](createupdatedomains.md#createdomains). | 
| IAM Role | Peran ini harus memiliki izin eksekusi OpenSearch Service, DynamoDB, dan Lambda dasar, seperti berikut ini:  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": "*"
    }
  ]
}
```    Peran harus memiliki hubungan kepercayaan berikut:  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```    Untuk mempelajari selengkapnya, lihat [Membuat peran IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html) di *Panduan Pengguna IAM*. | 

## Buat fungsi Lambda
<a name="integrations-dynamodb-lambda"></a>

Ikuti instruksi di [Membuat paket deployment Lambda](integrations-s3-lambda.md#integrations-s3-lambda-deployment-package), tapi buat sebuah direktori bernama `ddb-to-opensearch` dan gunakan kode berikut untuk `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.'
```

Edit variabel untuk `region` dan `host`.

[Instal pip](https://pip.pypa.io/en/stable/installation/) jika Anda belum melakukannya, maka gunakan perintah berikut untuk menginstal dependensi Anda:

```
cd ddb-to-opensearch

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

Kemudian ikuti instruksi di [Buat fungsi Lambda](integrations-s3-lambda.md#integrations-s3-lambda-create), namun tentukan IAM role dari [Prasyarat](#integrations-dynamodb-prereq) dan pengaturan berikut untuk pemicu:
+ **Tabel**: Tabel DynamoDB Anda
+ **Ukuran Batch**: 100
+ **Posisi awal**: Potong cakrawala

*Untuk mempelajari lebih lanjut, lihat [Memproses Item Baru dengan DynamoDB Streams dan Lambda di Panduan Pengembang Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html).*

Pada titik ini, Anda memiliki satu set lengkap sumber daya: tabel DynamoDB untuk data sumber Anda, aliran perubahan DynamoDB pada tabel, fungsi yang berjalan setelah data sumber Anda berubah dan mengindeks perubahan tersebut, dan domain Layanan untuk pencarian dan visualisasi. OpenSearch 

## Tes fungsi Lambda
<a name="integrations-dynamodb-lambda-test"></a>

Setelah Anda membuat fungsi, Anda dapat mengujinya dengan menambahkan item baru ke tabel DynamoDB dengan menggunakan 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
```

Kemudian gunakan konsol OpenSearch Layanan atau OpenSearch Dasbor untuk memverifikasi bahwa `lambda-index` berisi dokumen. Anda juga dapat menggunakan permintaan berikut:

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