Python 如何在lambda函数中创建图层
创建所遵循的步骤Python 如何在lambda函数中创建图层,python,amazon-web-services,aws-lambda,Python,Amazon Web Services,Aws Lambda,创建所遵循的步骤 创建并激活虚拟环境 pip安装elasticsearch 将文件夹压缩到site-packages.Zip中 4.在AWS中创建图层(名称为elastic) 在lambda_handler中添加下面的代码,并添加层elastic 下面是代码 import json from elasticsearch import Elasticsearch, RequestsHttpConnection def lambda_handler(event, context): # TO
elastic
)
elastic
import json
from elasticsearch import Elasticsearch, RequestsHttpConnection
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
我仍然收到了“错误消息”:“无法导入模块‘lambda_函数’:没有名为‘elasticsearch’的模块”,如果可以的话,我想推荐一种从未失败过的替代技术。该技术包括最近AWS博客中描述的docker工具:
elasticsearch
验证了它,如下所示:
mylayer
requirements.txt
文件:
elastic.zip
创建lambda层。别忘了将兼容运行时指定给python3.8
['__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']
@Marcin已经提到了一个选项,要求在目标机器上安装Docker。若你们想跳过docker,那个么你们可以使用下面的脚本来创建图层并发布到AWS 你需要的一切
./creater_layer.sh <package_name> <layer_name>
./creater_layer.sh elasticsearch my-layer
Sir如何在windows机器中操作?您可以在windows中使用git bash,不需要在脚本中进行任何更改。您可以回答以下问题吗?无法在本地找到图像“lambci/lambda:build-python3.8”我已安装docker并已启动dockerdesktop@aysh似乎是一个新问题。也许可以用相关信息和错误信息提出新问题?
zip -r elastic.zip python > /dev/null
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']
./creater_layer.sh <package_name> <layer_name>
./creater_layer.sh elasticsearch my-layer
path="app"
package="${1}"
layername="${2}"
mkdir -p $path
pip3 install "${package}" --target "${path}/python/lib/python3.8/site-packages/"
cd $path && zip -r ../lambdalayer.zip .
aws lambda publish-layer-version --layer-name "${layername}" --description "My layer" --license-info "MIT" --zip-file "fileb://../lambdalayer.zip" --compatible-runtimes python3.8