在使用 Python (Boto 3) Lambda 函数时,为什么会收到“unknown service”、“parameter validation failed”或“object has no attribute”错误?

上次更新时间:2019 年 9 月 26 日

在运行使用 Python 编写的 AWS Lambda 函数时,我收到如下错误:“unknown service”、“parameter validation failed”或“object has no attribute”。如何处理这些错误?

简短描述

当您的 Lambda 函数配置为使用其中一个 适用于 Python 的 Lambda 运行时,并且它尝试调用较新的 AWS 服务或最新版本的 AWS API 时,会发生这些错误。Lambda 执行环境中提供的适用于 Python 的 AWS 开发工具包 (Boto 3) 版本不是最新版本。对于某些 AWS 服务和 API,它可能缺少一些参数。

创建使用最新版 Boto 3 的,然后将层添加到您的函数的配置

解决方法

注意:以下说明用作指南,并且假定您具有全新的工作目录。如果您使用现有工作目录,可能需要升级 botocore 才能升级 Boto 3。根据特定操作系统和 Python 配置的需要,调整您要采取的步骤。

安装 pip 和 AWS CLI

1.    如果您尚未安装适用于 Python 3 打包的 pip3,请进行安装。如果您拥有的是之前版本的 pip,请进行升级

2.    使用 pip3 安装或升级 AWS 命令行界面 (AWS CLI)。最新版本的 AWS CLI 包括 Lambda Layers API 模型。

创建层并将其添加到您的 Lambda 函数

注意:这些命令仅适用于 Linux/Unix/macOS 系统。在命令中,将 boto3-mylayer 替换为您的 lib 文件夹和 Lambda 层的首选名称。

1.    通过运行以下命令创建一个 lib 文件夹:

LIB_DIR=boto3-mylayer/python
mkdir -p $LIB_DIR

2.    通过运行以下命令将库安装到 LIB_DIR:

pip3 install boto3 -t $LIB_DIR

3.    通过运行以下命令来将所有依赖项压缩到 /tmp/boto3-mylayer.zip:

cd boto3-mylayer
zip -r /tmp/boto3-mylayer.zip .

4.    通过运行以下命令发布层:

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

5.    通过运行以下命令将层添加到 Lambda 函数的配置中:

注意:请将 myfunction 替换为您的函数名称。将 arn:aws:lambda:region:ACC_ID:layer:boto3-mylayer:1 替换为您的层的 ARN。

aws lambda update-function-configuration --function-name myfunction --layers arn:aws:lambda:region:ACC_ID:layer:boto3-mylayer:1

现在,所有 AWS 服务和参数/关键字参数均可用于您的 Lambda 函数。

提示:在函数代码中使用 print(boto3.__version__)print(botocore.__version__) 来确认 Boto 3 和 Botocore 的版本。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?