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