我尝试使用serverless
框架来创建和部署AWS Lambda函数。我在项目的根目录中创建了一个名为vendored
的文件夹,并安装(使用pip install
)函数依赖项。但是,每当我尝试运行它时(使用serverless function run
),我都会收到错误:
无服务器:正在运行isNewUser ...
无服务器:警告:未定义此变量:区域
无服务器:-----------------
无服务器:失败 - 返回此错误:
无服务器:{"例外":[" Traceback(最近一次呼叫最后一次):\ n"," File \" /home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler \",第170行,在\ n handler = import_program_as_module(path)\ n","文件\" /home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler \",第149行,在import_program_as_module \ n module = make_module_from_file(&# 39; lambda_handler',handler_file)\ n","文件\" /home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler \",第129行,在make_module_from_file \ n py_source_description \ n" ,"文件\" /home/fernando/workspace/os-cac/isNewUser/handler.py \",第11行,在\ n来自vtex.order import order \ n"," ImportError:没有名为vtex.order的模块\ n"],"成功":false} 无服务器:来自Python的异常消息
无服务器:回溯(最近一次呼叫最后): ,文件" /home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler" ;,第170行,在 handler = import_program_as_module(path) ,file" /home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler" ;,第149行,在import_program_as_module中 module = make_module_from_file(' lambda_handler',handler_file) ,文件" /home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler" ;,第129行,在make_module_from_file中 py_source_description ,文件" /home/fernando/workspace/os-cac/isNewUser/handler.py" ;,第11行,在 来自vtex.order import order ,ImportError:没有名为vtex.order的模块 `
vtex.order
是在handler.py中导入的模块
我的项目结构如下:
/root/
|
|--_meta/
|--vendored/
|--dependencies...
|--function-name/
|--handler.py
|--event.json
|--s-function.json
|--requirements.txt
|--admin.env
|--package.json
|--s-project.json
|--s-resources-cf.json
|--s-project.json
我有什么不对的吗?我应该以某种方式配置我的函数来包含来自vendored的依赖项吗?
答案 0 :(得分:9)
以下几个步骤可以使其发挥作用:
s-function.json
中的处理程序条目在其路径中具有函数名:
"handler": "function-name/handler.handler",
在handler.py
中添加以下内容:
import os
import sys
here = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(here, "../vendored"))
from vtex.order import Order
就是这样。如果有效,请告诉我。
答案 1 :(得分:4)
我建议使用serverless-python-requirements插件添加通过pip
安装的软件包
答案 2 :(得分:3)
我按照以下步骤使用依赖项进行部署:
在项目根mkdir .vendor
手动添加requirements.txt文件中的依赖项或使用pip freeze > requirements.txt
更新serverless.yml文件
package:
include:
- .vendor/**
import sys
sys.path.insert(0, './.vendor')
pip install -r requirements.txt -t .vendor
现在serverless deploy
将上传具有依赖关系的函数。