【问题标题】:Calling a Django function inside an AWS Lambda在 AWS Lambda 中调用 Django 函数
【发布时间】:2020-10-15 10:19:11
【问题描述】:

我想将一些处理负载从我的 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 函数?

【问题讨论】:

    标签: django amazon-web-services aws-lambda


    【解决方案1】:

    Lambda 开箱即用支持的仅有两个库是标准库和 boto3。

    有多种方法可以安装用于 Lambda 的外部 Python 库。我建议将它们作为 Lambda 层上传。这是一个很好的指南:https://medium.com/@qtangs/creating-new-aws-lambda-layer-for-python-pandas-library-348b126e9f3e

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 2018-01-29
      相关资源
      最近更新 更多