Chu*_*ket 7 python python-3.x aws-lambda python-packaging aws-lambda-layers
我需要在Lambda(Python 3.7)中使用自己的boto3版本。Lambda默认Python 3.7 env(1.9.42)中包含的版本由于某种原因不支持使用Textract。
为此,我根据指南进行了以下操作:
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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我得到错误 "errorMessage": "Unable to import module 'lambda_function': No module named 'boto3_layer'"
我也尝试导入just boto3,但是确认它是错误的版本(这是Lambda使用的版本),因此我的导入没有覆盖它。
我只想简单地知道如何将我的自定义层导入到我的代码中!谢谢
编辑:尝试建议:
virtualenv python --python=python3.7source python/bin/activate 然后 pip3 install boto3zip -r boto3_layer.zip python/lib/boto3_layer.zip并将其添加到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')
Run Code Online (Sandbox Code Playgroud)
目录将不是模块/包。您使用的方法将永远无法使用。
代替所有这些,使用所需的Python版本创建一个虚拟环境-可能在docker中,在其中安装软件包。然后,您必须lib从虚拟环境中压缩文件夹,以便在解压缩该层时将产生类似于以下内容的目录结构
python/
lib/
pythonx.y/
site-packages/
...
Run Code Online (Sandbox Code Playgroud)
必须命名顶层目录才能python起作用。
如果正确执行此操作,则应该可以boto3正常导入您的版本。