【问题标题】:Unable to import modules from aws lambda layer无法从 aws lambda 层导入模块
【发布时间】:2020-10-05 20:09:06
【问题描述】:

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

Requirements.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 目录的内容。

在此之后,我压缩了该目录的内容并将其作为 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  

【问题讨论】:

  • 你把 lambda 层映射到 lambda 了吗?
  • 您确定使用与安装软件包的 pip 相同的 python 运行它吗?
  • 正如 Reznik 所说,两者都必须使用相同的 python 版本。
  • @aviboy2006 是的,我在上面的 lambda 函数中添加了图层。这就是你所说的映射的意思吗?
  • @Reznik 如果我在终端上运行 pip3 --version 我会从 ~/.local/lib/python3.6/site-packages/pip (python 3.6) 和运行时获得 pip 20.1.1因为我的 lambda 函数也是 python 3.6

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


【解决方案1】:

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

为了构建图层,我使用了lambci/lambda 工具。为了简化这个过程,我使用了来自here 的以下sn-p。

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

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

由于 layer 可以工作,在常规包中包含 django 也应该可以工作。

【讨论】:

  • 我已经完成了与 sn-p 中给出的完全相同的事情。我们是否必须授予某些特定权限才能使用图层?
  • @Adishukla 不需要特殊权限。
  • 它现在正在运行,谢谢!你能看看这个 -> stackoverflow.com/questions/62427304/…
  • @酷。如果您觉得这些问题有用,您能接受吗?
  • @Adishukla 谢谢。我检查了新问题,但不幸的是它超出了我的 djnago 知识范围:-(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 2021-09-25
  • 1970-01-01
  • 2019-01-05
  • 2021-03-28
  • 2021-07-07
相关资源
最近更新 更多