我正在尝试使用无服务器部署python lambda函数。我需要psycopg2库,因此我使用了serverless-python-requirements插件并将其添加到我的serverless.yml文件中。
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: non-linux
我可以成功部署该功能:
Serverless: Installing requirements from
/Users/Desktop/postgresql/.serverless/requirements/requirements.txt ...
Serverless: Docker Image: lambci/lambda:build-python3.6
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Injecting required Python packages to package...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service .zip file to S3 (43.07 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
..............
Serverless: Stack update finished...
但是当我检查Cloudwatch日志时,它说“没有名为'psycopg2'的模块”。
我的zip文件的结构是:
|--node_modules
|--.gitignore
|--handler.py
|--package-lock.json
|--package.json
|--serverless.yml
我运行无服务器部署时没有创建.serverless /目录...
任何帮助将不胜感激!
答案 0 :(得分:0)
您是否正确安装了python依赖项?
serverless试图从以下位置安装要求
Serverless: Installing requirements from
/Users/Desktop/postgresql/.serverless/requirements/requirements.txt
我建议关注
virtualenv ./env
source env/bin/activate
pip install psycopg2
pip freeze > requirements.txt
假设您的代码正在导入依赖项,请使用无服务器进行部署。
答案 1 :(得分:0)
您只需要在requirements.txt文件中定义您的Python依赖项。您可以手动执行此操作,也可以通过以下方式使用点子冻结:
pip freeze > requirements.txt
答案 2 :(得分:0)
有点晚了,但是对于那些面临类似问题的人。
您正在将需求部署为zip。您必须先解压缩需求,然后才能将其导入python脚本中。在要导入库的python脚本之上添加以下代码行:
dummy = 0
如果您愿意或只是通过,可以在异常上引发错误。
答案 3 :(得分:0)
我在AWS上部署了Python Flask应用程序,并在设置它时遇到了相同的错误。我通过执行以下操作解决了该问题,
我希望您使用的是虚拟环境,其中安装了所需的所有Python库。在您的文件夹列表中没有看到虚拟环境文件。您可以检查我的git repo的自述文件,以了解如何从头开始构建。我记录了我执行的所有步骤-https://github.com/shyam454/Flask_AWS
注意:回购有效,但我仍在开发中,因此自述文件中提到的端点尚未包含在代码中。但是对于Python + Flask设置来说还是不错的
如果您已经具有虚拟环境,请执行以下步骤,
在使用无服务器部署之前,请先进行pip冻结> requirements.txt
此命令将包含您在虚拟环境中安装的所有python库,这些库将存在于requirements.txt文件中
在serverless.yml文件中,添加以下行
插件: -无服务器wsgi -serverless-python-要求
现在,无服务器部署
您可以看到,无服务器将安装requirements.txt中的所有需求。部署无服务器时,您应该看到以下几行
无服务器:从xxxxxx \ AWS \ Flask_AWS.serverless \ requirements.txt中的xxxxxx \ AWS \ Flask_AWS \ requirements.txt生成的需求...
无服务器:从xxxxxxx \ AWS \ Flask_AWS.serverless \ requirements \ requirements.txt中安装要求...
这是当它在云中安装python库时,您不会收到没有模块可用的错误。
希望对您有帮助。
答案 4 :(得分:0)
我建议您使用 AWS lambda 层。 在aws lambda层手动上传psycopg2的工作包。
并在 serverless.yml 上引用它 名称:[无服务器项目的名称] 层: - [arn-of aws 层包]
注意:layers 在 serverless.yml 中同级名称