![](/img/trans.png)
[英]How to update Lambda Function's version in API Gateway with boto3?
[英]How to downgrade the boto3 version in an AWS Lambda Function
我需要在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
mkdir build
pip3 install -r requirements.txt -t build/
cd build
zip -r ../boto3_layer.zip .
然后我使用GUI上传一个新的Lambda Layer(称为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')
目录不是模块/包。 你正在使用的方法永远不会奏效。
而不是所有这些,使用所需的Python版本创建一个虚拟环境 - 可能在docker中,您可以在其中安装软件包。 然后你必须从虚拟环境压缩lib
文件夹,以便在解压缩时该层将产生类似于的目录结构
python/
lib/
pythonx.y/
site-packages/
...
顶级目录必须命名为python
才能生效。
如果您正确执行此操作,那么您应该能够正常导入您的boto3
版本。
lambda中的文件将解压缩到名为/opt
的目录,这将包含在PYTHONPATH
。 这意味着您需要在zip结构中添加额外的boto3_layer。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.