Python AWS Lambda函数调用成功,但未创建elasticsearch索引

时间:2018-12-12 00:00:23

标签: python elasticsearch aws-lambda

注意事项:我是一位经验丰富的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  

1 个答案:

答案 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