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的冷启动
    1. ENI的创建(仅限于在Lambda中进行VPC配置时)

 

    1. 启动执行上下文

 

    1. 加载部署包

 

    1. 解压部署包

 

    1. 启动和初始化运行时

 

    执行函数

调查

由于这次我们想要在没有VPC配置的情况下检查冷启动时间,因此我们要检查2至5的时间范围。

准备 Django 项目和纯 Python 项目
※在 Django 项目中引入 zappa 和 DRF
程序的内容是在 Lambda 执行时以 JSON 形式返回 “Hello World”
通过托管控制台执行这些项目,并在 CloudWatch 中确认处理时间
Django 包的大小为 42.2MB
纯 Python 包的大小为 129B
Lambda 分配的内存均为 512MB

结果 (jié guǒ)

(以毫秒为单位表达)

回数Django生Python差分13073430692315933156331733317043190331875319643192

我们发现部署包的大小对冷启动有很大的影响。
由于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意味着即使是无服务器的,也需要启动服务器吗?

没错

广告
将在 10 秒后关闭
bannerAds