【问题标题】:Python AWS Lambda function invocation succeeds but no elasticsearch index createdPython AWS Lambda 函数调用成功,但未创建弹性搜索索引
【发布时间】:2021-07-08 10:35:07
【问题描述】:

警告:我是一位经验丰富的 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  

【问题讨论】:

  • 您是否在 Kibana 中创建了索引模式来查看您的数据?
  • 我的理解是,我应该能够在 AWS 控制台(ElasticSearch 服务屏幕)中看到索引,而无需与 Kibana 交互。我通过 POSTMAN 发布数据对此进行了测试,并显示了索引。然而,当 Python 函数运行时,不会创建索引。
  • 我只是暂时恢复使用 .NET Core,但仍然很想知道我哪里出错了。

标签: python elasticsearch aws-lambda


【解决方案1】:

根据我的经验,最好的方法是使用Python's Elasticsearch Client

有了客户端,你可以upload documents to your index这样一行代码:

es.index(index=TABLE_NAME, id=doc_id, body=record, request_timeout=100)

如果您想了解更多信息,请查看此GitHub Repository

【讨论】:

    猜你喜欢
    • 2019-09-28
    • 2022-08-17
    • 2018-07-26
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2018-07-15
    • 1970-01-01
    相关资源
    最近更新 更多