【发布时间】: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