我想将一些处理工作从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函数?
答案 0 :(得分:1)
Lambda唯一支持的两个库是标准库和boto3。
有几种安装外部Python库以在Lambda中使用的方法。我建议将它们作为Lambda图层上传。这是一个很好的指南:https://medium.com/@qtangs/creating-new-aws-lambda-layer-for-python-pandas-library-348b126e9f3e