【问题标题】:How to write a lambda handler to send the data to Elasticsearch如何编写 lambda 处理程序以将数据发送到 Elasticsearch
【发布时间】:2020-10-24 08:52:03
【问题描述】:

以下是将数据发送到本地 Elasticsearch 的代码

r = [{'Name': 'Dr. Christopher DeSimone', 'Specialised and Location': 'Health'},
 {'Name': 'Dr. Tajwar Aamir (Aamir)', 'Specialised and Location': 'Health'},
 {'Name': 'Dr. Bernard M. Aaron', 'Specialised and Location': 'Health'},
 {'Name': 'Eliana M. Aaron', 'Specialised and Location': 'Health'},
 {'Name': 'Dr. Joseph J. Aaron', 'Specialised and Location': 'Health'},
 {'Name': 'Dr. Michael R. Aaron', 'Specialised and Location': 'Health'},
 {'Name': 'Dr. Darryl H. Aarons', 'Specialised and Location': 'Health'},
 {'Name': 'Dr. William B. Aarons', 'Specialised and Location': 'Health'},
 {'Name': 'Dr. Sirike T. Aasmaa', 'Specialised and Location': 'Health'},
 {'Name': 'Dr. Jacobo A. Abadi', 'Specialised and Location': 'Health'}]
from elasticsearch import Elasticsearch
es = Elasticsearch()
es.cluster.health()
es.indices.create(index='my-index', ignore=400)

for e in enumerate(r):
     es.index(index="my-index", body=e[1])

如何使用 lambda 处理程序将数据发送到 AWS 的 Elasticsearch

我已经创建了 Elasticsearch(t2 small) https://search-xxx.us-east-1.es.amazonaws.com的域公共访问

如何编写 lambda 处理程序以将数据发送到弹性搜索

【问题讨论】:

    标签: python amazon-web-services elasticsearch aws-lambda


    【解决方案1】:
    from requests_aws4auth import AWS4Auth
    from elasticsearch import Elasticsearch, RequestsHttpConnection
    session = boto3.session.Session()
    credentials = session.get_credentials()
    
    awsauth = AWS4Auth(credentials.access_key,
                       credentials.secret_key,
                       session.region_name, 'es',
                       session_token=credentials.token)
    es = Elasticsearch(
        ['https://search-xxx.us-east-1.es.amazonaws.com'],
        http_auth=awsauth,
        use_ssl=True,
        verify_certs=True,
        connection_class=RequestsHttpConnection
    )
    
    
    def lambda_handler(event, context):
        es.cluster.health()
        es.indices.create(index='my-index', ignore=400)
        r = [{'Name': 'Dr. Christopher DeSimone', 'Specialised and Location': 'Health'},
     {'Name': 'Dr. Tajwar Aamir (Aamir)', 'Specialised and Location': 'Health'},
     {'Name': 'Dr. Bernard M. Aaron', 'Specialised and Location': 'Health'},
     {'Name': 'Eliana M. Aaron', 'Specialised and Location': 'Health'},
     {'Name': 'Dr. Joseph J. Aaron', 'Specialised and Location': 'Health'},
     {'Name': 'Dr. Michael R. Aaron', 'Specialised and Location': 'Health'},
     {'Name': 'Dr. Darryl H. Aarons', 'Specialised and Location': 'Health'},
     {'Name': 'Dr. William B. Aarons', 'Specialised and Location': 'Health'},
     {'Name': 'Dr. Sirike T. Aasmaa', 'Specialised and Location': 'Health'},
     {'Name': 'Dr. Jacobo A. Abadi', 'Specialised and Location': 'Health'}]
        for e in enumerate(r):
             es.index(index="my-index", body=e[1])
    

    【讨论】:

    • 我们不退货吗?在 lambda 处理程序中
    • @Nons 是的,你可以返回任何你想要的东西。
    【解决方案2】:

    为了补充 @jellycsc,要在 lambda 上运行您的代码,您需要将所需的包捆绑与您的 lambda 代码。

    这意味着您应该使用以下 python 库为您准备 lambda 部署包

    • requests-aws4auth
    • 弹性搜索

    AWS 文档展示了如何做到这一点:

    【讨论】:

      猜你喜欢
      • 2015-01-11
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 2013-11-17
      • 2010-10-21
      相关资源
      最近更新 更多