微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以将旧的/遗留的 Django 应用程序集成到 Zappa 中以进行无服务器集成?

如何解决是否可以将旧的/遗留的 Django 应用程序集成到 Zappa 中以进行无服务器集成?

我正在尝试找到一种方法将我们公司的 Django Web 应用程序集成到 Zappa 中,以便我们可以使用 REST API 完全无服务器。问题是我们的应用程序已经存在了好几年,使它比所有这些 Zappa 教程初始化的全新应用程序要重得多。 Zappa 是否需要将旧的 Django 应用程序集成到其框架中的格式?我迫不及待地想知道 Zappa 需要多少重构才能知道如何将我们的 API 转换为 lambda 函数。当我尝试在我们的根目录中运行 Zappa deploy 时,出现以下错误,这可能意味着我们的应用程序针对 Zappa 系统的优化很差:

Traceback (most recent call last):
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/zappa/cli.py",line 896,in deploy
    function_name=self.lambda_name
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/zappa/core.py",line 1520,in get_lambda_function
    response = self.lambda_client.get_function(FunctionName=function_name)
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/botocore/client.py",line 386,in _api_call
    return self._make_api_call(operation_name,kwargs)
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/botocore/client.py",line 705,in _make_api_call
    raise error_class(parsed_response,operation_name)
botocore.errorfactory.ResourceNotFoundException: An error occurred (ResourceNotFoundException) when calling the GetFunction operation: Function not found: arn:aws:lambda:us-east-1:253119149513:function:src-dev

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/zappa/cli.py",line 3422,in handle
    sys.exit(cli.handle())
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/zappa/cli.py",line 588,in handle
    self.dispatch_command(self.command,stage)
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/zappa/cli.py",line 630,in dispatch_command
    self.deploy(self.vargs["zip"],self.vargs["docker_image_uri"])
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/zappa/cli.py",line 930,in deploy
    self.lambda_arn = self.zappa.create_lambda_function(**kwargs)
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/zappa/core.py",line 1225,in create_lambda_function
    response = self.lambda_client.create_function(**kwargs)
  File "/home/ubuntu/SkalaControl/env/lib/python3.7/site-packages/botocore/client.py",operation_name)
botocore.errorfactory.InvalidParameterValueException: An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: Unzipped size must be smaller than 262144000 bytes

解决方法

Zappa 的主要用途之一是允许将现有 Django 项目迁移到 AWS Lambda。因此,将您的 REST API 迁移到无服务器是 Zappa 的一个很好的用例。此外,Zappa 一般兼容旧版本的 Django。

您遇到的问题是 AWS Lambda functions must be under 50MB compressed and 250MB uncompressed

Zappa offers a workaround 使用 slim_handler 选项允许您的项目在未压缩时接近 512MB。

要确定您当前的项目需要多少未压缩的磁盘空间,您可以运行以下 Zappa 命令:

zappa package <name of your environment>

Zappa 将生成 Django 项目的 zip 文件。然后您可以解压缩 zip 文件并确定磁盘空间要求。

如果您需要超过 512MB 的磁盘空间,那么您唯一的选择是使用最近推出的 AWS Lambda Container Image Support 功能(至少在撰写此答案时)。 Zappa version 0.53.0 支持此功能。 Zappa 文档中尚未提供有关如何利用此功能的说明,因此现在可以在 Ian Whitestone's blog 中找到最佳指南。

关于 AWS Lambda 的性能和现有 Django 应用程序的“重量”的主题。将您的 Django 应用程序置于 AWS Lambda 环境中就像在汽车中安装一个更大的引擎。您可能会发现您的 Django 应用程序在 AWS 中的表现更好

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。