【发布时间】:2019-09-19 10:21:37
【问题描述】:
我需要在 Lambda (Python 3.7) 中使用我自己的 boto3 版本。由于某种原因,Lambda 默认 Python 3.7 env (1.9.42) 中包含的版本不支持使用 Textract。
为此,我根据guide 做了以下操作:
- 使用以下命令创建自定义包:
-
pip freeze > requirements.txt会产生这个文件:
-
# requirements.txt
boto3==1.9.138
botocore==1.12.138
docutils==0.14
jmespath==0.9.4
python-dateutil==2.8.0
s3transfer==0.2.0
six==1.12.0
urllib3==1.24.2
mkdir buildpip3 install -r requirements.txt -t build/cd buildzip -r ../boto3_layer.zip .
然后我使用 GUI 上传了一个新的 Lambda 层(称为 boto3Layer)。 然后我成功地将图层添加到我的 Lambda 函数中。
问题是,我不知道如何使用内联代码编辑器将所述层导入我的代码中。
我有以下代码:
...
from boto3_layer as boto3
...
log.info(boto3)
我收到错误"errorMessage": "Unable to import module 'lambda_function': No module named 'boto3_layer'"
我也尝试只导入boto3,但确认它是错误的版本(它是 Lambda 使用的版本),所以我的导入没有覆盖它。
我只想知道如何将我的自定义层导入到我的代码中!谢谢
编辑:尝试建议:
对于尝试完成相同任务的其他用户:
virtualenv python --python=python3.7-
source python/bin/activate然后pip3 install boto3 zip -r boto3_layer.zip python/lib/- 使用
boto3_layer.zip创建新的 Lambda 层并将层添加到 Lambda 函数 - 试图运行上面的代码保存
"errorMessage": "Unable to import module 'lambda_function': No module named 'boto3_layer'",失败
这最终通过导入 boto3 而不是我的自定义名称来工作。
import boto3
def lambda_handler(event, context):
textract = boto3.client('textract')
【问题讨论】:
-
现在的问题是:您是否设法以这种方式降级?
-
@AnttiHaapala 是的,你看到我在问题中的解释了吗?它可能是在您评论后添加的。
标签: python python-3.x aws-lambda python-packaging aws-lambda-layers