Lambda和Django的兼容性如何呢?
繁忙的人
首先,我会将结论和总结放在最前面。
结论
如果想要使用全栈框架,似乎使用ECS更好。
It could be paraphrased in Chinese as:
总结
在Lambda的冷启动过程中,会花费很长时间吗?
需要一段时间完成
如果将Django项目上传到Lambda,会不会触发Lambda的上传大小限制?
有可能发生。
只要不太过分就应该没问题。
在创建REST API时,Django的路由和API Gateway的组合真的不太适合吗?
我认为实际上并没有什么伤害,但我觉得这是不好的。
用Django的意思就是说要使用无服务器的方式来启动服务器吗?
没错。 cuò.)
引子
这篇文章只是我个人的看法,请注意这不是绝对正确的事情。
假设条件
使用Zappa部署工具进行验证
本题
在将Lambda与Django结合时,我有几个疑问点。
我逐一考虑了这些疑问点。
对于此事有什么疑问吗?
-
- Lambdaのコールドスタートで時間かかるのでは?
-
- DjangoのプロジェクトをLambdaにアップロードしたら、Lambdaのアップロードサイズ制限に引っかかるのでは?
-
- REST APIを作る時に、DjangoのルーティングとAPI Gatewayの組み合わせって相性悪くね?
- Django使うってことはサーバーレスなのにサーバー立ち上げるってこと?
在Lambda的冷启动中会花费很多时间吗?
Lambda的冷启动
-
- ENI的创建(仅限于在Lambda中进行VPC配置时)
-
- 启动执行上下文
-
- 加载部署包
-
- 解压部署包
-
- 启动和初始化运行时
- 执行函数
调查
由于这次我们想要在没有VPC配置的情况下检查冷启动时间,因此我们要检查2至5的时间范围。
准备 Django 项目和纯 Python 项目
※在 Django 项目中引入 zappa 和 DRF
程序的内容是在 Lambda 执行时以 JSON 形式返回 “Hello World”
通过托管控制台执行这些项目,并在 CloudWatch 中确认处理时间
Django 包的大小为 42.2MB
纯 Python 包的大小为 129B
Lambda 分配的内存均为 512MB
结果 (jié guǒ)
(以毫秒为单位表达)
我们发现部署包的大小对冷启动有很大的影响。
由于Lambda更喜欢上传最小化的包,因此使用完整的堆栈框架似乎不太适合。
如果将Django项目上传到Lambda,会不会受到Lambda的上传大小限制?
Lambda的软件包大小上限
50 MB(压缩为zip格式,直接上传)
250 MB(包括解压和图层)
如果往程序里加入了太多的库,可能会遇到限制。
制作REST API时,Django的路由和API Gateway的组合是否不太合适?
实际运行程序时并没有实际损害,
但我不认为这是一种非常合理的方式。
实际上,当使用APIGateway + Lambda来创建REST API时,处理流程应该是这样的:
1. 在APIGateway中指定URL。
2. 调用与指定URL相关联的Lambda函数。
3. 进行处理。
使用Django时,需要根据在Django中设置的URL进行配置。
处理流程如下:
1. APIGateway会调用相同的Lambda函数,无论收到什么样的URL。
2. 当Lambda函数启动时,首先启动Django服务器。
3. Django服务器接收URL并进行路由。
4. 执行与URL相对应的Django视图。
由于这种流程非常不合理,所以非常不推荐使用。
因此不能说非常合得来
使用Django意味着无服务器,也意味着要启动服务器吗?
会变成那样子
当在GitHub上查看zappa的Lambda处理时
-
- Django動かす準備
-
- URLの取得
- Djangoのサーバー起動
就像那种感觉
虽然是无服务器的,但由于涉及到启动服务器的处理,我感到了不协调的感觉。
其他
我会在这里写一些我在验证过程中想到的想法。
-
- RDSとLambdaって相性よくなかった気がする
ただ2020年7月にRDS Proxyがリリースされたからかなり解消されてるかも?
LambdaとDjangoの事例がなさすぎる
開発で詰まった時に調べても、ドキュメントがないから解決にかなり時間かかりそう
zappaでRDS使おうと思ってmysqlclient入れてzappaのコマンドでマイグレーションしたら死ぬほどエラー出た
zappaのコマンド使わずにマイグレーションしたら普通に通ったからzappaの問題?
ライブラリによって使えないものがあると困るので結構致命的
そもそもLambdaの実行時間制限15分・パッケージサイズ250MBまでなど、制限があるので一つのLambdaにいろんな処理をさせるのは不向きなのでは?
结论
如果使用像Django这样的全栈式框架,效果并不太好。
听说使用ECS比使用全栈式框架更好。
总结
在Lambda的冷启动上会花费时间吗?
需要花费时间进行结构设计。
一旦将Django项目上传到Lambda上,会不会触发Lambda的上传限制?
有可能发生。
除非特别投入,应该没问题。
在创建REST API时,Django的路由和API Gateway的组合不太兼容,对吗?
我认为不存在实际的损害,但我认为这是不好的。
使用Django意味着即使是无服务器的,也需要启动服务器吗?
没错