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

时间:2019-03-22 08:08:22

标签: amazon-web-services aws-lambda boto3 serverless botocore

我在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 target中安装boto3并使用该引用。无论如何,AWS中的代码执行都会失败。

我已经检查了是否可以更新aws boto3版本。

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

我也尝试过添加带有boto3 zip的图层并将其映射到lambda函数。

不幸的是,所有解决方案均无效。请为该问题建议替代解决方案。

2 个答案:

答案 0 :(得分:1)

您是正确的,boto3库在lambda中比本地计算机上的库更旧。您可以创建一个lambda层,在lambda软件包中包含boto3或boto3软件包的较新版本。

以下是一些包含逐步说明的链接。他们正在安装pymysql,您可以将其替换为boto3。否则,说明完全相同。

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

答案 1 :(得分: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 Requirements插件:

serverless plugin install -n serverless-python-requirements

并创建一个包含requirements.txt的{​​{1}}文件

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