django - 在 AWS Lambda 中调用 Django 函数
问题描述
我想将一些处理负载从我的 Django 应用程序推迟到 AWS Lambda。
我从 Lambda 调用我的代码,如下所示:
lambda.py:
@bc_lambda(level=logging.INFO, service=LAMBDA_SERVICE)
def task_handler(event, context):
message = event["Records"][0]["body"]
renderer = get_renderer_for(message)
result = renderer.render()
return result
get_renderer_for
是一个返回类实例的工厂方法Renderer
:
from myproject.apps.engine.documents import (
DocumentsLoader,
SourceNotFound,
source_from_version,
)
from myproject.apps.engine.environment import Environment
class Renderer:
def __init__(self, message):
self.message = message
def render(self):
ENVIRONMENT = Environment(DocumentsLoader())
version_id = self.message.get("version_id")
try:
source = source_from_version(version_id)
except SourceNotFound:
source = None
template = ENVIRONMENT.from_string(source)
if template:
return template.render(self.message)
return None
def get_renderer_for(message):
"""
Factory method that returns an instance of the Renderer class
"""
return Renderer(message)
在 CloudWatch 中,我看到我收到此错误:module initialization error. Apps aren't loaded yet.
我知道 Django 不适用于 Lambda 函数,对吗?我怎样才能解决这个问题?如何使项目的其余部分可用于 lambda 函数?
解决方案
Lambda 开箱即用支持的仅有的两个库是标准库和 boto3。
有多种方法可以安装用于 Lambda 的外部 Python 库。我建议将它们作为 Lambda 层上传。这是一个很好的指南:https ://medium.com/@qtangs/creating-new-aws-lambda-layer-for-python-pandas-library-348b126e9f3e
推荐阅读
- python - 在 `tortoise.field.ForeignKeyField` 中使用关键字 `related_name`
- discord - 我想在 discord.py 的 on_reaction_add 函数中获取用户反应的消息
- reactjs - 如何正确从套接字添加数据以反应状态数组
- operating-system - 对此真的很陌生。内核代码以某种方式弄乱了用户空间代码
- gitlab - 如何在 gitlab 作业输出中回显日期和时间?
- python - Python在单引号中键入类类型
- python - pandas read csv 返回数据框作为对象类型
- typescript - 复杂的 json 打字稿打字
- smtp - fail2ban 不发送电子邮件
- php - 通过 Chrome 上传文件的潜在问题?