AWS Lambda 控制台 - 升级 boto3 版本

12

我正在创建一个DeepLens项目,用于识别当相机扫描到特定一组人中的某一位。

该项目使用一个Lambda函数来处理图像并触发“rekognition”AWS API。

  • 当我从本地机器触发API时,我得到了良好的响应。

  • 当我从AWS控制台触发API时,我得到了失败的响应。

问题

经过多次搜寻,我发现boto3 (AWS Python库) 的版本为:

  • 1.9.62 - 我的本地机器上

  • 1.8.9 - AWS 控制台上

问题

我能在 AWS Lambda 控制台上升级boto3库吗?如果可以,怎么做?

3个回答

11
如果您不想将更新的boto3版本打包到函数中,可以在Lambda每次调用时下载boto3。请记住,/tmp/是Lambda允许您下载到的目录,因此您可以使用它来临时下载boto3。
import sys
from pip._internal import main

main(['install', '-I', '-q', 'boto3', '--target', '/tmp/', '--no-cache-dir', '--disable-pip-version-check'])
sys.path.insert(0,'/tmp/')

import boto3
from botocore.exceptions import ClientError

def handler(event, context):
    print(boto3.__version__)

请注意,由于处理时间增加,这将导致冷启动时间和调用成本增加。 - undefined

4

谢谢,但是新的部署没有任何错误信息。这意味着与提供的运行时相比,自定义运行时调试更加棘手。 - Deep
1
请注意,如果您正在使用Serverless框架和serverless-python-requirements插件,则即使它们在您的要求中,它也不会默认部署boto3botocore。您需要在配置中设置noDeploy参数,并将boto3botocore排除在外。 - nbarraille

1
我知道你想通过控制台来解决问题,但这是不可能的(就我所知)。
为了解决这个问题,你需要向Lambda提供所需的boto3版本(可以使用user1998671提出的解决方案或Shivang Agarwal所建议的方法)。第三种解决方案是将所需的boto3版本作为Lambda的一层提供。将它作为一层的好处是你可以在所有的Lambda函数中重用它。
按照AWS指南进行操作即可实现该功能(下面的内容主要来自AWS的链接指南):
重要提示:确保将“boto3-mylayer”更改为适合您的名称。
  1. 通过运行以下命令创建一个lib文件夹:
LIB_DIR=boto3-mylayer/python
mkdir -p $LIB_DIR

在运行以下命令将库安装到LIB_DIR:
pip3 install boto3 -t $LIB_DIR

运行以下命令将所有依赖项压缩到/tmp/boto3-mylayer.zip中:
cd boto3-mylayer
zip -r /tmp/boto3-mylayer.zip .

运行以下命令发布该图层:
aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip

该命令返回新图层的Amazon资源名称(ARN),类似于以下内容:
arn:aws:lambda:region:$ACC_ID:layer:boto3-mylayer:1

要将此层附加到您的 Lambda,请执行以下操作:

aws lambda update-function-configuration --function-name <name-of-your-lambda> --layers <layer ARN>

要在Lambda中验证boto版本,您只需在Lambda中添加以下两个打印命令:

print(boto3.__version__)
print(botocore.__version__)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接