【问题标题】:AWS Serverless Lambda Function: No module by name elasticsearch errorAWS Serverless Lambda 函数:No module by name elasticsearch 错误
【发布时间】:2018-12-16 04:32:43
【问题描述】:

我是在 AWS 中使用 Lambda 的新手,目前正在尝试执行不同博客中给出的一些示例脚本,以测试这一切在无服务器环境中如何工作。我正在尝试处理的示例之一是创建一个 lambda 函数,该函数在将对象添加到 s3 存储桶时触发并将对象的元数据存储在 elasticsearch 中。

为此,我创建了一个elasticsearch域,s3 bucket并开始编写lambda函数。

我正在使用 lambda 控制台中提供的内联代码编辑器,并选择了 python3.6 作为我的运行时。以下是代码:

from __future__ import print_function
from pprint import pprint
import boto3
import json
from elasticsearch import Elasticsearch, RequestsHttpConnection


def lambda_handler(event, context):
    imageid =  event['Records'][0]['s3']['object']['key']
    print(imageid)

此代码尚未将数据推送到弹性搜索,我将在稍后编写。但是,对于 elasticsearch 导入,我收到“未找到模块”错误。
以下是我测试上述代码时的错误日志。

Response:
{
  "errorMessage": "Unable to import module 'lambda_function'"
}

Request ID:
"a26249c3-00e2-11e9-83b0-ffc7719455cf"

Function Logs:
START RequestId: a26249c3-00e2-11e9-83b0-ffc7719455cf Version: $LATEST
Unable to import module 'lambda_function': No module named elasticsearch

END RequestId: a26249c3-00e2-11e9-83b0-ffc7719455cf
REPORT RequestId: a26249c3-00e2-11e9-83b0-ffc7719455cf  Duration: 0.42 ms   Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 25 MB  

我的印象是,在默认情况下,无服务器环境会在调用所有必需的库时加载它们。但是,当我查找有关此错误的更多信息时,我发现其中一些指定应在 zip 文件中指定源,而另一些则表明 zip 文件为When you use the ZipFile property to specify your function's source code and that function interacts

我觉得这很混乱。我必须在无服务器环境中安装 elasticsearch 模块还是将其作为 zip 文件加载?如何让 lambda 函数与弹性搜索对话。

【问题讨论】:

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


    【解决方案1】:

    是的,AWS Lambda 环境默认仅包含 boto3 python 库,对于其他所有内容,您需要构建一个包含所有依赖项的 zip 文件并将其上传到 Lambda 函数。

    (至少)有 3 种方法可以做到这一点:

    1. 使用 AWS Cloud9 - IDE in the cloud
    2. 在您的机器上编写代码并配置CI/CD pipeline,以便在您提交更改时为您构建 zip
    3. 在您的机器上编写代码并使用build/upload zip manually - 使用SAM approach 可能是实现这一目标的最安全的方法

    希望对您有所帮助! :)

    【讨论】:

    • 谢谢....对 SAM 的介绍很有帮助。我想出了如何做到这一点。
    • 太好了,享受 SAM! :)
    猜你喜欢
    • 2021-01-22
    • 2014-12-20
    • 2020-07-07
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2021-06-11
    相关资源
    最近更新 更多