python - 无法从 aws lambda 层导入模块

标签 python django amazon-web-services aws-lambda aws-lambda-layers

我的 pip 包有一个需求文件。我将它安装在目标文件夹中并压缩内容并将其上传到 AWS lambda 层。

要求.txt

asgiref==3.2.3
certifi==2019.11.28
chardet==3.0.4
cloudevents==0.2.4
decorator==4.4.1
Django==3.0
idna==2.8
jaeger-client==4.2.0
jsonpath-ng==1.4.3
pbr==5.4.4
ply==3.11
pytz==2019.3
requests==2.22.0
six==1.13.0
sqlparse==0.3.0
urllib3==1.25.7
aws-xray-sdk
mysql-connector-python
gunicorn

我使用命令 pip3 install -r requirements.txt -t python/其中 python 是目标目录。此图显示了 python 目录的内容。
enter image description here

在此之后,我压缩了该目录的内容并将其发布为 aws lambda 上的一个层。我制作了一个虚拟 lambda 函数来检查图层是否正常工作。
import json
import django

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

日志文件错误:
Response:
{
  "errorMessage": "Unable to import module 'lambda_function'"
}

Request ID:
"66ce85e0-59f0-4e5c-98f9-6fa3e3eb17d0"

Function Logs:
START RequestId: 66ce85e0-59f0-4e5c-98f9-6fa3e3eb17d0 Version: $LATEST
Unable to import module 'lambda_function': No module named 'django'

END RequestId: 66ce85e0-59f0-4e5c-98f9-6fa3e3eb17d0
REPORT RequestId: 66ce85e0-59f0-4e5c-98f9-6fa3e3eb17d0  Duration: 0.64 ms   Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 42 MB  Init Duration: 1.81 ms  

最佳答案

如果 layer 适合你,我可以告诉你我只是 成功构建了一个django层基于您的requirements.txt可以在 lambda 中导入的文件。

为了构建我使用的层 lambci/lambda工具。为了简化这个过程,我使用了 here 中的以下片段.

该层有 42 MB,接近 lambda 的 50 MB 限制。

如果不想使用layer,也可以使用同一个docker工具到构建常规部署包 e 如最近的 AWS 博客中所述:

  • How do I create a Lambda layer using a simulated Lambda environment with Docker?

  • 由于图层有效,因此在常规包中包含 django 也应该有效。

    关于python - 无法从 aws lambda 层导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62404733/

    相关文章:

    Python - 're.sub' ed 字符串在放入 sqlalchemy db.execute 命令时仍然包含特殊字符

    python - 为什么 Python 在 if 语句中将字符串/数字评估为 True 而 myNumber == True 返回 False?

    windows - 亚马逊 AWS - Windows 实例设置

    python - 使用唯一集初始化 python 列表

    python - 设置 matplotlib 图形/轴属性的首选方法

    django - 检查 Django 模板中数组中的元素数

    使用 Jquery、Django 和 Google App Engine 时,jQuery AJAX 请求被调用两次

    python - unique_for_date 的用法

    amazon-web-services - ElasticBeanstalk - 应用程序更改未显示

    python - AWS/EB - 受到内部虚拟连接的影响