小编dim*_*oly的帖子

如何将Python捆绑到AWS Lambda

我有一个要在AWS Lambda上运行的项目,但该项目已超过50MB的压缩限制。目前,压缩后的空间为128MB,带有虚拟环境的项目文件夹为623MB,其中包括(空间的顶级用户):

  • scipy(〜187MB)
  • 熊猫(〜108MB)
  • numpy(〜74.4MB)
  • lambda_packages(〜71.4MB)

没有virtualenv项目,则小于2MB。该requirements.txt是:

click==6.7
cycler==0.10.0
ecdsa==0.13
Flask==0.12.2
Flask-Cors==3.0.3
future==0.16.0
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
matplotlib==2.1.2
mpmath==1.0.0
numericalunits==1.19
numpy==1.14.0
pandas==0.22.0
pycryptodome==3.4.7
pyparsing==2.2.0
python-dateutil==2.6.1
python-dotenv==0.7.1
python-jose==2.0.2
pytz==2017.3
scipy==1.0.0
six==1.11.0
sympy==1.1.1
Werkzeug==0.14.1
xlrd==1.1.0
Run Code Online (Sandbox Code Playgroud)

我使用Zappa进行部署,因此我对整个基础架构的了解有限。我的理解是,某些库(很少)没有上载,因此例如numpy,该部分没有上载,并且使用了该环境中已经可用的Amazon版本。

我提出了以下工作流程(不将S3存储桶用于slim_handler):

  1. 删除所有软件包中与“ test _ *。py”匹配的所有文件
  2. scipy.minimize删除大多数内容并重新运行测试,以手动方式手动摇动scipy
  3. 减少所有代码并使用混淆 pyminifier
  4. zappa部署

要么:

  1. 运行compileall以获取.pyc文件
  2. 删除所有* .py文件,然后让zappa上传.pyc文件
  3. zappa部署

我遇到了问题slim_handler: true,要么连接断开并且上传失败,要么发生了其他错误,并且在到S3的大约25%的上传中我得到了Could not connect to the endpoint URL。出于这个问题的目的,我想将依赖关系降低到可管理的水平。

尽管如此,超过半数的依赖关系(主应用程序小于2MB)必须记录下来。

我的问题是:

  1. AWS的未压缩限制是多少?是250MB还是500MB?
  2. 使用上述减小包装尺寸的方法是否正确?
  3. 是否可以进一步使用.pyz文件?
  4. 是否有任何标准实用程序可以帮助上述工作?
  5. 有没有树摇Python库?

python amazon-web-services python-3.x aws-lambda

7
推荐指数
1
解决办法
1258
查看次数

将nginx位置重定向/重写为.sock文件(无前缀)

我有一台服务器,上面运行着几个API。其中之一是users-DB以下内容可归结为“ gunicorn”:

location /usersDB/ {
    include proxy_params;
    proxy_pass http://unix:/home/ubuntu/projects/UsersDB-api/app.sock;
}
Run Code Online (Sandbox Code Playgroud)

除了当我尝试访问usersDB API的/ helloWorld路由并查看gunicorn.err的日志时,我看到:

GET /usersDB/helloWorld
Run Code Online (Sandbox Code Playgroud)

我希望看到:

GET /helloWorld
Run Code Online (Sandbox Code Playgroud)

当然,gunicorn返回404,这就是我在浏览器中看到的。我试过重写规则:

location /usersDB/ {
    rewrite /usersDB/(.*) /$1 last;
    include proxy_params;
    proxy_pass http://unix:/home/ubuntu/projects/UsersDB-api/app.sock;
}
Run Code Online (Sandbox Code Playgroud)

但是上面的结果导致请求进入了/var/www/htmlhelloWorld替代app.sock的方式。

我知道,如果您对proxy_pass使用url,则只需添加尾随/,但是我不确定在使用sock文件的情况下该怎么做。

如何摆脱/usersDB/nginx中所有路由现在包含的后缀?

sockets reverse-proxy nginx gunicorn

3
推荐指数
1
解决办法
988
查看次数