我开发了一个python (v3.6)项目,该项目在我的AWS生产平台中部署并实际在一个无服务器的lambda中工作。该项目使用以下依赖项:
- awscli==1.16.10
- boto3==1.9.0
- botocore==1.12.0
- psycopg2==2.7.5
- SQLAlchemy==1.2.11
- SQLAlchemy-Utils==0.33.3
- jsonschema==2.6.0现在,我想使用本地堆栈将这个项目部署到我能够调用的lambda中,以便测试我的调用代码(而不是实际工作的项目代码!)
要部署该项目,首先安装依赖项并创建一个zip文件:
pip install -r requirements.txt --upgrade -t ./
chmod -R 755 .
zip -r lambda.zip .然后,我使用这个命令(与一个正在运行的本地堆栈):
aws lambda --region eu-east-1 --endpoint localhost:4574 \
create-function --function-name mylambda \
--zip-file fileb://lambda.zip但是,它从本地堆栈返回一个错误:
....
localstack_1 | from functools32 import lru_cache
localstack_1 | ImportError: No module named functools32
....
localstack_1 | raise Exception('Unable to get handler function from lambda code.', e)
localstack_1 | Exception: ('Unable to get handler function from lambda code.', ImportError('No module named functools32',))jsonschema使用模块functools32,它仅适用于python2.7或<=3.2。我使用python3.6,所以我不能安装它。此外,当我在我的AWS生产平台上部署相同的lambda.zip时,我没有这个错误。
我真的不知道怎么解决这个问题。如果有人想检查一下,我会非常感激的。
致以敬意,
发布于 2019-02-02 08:27:09
您所做的方式与我非常相似,除了创建lambda函数时,我还附加了一些定义处理程序函数、运行时等的标志.所以我会说您的错误就在那里。尽管如此,我可以在AWS和Local堆栈上成功地运行lambda,所以我就是这样完成它的:
.zip文件从容器中取出:
#!/bin/bash构建-t lambda层:my_version ${NOCACHE}。id=$(docker创建lambda层:my_version)停靠器cp $id:/root/lambda-layer.zip /lambda-layer.zip停靠器rm -v $id.zip文件可以是一个需要上传到AWS的文件,因为我将lambda函数直接写在他们的网站上,但是对于Local堆栈,我们需要创建一个新的.zip文件,它包含的内容与刚刚生成的文件相同,但是为lambda添加了一个python脚本。requestslambda.py导入请求def处理程序(事件、上下文):print(-测试localstack.zip文件:shell$ cp lambda-layer.zip lambda层-localstack.zip$ -ur lambda层-localstack.zip lambda.py #检查zip文件上的内容包含python #依赖项和lambda函数脚本$ unzip -l lambda层-localstack.zip存档:lambda层-localstack.zip长度日期时间名称-2019年-02-02 15:37 python/ 261 2019-02-02 15:43 lambda.pyhttps://stackoverflow.com/questions/53554860
复制相似问题