pydantic
AWS Lambda 기능과 잘 통합됩니다. 이 가이드에서는 AWS Lambda 함수에 대해 pydantic
설정하는 방법에 대해 설명합니다.
AWS Lambda 함수용 Python 라이브러리 설치¶
AWS Lambda 함수에서 Python 라이브러리를 활용하는 방법에는 여러 가지가 있습니다. AWS Lambda 문서 에 설명된 대로 가장 일반적인 접근 방식은 다음과 같습니다.
.zip
파일 아카이브를 사용하여 코드 및 종속 항목 패키징- AWS Lambda 레이어를 사용하여 여러 기능에서 라이브러리 공유
- 컨테이너 이미지를 사용하여 코드 및 종속 항목 패키징
이러한 접근 방식은 모두 pydantic
과 함께 사용할 수 있습니다. 가장 적합한 접근 방식은 특정 요구 사항과 제약 조건에 따라 달라집니다. 컨테이너 이미지를 사용한 종속성 관리가 더 간단하므로 여기에서는 처음 두 가지 사례를 더 자세히 다루겠습니다. 컨테이너 이미지를 사용하는 경우 이 설명이 pydantic
설치에 도움이 될 수 있습니다.
!!! 팁 여러 기능에 걸쳐 pydantic
사용하는 경우 여러 기능에 걸쳐 라이브러리의 원활한 공유를 지원하는 AWS Lambda 계층을 고려할 수 있습니다.
선택한 종속성 관리 접근 방식에 관계없이 원활한 종속성 관리 프로세스를 보장하려면 이러한 지침을 따르는 것이 좋습니다.
AWS Lambda 함수용 pydantic
설치¶
코드 및 종속성을 사용하여 .zip
파일 아카이브를 구축하거나 Lambda 계층에 대한 .zip
파일을 구성하는 경우 로컬 가상 환경을 사용하여 종속성을 설치하고 관리할 가능성이 높습니다. pip
Lambda 환경과 호환되지 않을 수 있는 로컬 플랫폼용으로 컴파일된 휠을 설치하기 때문에 pip
사용하는 경우 이는 약간 까다로울 수 있습니다.
따라서 다음과 유사한 명령을 사용하는 것이 좋습니다.
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 런타임에 해당하는 플랫폼을 사용하십시오.
- 패키지(종종 Lambda 레이어의 경우
python
)를 설치할 디렉터리를 지정합니다. - 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')] """
위에 인쇄된 것과 같은 두 개의 파일이 표시될 것으로 예상됩니다. 컴파일 라이브러리 파일은 OS 및 Python 버전에 따라 이름이 달라지는 .so 또는 .pyd입니다.
-
람다의 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
.
이 두 검사가 일치하지 않으면 빌드 단계에서 람다의 대상 플랫폼에 대한 올바른 네이티브 코드가 설치되지 않은 것입니다. 설치된 라이브러리의 버전을 변경하려면 빌드 단계를 조정해야 합니다.
가장 가능성이 높은 오류:
-
OS 또는 CPU 아키텍처가 일치하지 않습니다(예: darwin과 x86_64-linux-gnu). 람다 종속성을 설치할 때
pip install
에 올바른--platform
인수를 전달하거나 올바른 플랫폼에 대한 Linux Docker 컨테이너 내부에 빌드해 보세요. 현재 가능한 플랫폼은 다음과 같습니다.--platform manylinux2014_x86_64
또는--platform manylinux2014_aarch64
, 그러나 이는 향후 Pydantic 주요 릴리스에서 변경될 수 있습니다. -
Python 버전이 일치하지 않습니다(예:
cpython-310
대cpython-312
). 올바른--python-version
인수를pip install
에 전달하거나, 그렇지 않으면 빌드에 사용된 Python 버전을 변경해 보세요.
email-validator
에 대한 패키지 메타데이터를 찾을 수 없습니다.¶
Pydantic은 importlib.metadata
의 version
사용하여 설치된 email-validator
의 버전을 확인합니다 . 이 패키지 버전 관리 메커니즘은 Python의 패키지 버전 관리에 대한 업계 표준임에도 불구하고 AWS Lambda와 다소 호환되지 않습니다. 이 문제를 해결하는 몇 가지 방법이 있습니다.
서버리스 프레임워크를 사용하여 람다를 배포하는 경우 email-validator
패키지에 대한 적절한 메타데이터가 배포 패키지에 포함되지 않을 가능성이 있습니다. 다음과 같은 도구 serverless-python-requirements
패키지 크기를 줄이려면 메타데이터를 제거하세요. serverless.yml
파일에서 slim
설정을 false로 설정하여 이 문제를 해결할 수 있습니다.
pythonRequirements:
dockerizePip: non-linux
slim: false
fileName: requirements.txt
이 수정 사항과 관련된 기타 slim
설정에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
코드 및/또는 종속성에 대해 .zip
아카이브를 사용하는 경우 패키지에 필수 버전 메타데이터가 포함되어 있는지 확인하세요. 이렇게 하려면 email-validator
패키지의 .zip
아카이브에 dist-info
디렉터리를 포함해야 합니다.
이 문제는 jsonschema
와 같은 다른 인기 Python 라이브러리에 대해 보고되었으므로 해당 라이브러리에서 문제 및 잠재적인 수정 사항에 대한 자세한 내용을 읽을 수도 있습니다.
추가 리소스¶
추가 디버깅 팁¶
AWS Lambda에 pydantic
설치하는 데 여전히 어려움을 겪고 있다면 다른 개발자가 직면한 다양한 문제와 솔루션을 다루는 이 문제를 참조할 수 있습니다.
event
및 context
데이터 유효성 검사¶
pydantic
사용하여 AWS Lambda 함수에서 event
및 context
데이터를 검증하는 방법에 대해 자세히 알아보려면 블로그 게시물을 확인하세요.
本文总阅读量次