繁体   English   中英

如何降级AWS Lambda函数中的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。

为此,我根据指南做了以下事项:

  1. 使用以下命令创建自定义程序包:
    • 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使用的版本),所以我的导入没有覆盖它。

我想知道如何将我的自定义图层导入到我的代码中! 谢谢

编辑:尝试建议:

对于尝试完成相同任务的其他用户:

  1. virtualenv python --python=python3.7
  2. source python/bin/activate然后pip3 install boto3
  3. zip -r boto3_layer.zip python/lib/
  4. 使用boto3_layer.zip创建新的Lambda图层并将图层添加到Lambda函数
  5. 试图运行上面的保存代码失败"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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM