2015-12-03 2 views
2

Я использую aws elasticsearch, и я хочу импортировать данные из dynamodb в elasticsearch, я не хочу использовать реку, потому что API API Elasticsearch устарел, любые альтернативы?как извлечь данные из DynamoDB и вставить их в Elasticsearch

+0

Вы можете [использовать logstash] (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLogstash.html), чтобы вытащить из DynamoDB в ES. – Val

+0

Я не хочу использовать логарифмический вывод elasticsearch, мне нужен динамический вывод logstash, но этот плагин не существует. – pho

+0

Итак, вы должны обновить свой вопрос, который говорит «от dynamodb до elasticsearch», поэтому я предложил входной логсташ-динамит. – Val

ответ

3

Я бы включил потоки dynamodb на вашем столе, а затем написал лямбда-функцию, которая считывает данные из потока и вставляет их в elasticsearch. У Amazon есть sample lambda function, который передает данные из кинезиса в elasticsearch. Для работы с потоком dynamodb его очень легко изменить.

+1

Не будет ли это импортировать только что созданные или обновленные записи? Как насчет тех, которые уже находятся в базе данных? –

0

Я сделал это с Python.

См. Образец ниже, который подтверждает вашу Лямбда-функцию для 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()) 

    [...] 

Вам нужна надлежащая роль для вашей лямбда-функции. Я предлагаю прочитать этот блог, который не полностью обновлен, но работает для роли IAM.

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

I, который Лямбда Blueprint упоминается в блоге все еще доступны, но не в этот раз.

Надеется, что это поможет

Смежные вопросы