【问题标题】:How to downgrade the boto3 version in an AWS Lambda Function如何在 AWS Lambda 函数中降级 boto3 版本
【发布时间】:2019-09-19 10:21:37
【问题描述】:

我需要在 Lambda (Python 3.7) 中使用我自己的 boto3 版本。由于某种原因,Lambda 默认 Python 3.7 env (1.9.42) 中包含的版本不支持使用 Textract。

为此,我根据guide 做了以下操作:

  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 层(称为 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')

【问题讨论】:

  • 现在的问题是:您是否设法以这种方式降级
  • @AnttiHaapala 是的,你看到我在问题中的解释了吗?它可能是在您评论后添加的。

标签: python python-3.x aws-lambda python-packaging aws-lambda-layers


【解决方案1】:

目录不会是模块/包。你使用的方法永远行不通。

代替所有这些,使用所需的 Python 版本创建一个虚拟环境 - 可能在 docker 中,您可以在其中安装包。然后您必须从虚拟环境中压缩lib 文件夹,以便在解压缩时该层将生成类似于

的目录结构
python/
    lib/
        pythonx.y/
            site-packages/
                ...

顶级目录必须命名为 python 才能正常工作。

如果您正确执行此操作,那么您应该能够正常导入您的boto3 版本。

【讨论】:

  • @star_trac 没有boto3_layer 模块!它是import boto3。你不能强制 boto3 或任何其他重要的包使用另一个包名而不重写所有代码,包括依赖项。
【解决方案2】:

lambda 中的文件将被解压缩到名为/opt 的目录中,这将包含在PYTHONPATH 中。这意味着您的 zip 结构中确实需要一个额外的 boto3_layer。

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 2019-09-27
    • 2017-10-11
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    相关资源
    最近更新 更多