AWS boto3:UnknownServiceError:未知服务:'apigatewaymanagementapi'

问题描述 投票:0回答:2

我在AWS中遇到了boto3模块的奇怪问题。我正在编写具有lambda函数的无服务器框架。我正在使用aws boto3模块并在python中运行代码。在本地运行时代码执行成功,但在AWS中执行时失败并出现UnknownServiceError。

client_api = boto3.client(service_name='apigatewaymanagementapi')

经过大量研究,我发现本地boto3版本为1.9.119,AWS boto3版本为1.9.42。我不太确定这是否是问题的根本原因。

我尝试在venv目标中安装boto3并使用该引用。无论如何,AWS中的代码执行失败。

我已经检查过是否有办法可以更新aws boto3版本。

我还尝试在需求文件中添加boto3作为外部依赖项

我也尝试使用boto3 zip添加图层并映射到lambda函数。

不幸的是,这些解决方案都不起请为此问题建议替代解决方案。

amazon-web-services aws-lambda boto3 serverless botocore
2个回答
1
投票

你是对的,boto3库在lambda中比你本地机器上的更老。您可以在lambda包中创建一个包含较新版本的boto3或包boto3的lambda图层。

以下是一些分步说明的链接。他们正在安装pymysql,你可以用boto3替换它。否则说明完全相同。

https://geektopia.tech/post.php?blogpost=Create_Lambda_Layer_Python https://geektopia.tech/post.php?blogpost=Create_Lambda_Package_Python


0
投票

这就是python 3.7 AWS lambda环境在编写时的样子:

python: 3.7.2 (default, Mar 1 2019, 11:28:42)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)], boto3: 1.9.42, botocore: 1.12.42

通过比较botocore 1.12.42(错误)和1.12.133(工作正常),我发现AWS Lambda中过时的botocore是罪魁祸首。一种解决方案可能是在lambda包中包含最新的botocore。例如,使用python要求插件:

serverless plugin install -n serverless-python-requirements

并创建一个包含requirements.txtbotocore==1.12.133文件

(而不是1.12.133,您可能希望在阅读本文时使用最新版本)

© www.soinside.com 2019 - 2024. All rights reserved.