无法从AWS Lambda层导入模块

时间:2020-06-16 08:58:45

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

我有一个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目录的内容。 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  

1 个答案:

答案 0 :(得分:1)

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

要构建图层,我使用了lambci/lambda工具。为了简化此过程,我使用了here中的以下代码段。

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

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

由于层起作用,包括常规包中的django也应起作用。