我是AWS世界的新手,并尝试开发一个概念验证,允许lambda函数与elasticSearch(AWS服务)和S3存储桶交互。
我真的不明白它是如何运作的。我们必须设置一个链接到Lambda函数的IAM角色,但没有用户首先提问:
我像这样设置我的弹性搜索连接(使用https://github.com/DavidMuller/aws-requests-auth):
def connectES(esEndPoint):
print ('Connecting to the ES Endpoint {0}'.format(esEndPoint))
try:
# let's talk to our AWS Elasticsearch cluster
auth = BotoAWSRequestsAuth(
aws_host='vpc-poc-lambda-3opu7gwdw7bwvtmmazjmdgo7gi.eu-west-3.es.amazonaws.com',
aws_region='eu-west-3',
aws_service='es')
esClient = Elasticsearch(
hosts=[{'host': esEndPoint, 'port': 443}],
use_ssl=True,
verify_certs=True,
connection_class=RequestsHttpConnection,
http_auth=auth)
return esClient
except Exception as E:
print("Unable to connect to {0}".format(esEndPoint))
print(E)
exit(3)
它接缝工作但我不明白它使用的凭证。 然后我成功创建了一个索引:
esClient.indices.create('test')
但是当我尝试索引像这样的文档时,我得到错误:
esClient.index(index='test', doc_type='post', id=123456, body={
'author': 'John Doe',
'blog': 'Learning Elasticsearch',
'title': 'Using Python with Elasticsearch',
'tags': ['python', 'elasticsearch', 'tips'],
})
[WARNING] 2018-02-15T10:39:28.460Z 7f1cc69d-123c-11e8-be8b-cbbfad79068b PUT https://vpc-****-****.eu-west-3.es.amazonaws.com:443/test/post/123456 [status:406 request:0.039s]
Document not indexed
Error: string indices must be integers
我真的不明白为什么它不会工作,并希望有一种简单的方法可以与Lambda的其他AWS服务进行交互。
你能帮帮我吗? 感谢答案 0 :(得分:0)
在我的一位同事的帮助下,我终于找到了问题。 当您尝试在较新版本中使用弹性搜索服务器的旧版本中使用elastisearch python库时,会附加错误。 我将lib(https://elasticsearch-py.readthedocs.io/en/master/Changelog.html)升级到最后一个版本,现在效果很好。
如果我打扰你并希望这会帮助像我这样的人,我很抱歉。