Перейти к содержанию

pydantic хорошо интегрируется с функциями AWS Lambda. В этом руководстве мы обсудим, как настроить pydantic для функции AWS Lambda.

Установка библиотек Python для функций AWS Lambda

Существует множество способов использования библиотек Python в функциях AWS Lambda. Как указано в документации 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)!
  1. Используйте платформу, соответствующую вашей среде выполнения Lambda.
  2. Укажите каталог, в который вы хотите установить пакет (часто python для слоев Lambda).
  3. Используйте реализацию CPython.
  4. Версия Python должна быть совместима со средой выполнения Lambda.
  5. Этот флаг гарантирует, что в пакете установлены предварительно собранные бинарные колеса.
  6. Будет установлена последняя версия pydantic .

Поиск неисправностей

no module named 'pydantic_core._pydantic_core'

no module named `pydantic_core._pydantic_core`

Ошибка — это распространенная проблема, которая указывает на то, что вы неправильно установили pydantic . Чтобы устранить эту проблему, вы можете попробовать следующие шаги (до неудачного импорта):

  1. Проверьте содержимое установленного пакета 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.

  1. Убедитесь, что версия 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.


本文总阅读量