AWS boto3: UnknownServiceError: Неизвестная служба: 'apigatewaymanagementapi' - PullRequest
0 голосов
/ 22 марта 2019

У меня странная проблема с модулем boto3 в AWS.Я пишу безсерверный фреймворк с лямбда-функциями.Я использую модуль AWS Boto3 и работает под кодом ниже в Python.Выполнение кода успешно выполняется при локальном запуске, но завершается неудачно с UnknownServiceError при выполнении в AWS.

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

После долгих исследований я обнаружил, что локальная версия boto3 - 1.9.119, а версия AWS boto3 - 1.9.42.Я не слишком уверен, является ли это основной причиной проблемы.

Я попытался установить boto3 в цель venv и использовал эту ссылку.Несмотря ни на что, выполнение кода в AWS дает сбой.

Я проверил, есть ли способ обновить версию aws boto3.

Я также попытался добавить boto3 в качестве внешней зависимости в файле требований

Я также попытался добавить слои с zip-адресом boto3 и сопоставить их с лямбда-функцией.

К сожалению, ни одно из решений не работает.Пожалуйста, предложите альтернативное решение для этой проблемы.

Ответы [ 2 ]

1 голос
/ 21 апреля 2019

Вы правы, библиотека boto3 старше в лямбде, чем на вашей локальной машине.Вы можете создать лямбда-слой, который включает в себя более новую версию 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 голосов
/ 19 апреля 2019

Вот как выглядит лямбда-среда Python 3.7 AWS на момент написания:

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

Сравнивая ботокор 1.12.42 (ошибка) с 1.12.133 (работает нормально), я обнаружил, что устаревший ботокор в AWS Lambda является виновником. Одним из решений может быть включение новейшего ботокора в ваш пакет лямбды. Например, используя плагин требований Python:

serverless plugin install -n serverless-python-requirements

И создание requirements.txt файла, содержащего botocore==1.12.133

(вместо 1.12.133 вы можете использовать последнюю версию на момент прочтения)

...