如何从 DynamoDB 中提取数据并将它们插入 Elasticsearch
how to pull data from DynamoDB and insert them into Elasticsearch
我正在使用 aws elasticsearch,我想将数据从 dynamodb 导入到 elasticsearch,我不想使用 river,因为 Elasticsearch river API 已被弃用,还有其他选择吗?
我会在您的 table 上启用 dynamodb 流,然后编写一个 lambda 函数从流中读取数据并将其插入到 elasticsearch 中。 Amazon 有一个 sample lambda function 可以将数据从 kinesis 流式传输到 elasticsearch。它应该很容易修改以使用 dynamodb 流。
我让它与 Python 一起工作。
请参阅下面的示例,该示例向 ES 验证您的 Lambda 函数。
然后您可以使用 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 角色。
博客中提到的 Lambda Blueprint 仍然可用,但目前不可用。
希望对您有所帮助
我正在使用 aws elasticsearch,我想将数据从 dynamodb 导入到 elasticsearch,我不想使用 river,因为 Elasticsearch river API 已被弃用,还有其他选择吗?
我会在您的 table 上启用 dynamodb 流,然后编写一个 lambda 函数从流中读取数据并将其插入到 elasticsearch 中。 Amazon 有一个 sample lambda function 可以将数据从 kinesis 流式传输到 elasticsearch。它应该很容易修改以使用 dynamodb 流。
我让它与 Python 一起工作。
请参阅下面的示例,该示例向 ES 验证您的 Lambda 函数。 然后您可以使用 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 角色。
博客中提到的 Lambda Blueprint 仍然可用,但目前不可用。
希望对您有所帮助