注意事项:我是一位经验丰富的C#开发人员,但是不熟悉Python。我创建了一个Python AWS Lambda函数,希望将数据发布到我的AWS ElasticSearch服务中以创建新索引。
该函数成功执行,未报告任何错误,但是我的ES域中没有活动(我希望创建新索引)。代码和结果如下(我正在使用AWS控制台中的测试JSON数据)。我可能需要一些异常处理,但是不确定如何从ES帖子中获取结果?
假设以下内容: -我具有用于访问密钥,秘密密钥和ES端点的Lambda环境变量。我已经为有问题的IAM用户使用正确的访问策略设置了我的ES域。
代码:
from __future__ import print_function
from requests_aws4auth import AWS4Auth
import boto3
import requests
import json
import os
def send_signed(method, url, service='es', region='ap-southeast-2', body=None):
credentials = boto3.Session().get_credentials()
auth = AWS4Auth(os.environ['ACCESS_KEY_ID'], os.environ['SECRET_ACCESS_KEY'],
region, service, session_token=credentials.token)
fn = getattr(requests, method)
if body and not body.endswith("\n"):
body += "\n"
fn(url, auth=auth, data=body,
headers={"Content-Type":"application/json"})
def lambda_handler(event, context):
print("Executing function handler")
print("Event incoming: " + json.dumps(event,indent=2))
url = os.environ['ES_ENDPOINT']
doc = json.dumps(event,indent=2)
send_signed('post', url, body=doc)
控制台结果:
START RequestId: 8e41edee-fda0-11e8-949a-357d7cb2ae6f Version: $LATEST
Executing function handler
Event incoming: {
"key3": "value3",
"key2": "value2",
"key1": "value1"
}
END RequestId: 8e41edee-fda0-11e8-949a-357d7cb2ae6f
REPORT RequestId: 8e41edee-fda0-11e8-949a-357d7cb2ae6f Duration: 386.81 ms Billed Duration: 400 ms Memory Size: 128 MB Max Memory Used: 36 MB
答案 0 :(得分:0)
根据我的经验,最好的方法是使用 Python's Elasticsearch Client。
对于客户端,您可以使用如下一行代码upload documents to your index:
es.index(index=TABLE_NAME, id=doc_id, body=record, request_timeout=100)
如果您想了解更多信息,请查看此 GitHub Repository。