pydantic
хорошо интегрируется с функциями AWS Lambda. В этом руководстве мы обсудим, как настроить pydantic
для функции AWS Lambda.
Установка библиотек Python для функций AWS Lambda¶
Существует множество способов использования библиотек Python в функциях AWS Lambda. Как указано в документации AWS Lambda , наиболее распространенные подходы включают в себя:
- Использование файлового архива
.zip
для упаковки вашего кода и зависимостей. - Использование слоев AWS Lambda для совместного использования библиотек между несколькими функциями
- Использование образа контейнера для упаковки кода и зависимостей.
Все эти подходы можно использовать с pydantic
. Лучший подход для вас будет зависеть от ваших конкретных требований и ограничений. Здесь мы рассмотрим первые два случая более подробно, поскольку управление зависимостями с помощью образа контейнера проще. Если вы используете образ контейнера, этот комментарий может оказаться полезным для установки pydantic
.
!!! Совет Если вы используете pydantic
для нескольких функций, возможно, вам стоит рассмотреть возможность использования слоев AWS Lambda, которые поддерживают беспрепятственное совместное использование библиотек для нескольких функций.
Независимо от выбранного вами подхода к управлению зависимостями, полезно придерживаться этих рекомендаций, чтобы обеспечить бесперебойный процесс управления зависимостями.
Установка pydantic
для функций AWS Lambda¶
Когда вы создаете файловый архив .zip
со своим кодом и зависимостями или организуете свой .zip
файл для слоя Lambda, вы, скорее всего, будете использовать локальную виртуальную среду для установки и управления своими зависимостями. Это может быть немного сложно, если вы используете pip
, поскольку pip
устанавливает колеса, скомпилированные для вашей локальной платформы, которые могут быть несовместимы со средой Lambda.
Таким образом, мы предлагаем вам использовать команду, подобную следующей:
pip install \
--platform manylinux2014_x86_64 \ # (1)!
--target=<your_package_dir> \ # (2)!
--implementation cp \ # (3)!
--python-version 3.10 \ # (4)!
--only-binary=:all: \ # (5)!
--upgrade pydantic # (6)!
- Используйте платформу, соответствующую вашей среде выполнения Lambda.
- Укажите каталог, в который вы хотите установить пакет (часто
python
для слоев Lambda). - Используйте реализацию CPython.
- Версия Python должна быть совместима со средой выполнения Lambda.
- Этот флаг гарантирует, что в пакете установлены предварительно собранные бинарные колеса.
- Будет установлена последняя версия
pydantic
.
Поиск неисправностей¶
no module named 'pydantic_core._pydantic_core'
¶
no module named `pydantic_core._pydantic_core`
Ошибка — это распространенная проблема, которая указывает на то, что вы неправильно установили pydantic
. Чтобы устранить эту проблему, вы можете попробовать следующие шаги (до неудачного импорта):
-
Проверьте содержимое установленного пакета
pydantic-core
. Присутствуют ли скомпилированная библиотека и ее заглушки типов?from importlib.metadata import files print([file for file in files('pydantic-core') if file.name.startswith('_pydantic_core')]) """ [PackagePath('pydantic_core/_pydantic_core.pyi'), PackagePath('pydantic_core/_pydantic_core.cpython-312-x86_64-linux-gnu.so')] """
Вы должны ожидать увидеть два файла, подобных тем, что напечатаны выше. Файл библиотеки компиляции будет иметь расширение .so или .pyd, имя которого зависит от версии ОС и Python.
-
Убедитесь, что версия Python вашей лямбды совместима с версией скомпилированной библиотеки, найденной выше.
import sysconfig print(sysconfig.get_config_var("EXT_SUFFIX"))
> '.cpython-312-x86_64-linux-gnu.so'¶
Вы должны ожидать увидеть здесь тот же суффикс, что и в скомпилированной библиотеке, например, здесь мы видим этот суффикс .cpython-312-x86_64-linux-gnu.so
действительно соответствует _pydantic_core.cpython-312-x86_64-linux-gnu.so
.
Если эти две проверки не совпадают, на этапах сборки не был установлен правильный собственный код для целевой платформы вашей лямбды. Вам следует скорректировать шаги сборки, чтобы изменить версию установленной библиотеки, которая устанавливается.
Наиболее вероятные ошибки:
-
Архитектура вашей ОС или ЦП не соответствует (например, darwin и x86_64-linux-gnu). Попробуйте передать правильный аргумент
--platform
вpip install
при установке лямбда-зависимостей или создайте внутри контейнера докеров Linux для правильной платформы. Возможные платформы на данный момент включают--platform manylinux2014_x86_64
или--platform manylinux2014_aarch64
, но это может измениться в будущем основном выпуске Pydantic. -
Ваша версия Python не соответствует (например,
cpython-310
иcpython-312
). Попробуйте передать правильный аргумент--python-version
вpip install
или иным образом измените версию Python, используемую в вашей сборке.
Для email-validator
метаданные пакета не найдены.¶
Pydantic использует version
из importlib.metadata
, чтобы проверить, какая версия email-validator
установлена. Этот механизм управления версиями пакетов несколько несовместим с AWS Lambda, хотя он является отраслевым стандартом для управления версиями пакетов в Python. Есть несколько способов решить эту проблему:
Если вы развертываете свою лямбду с помощью бессерверной платформы, вполне вероятно, что соответствующие метаданные для пакета email-validator
не включены в ваш пакет развертывания. Такие инструменты, как serverless-python-requirements
удалите метаданные, чтобы уменьшить размер пакета. Вы можете решить эту проблему, установив для параметра slim
значение false в файле serverless.yml
:
pythonRequirements:
dockerizePip: non-linux
slim: false
fileName: requirements.txt
Подробнее об этом исправлении и других slim
настройках, которые могут иметь значение, можно прочитать здесь .
Если вы используете .zip
архив для своего кода и/или зависимостей, убедитесь, что ваш пакет содержит необходимые метаданные версии. Для этого обязательно включите каталог dist-info
в .zip
архив пакета email-validator
.
Об этой проблеме сообщалось и для других популярных библиотек Python, таких как jsonschema
, поэтому вы также можете прочитать больше об этой проблеме и возможных исправлениях там.
Дополнительные ресурсы¶
Дополнительные советы по отладке¶
Если вы все еще не можете установить pydantic
для своей AWS Lambda, вы можете обратиться к этой проблеме , которая охватывает множество проблем и решений, с которыми сталкиваются другие разработчики.
Проверка данных event
и context
¶
Прочтите нашу публикацию в блоге, чтобы узнать больше о том, как использовать pydantic
для проверки данных event
и context
в функциях AWS Lambda.
本文总阅读量次