Проблема создания лямбда-функции, которая имеет Слой, используя boto3 - PullRequest
0 голосов
/ 05 января 2019

Если я пытаюсь использовать boto3 Lambda create_function() для создания лямбда-функции и пытаюсь включить слои через параметр Layers=['string'], я получаю следующее сообщение об ошибке: Unknown parameter in input: "Layers", must be one of: FunctionName, Runtime, Role, Handler, Code, Description, Timeout, MemorySize, Publish, VpcConfig, DeadLetterConfig, Environment, KMSKeyArn, TracingConfig, Tags

... есть идеи? Документация предполагает, что это должно работать, но что-то здесь явно не так. ПРИМЕЧАНИЕ: у меня также есть похожая проблема со слоями в update_function_configuration().

Я предполагаю, что версия boto3, которую использует консоль AWS Lambda, еще не была обновлена ​​/ обновлена ​​для поддержки слоев. Потому что, когда я запускаю тот же код локально на машине с довольно свежей версией boto3, он запускается без проблем. Я уже пробовал использовать обе перечисленные среды исполнения Python 3.6 и 3.7, что в консоли AWS, но ни одна из них не работала. Эти среды выполнения имеют соответствующие версии boto3 1.7.74 и 1.9.42. Но у моей локальной машины 1.9.59. Поэтому, возможно, добавление лямбда-слоев произошло между 1.9.42 и 1.9.59.

1 Ответ

0 голосов
/ 05 января 2019

Я предполагаю, что версия boto3, которую использует консоль AWS Lambda, еще не была обновлена ​​/ обновлена ​​для поддержки слоев.

Это совершенно верно. AWS обычно регулярно обновляет доступные библиотеки на AWS Lambda, но не обновляет их в течение нескольких месяцев по неизвестным причинам.

Поддерживаемые конечные точки API фактически не определены в boto3, но в botocore. В настоящее время botocore 1.10.74 доступно на AWS Lambda , тогда как поддержка AWS Lambda Layers добавлена ​​в botocore 1.12.56.

Чтобы избежать таких несовместимостей между вашим кодом и версиями доступных библиотек, вы должны создать пакет развертывания , содержащий boto3 и botocore в дополнение к вашему коду функции AWS Lambda, поэтому ваш код использует ваши версии в комплекте вместо тех, которые предоставляет AWS. Вот что предлагает AWS в качестве части лучших практик :

Управление зависимостями в пакете развертывания вашей функции.

Среда выполнения AWS Lambda содержит ряд библиотек, таких как AWS SDK для сред выполнения Node.js и Python (полный список можно найти здесь: Среда выполнения Lambda и доступные библиотеки ). Чтобы включить последний набор функций и обновлений безопасности, Lambda будет периодически обновлять эти библиотеки. Эти обновления могут вносить незначительные изменения в поведение вашей лямбда-функции. Чтобы получить полный контроль над зависимостями, которые использует ваша функция, мы рекомендуем объединить все ваши зависимости с пакетом развертывания.

...