尝试使用 django-zappa 部署 Django 项目时,zappa tail输出中出现以下错误:
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: libpq.so.5: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我确保在需求文件中包含 psycopg2 模块:
psycopg2==2.8.3
Run Code Online (Sandbox Code Playgroud)
它安装在运行 zappa deploy 命令时处于活动状态的虚拟环境中。
我在 Linux 上运行并且在能够安装libpq-dev之前必须通过 apt安装,pip install psycopg2因为我之前收到一个错误,说系统上缺少 libpq(类似于上述错误,我猜)。
我怎样才能克服这个错误?
谢谢!
我最近使用Zappa将 Django 后端应用程序部署到 AWS Lambda 。
在一段时间内未调用 lambda 函数后,发出的第一个请求需要 10 到 15秒的时间才能处理。起初我以为这是因为冷启动,但这次即使是冷启动也是不可接受的。然后,通读 Zappa 的文档,我发现它默认启用keep_warm每 4 分钟向 lambda 函数发送一个虚拟请求以保持温暖的功能;因此,对 lambda 的第一个请求的响应的过度延迟并不是由于冷启动造成的。
然后,我开始使用 AWS X-Ray 和 Cloudwatch Insights 等工具来尝试找到延迟的解释。这是我发现的:
用红色划掉的是应用程序使用的环境变量的名称。它们都是直接在 AWS 控制台中定义并分配值的。我不明白的是,首先,为什么需要这么长时间,其次,为什么它说环境变量被转换为None. 该应用程序运行完美(除了第一个请求中的大量延迟之外),因此环境变量在某处正确设置。
此请求每隔两个小时虔诚地发出一次,并且在一段时间内有人第一次调用 lambda 函数,如下图所示:
x 轴上的点对应于 Zappa 保持服务器温暖的虚拟请求。升高的点对应于上图中所示的调用。最后,峰值对应于用户调用。处理时间是处理长调用(第一张图中所示)所需时间和处理客户端向服务器发出的最长 http 请求所需时间的总和。该请求如下:
这是一个常规的登录请求,应该更快地得到解决。其他可能比这个要求更高的请求在不到 100 毫秒的时间内得到了解决。
所以,总结一下:
非常感谢任何关于为什么这些调用可能花费这么多时间的想法,因为我花了相当长的时间试图自己弄清楚,但我已经没有想法了。先感谢您!
编辑1(28/07/21):为了进一步支持我的怀疑,即这种延迟不是由于冷启动造成的,这里是Cloudwatch/应用程序监控/跟踪中函数的“分段时间线”:
如果是冷启动,延迟应该出现在“初始化”段中,而不是“调用”段中。
编辑 2 (30/07/21):我忘了提及,我之前使用 Elastic Beanstalk 部署了应用程序,并且没有遇到此问题,因此我的代码的性能可能不是这里的问题。
编辑 3 (30/07/21):我在 2016 年的 AWS …
我在 AWS Lambda 上使用 Zappa 框架https://github.com/Miserlou/Zappa和 Python 和 Flask。当它引发异常时,它会出现在 CloudWatch 日志中,但我无法辨认。但是,我确实在调试版本中从 HTTP GET 返回了一个正常的 Flask 堆栈跟踪。
我的问题是如何在日志/生产代码中获得合理的(Flask)堆栈跟踪?当生产中出现异常时,我所拥有的只是日志消息。
来自 HTTP GET 的良好堆栈跟踪:
Traceback (most recent call last):
File "/var/task/handler.py", line 96, in handler
response = Response.from_app(app, environ)
File "/private/var/folders/1j/5zcxjzkx29b8tfgrh2y90wt80000gn/T/pip-build-v6XvIH/Werkzeug/werkzeug/wrappers.py", line 865, in from_app
File "/private/var/folders/1j/5zcxjzkx29b8tfgrh2y90wt80000gn/T/pip-build-v6XvIH/Werkzeug/werkzeug/wrappers.py", line 57, in _run_wsgi_app
File "/private/var/folders/1j/5zcxjzkx29b8tfgrh2y90wt80000gn/T/pip-build-v6XvIH/Werkzeug/werkzeug/test.py", line 871, in run_wsgi_app
File "/private/var/folders/1j/5zcxjzkx29b8tfgrh2y90wt80000gn/T/pip-build-v6XvIH/zappa/zappa/middleware.py", line 78, in __call__
File "/private/var/folders/1j/5zcxjzkx29b8tfgrh2y90wt80000gn/T/pip-build-v6XvIH/flask/flask/app.py", line 1836, in __call__
File "/private/var/folders/1j/5zcxjzkx29b8tfgrh2y90wt80000gn/T/pip-build-v6XvIH/flask/flask/app.py", line 1820, in wsgi_app
File "/private/var/folders/1j/5zcxjzkx29b8tfgrh2y90wt80000gn/T/pip-build-jvEYWI/flask-restful/flask_restful/__init__.py", line 271, in error_router …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用Zappa将Django应用程序部署到AWS Lambda .
在我的一些其他(EC2/EBS托管的)Django项目中,如果需要执行一些可能需要一些时间的较重计算(例如发送大量电子邮件,或者只需要花费一分钟的一些处理),Celery用来.它是一个任务队列系统,任务被发送到队列,响应可以立即返回,工作人员可以稍后处理任务.
对于在Lambda中运行的Zappa-Django应用程序,实现类似Celery的任务排队系统的最佳方法是什么?
Zappa/Lambda支持计划任务,并且可以设计应用程序的模型,以便稍后可以通过计划的功能完成处理,并且可以将结果保存到DB.但我不认为每分钟一次轮询任务足够强大,通常需要立即启动延迟任务.
是否有一种简单的方法可以立即从Django视图返回响应并具有一个函数(来自Django应用程序内),其中任意参数排队等待稍后执行?
我有一个要与zappa一起部署的python应用程序。我目录的根目录包含应用程序和名为helper的目录。结构如下:
|-app.py
|-zappa_settings.json
|-helper
|-api.py
|-__init.py__
Run Code Online (Sandbox Code Playgroud)
在helper目录中,有一个api.py文件,该文件在我的app.py中被引用,像这样
from helper import api
Run Code Online (Sandbox Code Playgroud)
当我运行用于打包和部署的命令时,zappa deploy dev它将不会捆绑部署中的帮助程序目录,而只会捆绑根应用程序目录。在打包和部署时,如何告诉zappa包括所有子目录?
我有一个Python 3.6 -使用部署到AWS LAMBDA瓶应用扎帕,其中我有使用@task定义的异步任务执行功能所讨论这里
但是,我发现函数调用仍然在30秒后超时,而AWS Lambda对非API调用强制执行的5分钟超时。我什至在Lambda设置中检查了超时,并将其设置为5分钟。
我发现此问题的方式是lambda的调试输出开始无请求重复的情况-发生这种情况是因为错误或超时(根据AWS Lambda文档),又两次调用了lamba。
谁能帮助我解决这个问题?
[编辑:lambda函数也不是任何VPC的一部分,并且设置为可从Internet访问。]
这是下面的日志。基本上,倒计时是一个20秒的睡眠计时器,然后是@task调用application.reviv_assign_responder,但正如我们所见,“ NEAREST RESPONDER”没有溢出,并且倒计时再次开始,表明该功能已计时并被(AWS')设计再次调用。
Log output in Pastebin : https://pastebin.com/VEbdCALg
Second incident - https://pastebin.com/ScNhbMcn
Run Code Online (Sandbox Code Playgroud)
正如我们在第二个日志中看到的那样,它清楚地指出:
[1515842321866] wait_one_and_notify:30:26 [1515842322867] wait_one_and_notify:30:27 [1515842323865] wait_one_and_notify:30:28 [1515842324865] 2018-01-13T11:18:44.865Z 72a8d34a-f853-11e7-ac2f-out12bd3d后30.03秒
我正在尝试部署使用Flask-Ask构建的第一个zappa示例应用程序,看起来一切正常,但是在Deploying API语句之后,出现以下错误:
错误:警告!部署的lambda的状态检查失败。对“ /”的GET请求产生了502响应代码。
这是我正在执行的代码,对示例应用程序进行了较小的更改
from flask import Flask
from flask_ask import Ask, question, statement, session
import pyodbc
app = Flask(name)
ask = Ask(app, '/')
@ask.intent('HelloIntent')
def hello(firstname):
speech_text = "Hello %s" % firstname
return statement(speech_text).simple_card('Hello', speech_text)
@ask.intent('ByeIntent')
def bye():
return statement("Ok, goodBye!")
if name == 'main':
app.run()
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?
我在 arn:aws:lambda:us-east-1:xxxxx:function:xx-xx-prod 部署了一个 zappa lambda,它提供如下路线:
@app.route('/test', methods=['POST'])
def test():
response = app.response_class(
response=get_jsonstr({'test': 'OK'}),
status=200,
mimetype='application/json'
)
return response
Run Code Online (Sandbox Code Playgroud)
我想从另一个 lambda 函数调用上面的 test() 函数,如下所示:
client = boto3.client('lambda', region_name='us-east-1')
r = client.invoke(
FunctionName='arn:aws:lambda:us-east-1:xxxxx:function:xx-xx-prod',
InvocationType='RequestResponse',
LogType='None',
Payload='',
)
print(r)
print(json.loads(r['Payload'].read()))
Run Code Online (Sandbox Code Playgroud)
上面的调用成功如下:
{
'ResponseMetadata': {
'RequestId': '37ecc17b-03a9-11e9-9ea0-9dee231dfb79',
'HTTPStatusCode': 200,
'HTTPHeaders': {
'date': 'Wed, 19 Dec 2018 16:14:55 GMT',
'content-type': 'application/json',
'content-length': '4',
'connection': 'keep-alive',
'x-amzn-requestid': '37ecc17b-03a9-11e9-9ea0-9dee231dfb79',
'x-amzn-remapped-content-length': '0',
'x-amz-executed-version': '$LATEST',
'x-amzn-trace-id': 'root=1-5c1a6e7d-8063e5004eab150d6c967b0;sampled=0'
},
'RetryAttempts': 0
},
'StatusCode': 200,
'ExecutedVersion': '$LATEST',
'Payload': <botocore.response.StreamingBody object …Run Code Online (Sandbox Code Playgroud) 我正在 lambda 上部署我的机器学习模型;成功部署后,当我点击网关 URL 时,我收到 500 响应,并且日志为
Traceback (most recent call last):
File "/tmp/serverless-ml/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/tmp/serverless-ml/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/tmp/serverless-ml/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/tmp/serverless-ml/flask/_compat.py", line 35, in reraise
raise value
File "/tmp/serverless-ml/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/tmp/serverless-ml/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/tmp/serverless-ml/api/app.py", line 35, in index
prediction = predict(data)
File "/tmp/serverless-ml/api/app.py", line 54, in predict …Run Code Online (Sandbox Code Playgroud) 我在使用 zappa 部署的 AWS lambda 上运行了 Flask API。
虽然实例化它无法找到 libmysqlclient.so.18 文件,我认为这会消耗大量时间。
附加图像中的错误消息
有人可以帮忙吗?
谢谢!
zappa ×10
aws-lambda ×9
python ×6
django ×3
flask ×2
flask-ask ×1
mysql ×1
python-2.7 ×1
python-3.x ×1