python - 在 AWS Lambda 上部署应用程序时出现错误
问题描述
我正在尝试在 AWS lambda 上运行我的烧瓶 api,serverless framework
用于部署。
当我使用时,我的应用程序在本地运行良好,但在部署到 AWS Lambda 时sls wsgi serve
出现错误 ( ):502 bad gateway
021-03-12T16:26:21.213+01:00 START RequestId: deedf3d6-eb1e-4f02-ac0c-47428c5bd553 Version: $LATEST
2021-03-12T16:26:21.216+01:00 module initialization error: Unable to import app.app
2021-03-12T16:26:21.331+01:00 END RequestId: deedf3b6-eb1e-4f02-ac0c-47428c5bd553
2021-03-12T16:26:21.331+01:00 REPORT RequestId: deedf3b6-eb1e-4f02-ac0c-47428c5bd553 Duration: 115.30 ms Billed Duration: 116 ms Memory Size: 1024 MB Max Memory Used: 28 MB
2021-03-12T16:26:21.331+01:00 module initialization error Unable to import app.app
2021-03-12T16:26:22.072+01:00 Traceback (most recent call last):
2021-03-12T16:26:22.072+01:00 File "/var/task/wsgi_handler.py", line 44, in import_app
2021-03-12T16:26:22.072+01:00 wsgi_module = importlib.import_module(wsgi_fqn_parts[-1])
2021-03-12T16:26:22.072+01:00 File "/var/lang/lib/python3.6/importlib/__init__.py", line 126, in import_module
2021-03-12T16:26:22.072+01:00 return _bootstrap._gcd_import(name[level:], package, level)
2021-03-12T16:26:22.072+01:00 File "<frozen importlib._bootstrap>", line 994, in _gcd_import
2021-03-12T16:26:22.072+01:00
Copy
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
2021-03-12T16:26:22.072+01:00 File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
2021-03-12T16:26:22.072+01:00 File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
2021-03-12T16:26:22.072+01:00 File "<frozen importlib._bootstrap_external>", line 678, in exec_module
2021-03-12T16:26:22.072+01:00 File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
2021-03-12T16:26:22.072+01:00 File "/var/task/app.py", line 10, in <module>
2021-03-12T16:26:22.072+01:00 from common.helpers import *
2021-03-12T16:26:22.072+01:00 File "/var/task/common/helpers.py", line 1, in <module>
2021-03-12T16:26:22.072+01:00 from common.db import db
2021-03-12T16:26:22.072+01:00 File "/var/task/common/db.py", line 1, in <module>
2021-03-12T16:26:22.072+01:00 from flask_pymongo import pymongo
2021-03-12T16:26:22.072+01:00 ModuleNotFoundError: No module named 'flask_pymongo'
我有两个单独的文件app.py
,db.py
其中Flask_pymongo
导入了。
这是我的DockerFile
FROM lambci/lambda:build-python3.6
RUN pip3 --no-cache-dir install -r requirements.txt
requirements.txt
:
Werkzeug==0.16.1
Flask_PyMongo==2.3.0
Flask==1.1.1
Flask_Limiter==1.3.1
Flask_JWT_Extended==3.22.0
pymongo==3.10.1
pymongo[tls,srv]
dnspython
和我的serverless.yml
service : my-flask-app
provider:
name: aws
runtime: python3.6
stage: dev
region: us-east-1
plugins:
- serverless-wsgi
- serverless-python-requirements
custom:
wsgi:
app: app.app
packRequirements: false
pythonBin: python3
pythonRequirements:
dockerizePip: non-linux
dockerFile: ./Dockerfile
package:
exclude:
- node_modules/**
- venv/**
functions:
app:
handler: wsgi_handler.handler
events:
- http: ANY /
- http: 'ANY {proxy+}'
有什么建议吗?
解决方案
我认为你Dockerfile
的不正确,你没有复制requirements.txt
让 pip 为你安装包,因为依赖项没有打包。它应该是这样的
FROM lambci/lambda:build-python3.6
COPY requirements.txt requirements.txt
RUN pip3 --no-cache-dir install -r requirements.txt
你Dockerfile
给出了这个错误:
Step 2/2 : RUN pip3 --no-cache-dir install -r requirements.txt
---> Running in 1cda237064f0
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
我不确定您在部署应用程序时是否在构建日志中注意到了这一点。
还有一件事,假设您使用的是serverless-python-requirements而不是任何其他变体,则不应将其requirements.txt
直接包含在其中。Dockerfile
pythonRequirements:
dockerizePip: non-linux
dockerFile: ./Dockerfile
Dockerfile
FROM lambci/lambda:build-python3.6
# Install your dependencies in case you want to install any
#RUN yum -y install myfavourite-pacakge
此配置将采用Dockerfile
并添加requirements.txt
到它。
推荐阅读
- tensorflow - ConvLSTM2d 在 colab GPU 上的运行速度比 CPU 慢
- python-3.x - 实际上,这段代码有错误,但如果我从代码中删除 (!= 1),我会得到意想不到的结果。但逻辑是一样的..请解释
- c - 在 C 中使用指针算法打印内存单元的内容
- javascript - 根据单选按钮值调用不同的 javascript 文件
- julia - 有没有可能改变Julia中非线性约束的RHS?
- pandas - 使用以下代码显示黑色列的热图
- mysql - 无法在 docker 容器中安装 mysql-client
- jmeter - 如何在Jmeter中提取和传递Json提取器中的值
- javascript - 在 Route 的渲染部分中未调用函数
- javascript - 如何有条件地在 javascript 对象 reduce 中添加道具?