如何从DynamoDB中提取数据并将其插入Elasticsearch

时间:2015-12-03 16:26:47

标签: elasticsearch logstash amazon-dynamodb

我使用aws elasticsearch并且我想将数据从dynamodb导入到elasticsearch,我不想使用river,因为Elasticsearch river API已被弃用,任何替代品?

2 个答案:

答案 0 :(得分:3)

我将在您的表上启用dynamodb流,然后编写一个lambda函数,该函数从流中读取数据并将其插入到elasticsearch中。亚马逊有一个sample lambda function,它将数据从kinesis传输到elasticsearch。修改它以使用dynamodb流应该非常容易。

答案 1 :(得分:0)

我使用Python。

请参阅下面的示例,该示例将您的Lambda函数验证为ES。 然后,您可以使用ElasticSearch Python库。

from __future__ import print_function

import json
import boto3
from elasticsearch import Elasticsearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth

def lambda_handler(event, context):

    session = boto3.session.Session()
    credentials = session.get_credentials()

    print(credentials.access_key)
    print(credentials.secret_key)
    print(credentials.token)
    print(session.region_name)

    awsauth = AWS4Auth(credentials.access_key,
                       credentials.secret_key,
                       session.region_name, 'es',
                       session_token=credentials.token)

    es = Elasticsearch(
        [ "YOUR ES ENDPOINT" ],
        http_auth=awsauth,
        use_ssl=True,
        verify_certs=True,
        connection_class=RequestsHttpConnection
    )

    print(es.info())

    [...]

您需要适当的Lambda函数角色。我建议阅读此博客,该博客尚未完全更新,但适用于IAM角色。

https://aws.amazon.com/blogs/compute/indexing-amazon-dynamodb-content-with-amazon-elasticsearch-service-using-aws-lambda/

我在博客中提到的Lambda Blueprint仍然可用,但目前还不是。

希望这个帮助