python - 如何在 lambda 函数中创建图层
问题描述
创建的步骤
- 创建一个虚拟环境并激活它
- 点安装弹性搜索
- 压缩 site-packages.zip 中的文件夹
4.在AWS中创建层(比如名字是elastic
)
- 在 lambda_handler 中添加以下代码并添加图层
elastic
下面是代码
import json
from elasticsearch import Elasticsearch, RequestsHttpConnection
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
我还是得到了 "errorMessage": "Unable to import module 'lambda_function': No module named 'elasticsearch'",
解决方案
如果可以的话,我想推荐一种从未让我失望过的替代技术。该技术包括最近的AWS 博客中描述的docker 工具:
因此,对于这个问题,我使用以下方法对其进行了验证elasticsearch
:
创建空文件夹,例如
mylayer
.转到文件夹并创建
requirements.txt
包含以下内容的文件
elasticsearch
- 运行以下 docker 命令(可以根据需要调整 python 版本):
docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
- 将图层创建为 zip:
zip -r elastic.zip python > /dev/null
elastic.zip
在 AWS 控制台中创建 lambda 层。不要忘记指定Compatible runtimes
topython3.8
。使用以下 lambda 函数在 lambda 中测试层:
import json
from elasticsearch import Elasticsearch, RequestsHttpConnection
def lambda_handler(event, context):
# TODO implement
print(dir(Elasticsearch))
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
该函数正确执行:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bulk', 'clear_scroll', 'close', 'count', 'create', 'delete', 'delete_by_query', 'delete_by_query_rethrottle', 'delete_script', 'exists', 'exists_source', 'explain', 'field_caps', 'get', 'get_script', 'get_script_context', 'get_script_languages', 'get_source', 'index', 'info', 'mget', 'msearch', 'msearch_template', 'mtermvectors', 'ping', 'put_script', 'rank_eval', 'reindex', 'reindex_rethrottle', 'render_search_template', 'scripts_painless_execute', 'scroll', 'search', 'search_shards', 'search_template', 'termvectors', 'update', 'update_by_query', 'update_by_query_rethrottle']
推荐阅读
- c++ - c++ 类中私有属性的问题
- javascript - 具有寻路网格生成的边缘情况的困难
- cmake - cmake3 继续使用旧的 CXXFLAGS 值
- angular - Angular:如何将服务连接到 Material RankTable?
- r - 如何在具有相同列表的 R 中使用嵌套的 for 循环?
- python - 自定义损失函数不等于用于训练模型的损失函数
- python - 使用 txt 文件检索问题和多个答案
- arrays - python数组中没有
- reactjs - React Grid Layout:如何让 React Grid Layout 与 React Bootstrap 4 组件一起使用
- python - While 循环倒计时到零