

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon DynamoDB에서 스트리밍 데이터 로드
<a name="integrations-dynamodb"></a>

 AWS Lambda 를 사용하여 Amazon DynamoDB에서 OpenSearch Service 도메인으로 데이터를 전송할 수 있습니다. 데이터베이스 테이블에 도착한 새 데이터는 Lambda로 이벤트 알림을 트리거한 다음 사용자 지정 코드를 실행해 인덱싱합니다.

## 사전 조건
<a name="integrations-dynamodb-prereq"></a>

계속하려면 먼저 다음 리소스를 확보해야 합니다.


| 사전 조건 | 설명 | 
| --- | --- | 
| DynamoDB 테이블 | 이 테이블에는 소스 데이터가 있습니다. 자세한 내용은 *Amazon DynamoDB 개발자 안내서*의 [DynamoDB 테이블에 대한 기본 작업](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html)을 참조하세요.<br />테이블은 OpenSearch Service 도메인과 같은 리전에 위치하고 **새 이미지**로 설정된 스트림이 있어야 합니다. 자세한 내용은 [스트림 활성화](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html#Streams.Enabling)를 참조하세요. | 
| OpenSearch Service 도메인 | Lambda 함수로 처리한 후의 데이터 대상 주소입니다. 자세한 내용은 [OpenSearch Service 도메인 생성](createupdatedomains.md#createdomains) 섹션을 참조하세요. | 
| IAM 역할 | 이 역할에는 다음과 같은 기본 OpenSearch Service, DynamoDB 및 Lambda 실행 권한이 있어야 합니다.  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": "*"
    }
  ]
}
```    <br />역할은 다음과 같은 신뢰 관계를 맺고 있어야 합니다.  JSON   

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```    <br />자세한 내용은 *IAM 사용 설명서*의 [IAM 역할 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)을 참조하세요. | 

## Lambda 함수 생성
<a name="integrations-dynamodb-lambda"></a>

[Lambda 배포 패키지 생성](integrations-s3-lambda.md#integrations-s3-lambda-deployment-package)의 지침을 따르되, `ddb-to-opensearch`라는 디렉터리를 만들고 `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.'
```

`region`과 `host`의 변수를 편집합니다.

아직 설치하지 않았다면 [pip를 설치](https://pip.pypa.io/en/stable/installation/)한 다음, 다음 명령을 사용하여 종속 항목을 설치합니다.

```
cd ddb-to-opensearch

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

이제 [Lambda 함수 생성](integrations-s3-lambda.md#integrations-s3-lambda-create) 지침을 따르되, [사전 조건](#integrations-dynamodb-prereq)에서 IAM 역할을 지정하고 트리거에는 다음 설정을 지정합니다.
+ **테이블**: 사용자의 DynamoDB 테이블
+ **배치 크기**: 100
+ **시작 위치**: 수평 트리밍

자세한 내용은 *Amazon DynamoDB 개발자 안내서*의 [DynamoDB Streams 및 Lambda를 사용하여 새 항목 처리](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.Tutorial.html)를 참조하세요.

이제 사용자는 완벽한 리소스 모음, 즉 소스 데이터에 대한 DynamoDB 테이블, 테이블 변경 사항의 DynamoDB 스트림, 소스 데이터가 변경되면 실행되어 이러한 변경 사항을 인덱싱하는 함수, 검색과 시각화를 위한 OpenSearch Service 도메인을 모두 확보하게 됩니다.

## Lambda 함수 테스트
<a name="integrations-dynamodb-lambda-test"></a>

함수를 만들었으면 이제 AWS CLI를 사용해 DynamoDB 테이블에 새 항목을 추가해 함수를 테스트할 수 있습니다.

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

그런 다음 OpenSearch Service 콘솔 또는 OpenSearch Dashboards를 사용하여 `lambda-index`에 한 개의 문서가 있음을 확인합니다. 다음 요청을 사용할 수도 있습니다.

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