콘텐츠로 이동

pydantic AWS Lambda 기능과 잘 통합됩니다. 이 가이드에서는 AWS Lambda 함수에 대해 pydantic 설정하는 방법에 대해 설명합니다.

AWS Lambda 함수용 Python 라이브러리 설치

AWS Lambda 함수에서 Python 라이브러리를 활용하는 방법에는 여러 가지가 있습니다. 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)!
  1. Lambda 런타임에 해당하는 플랫폼을 사용하십시오.
  2. 패키지(종종 Lambda 레이어의 경우 python )를 설치할 디렉터리를 지정합니다.
  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')] """

위에 인쇄된 것과 같은 두 개의 파일이 표시될 것으로 예상됩니다. 컴파일 라이브러리 파일은 OS 및 Python 버전에 따라 이름이 달라지는 .so 또는 .pyd입니다.

  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 .

이 두 검사가 일치하지 않으면 빌드 단계에서 람다의 대상 플랫폼에 대한 올바른 네이티브 코드가 설치되지 않은 것입니다. 설치된 라이브러리의 버전을 변경하려면 빌드 단계를 조정해야 합니다.

가장 가능성이 높은 오류:

  • OS 또는 CPU 아키텍처가 일치하지 않습니다(예: darwin과 x86_64-linux-gnu). 람다 종속성을 설치할 때 pip install 에 올바른 --platform 인수를 전달하거나 올바른 플랫폼에 대한 Linux Docker 컨테이너 내부에 빌드해 보세요. 현재 가능한 플랫폼은 다음과 같습니다. --platform manylinux2014_x86_64 또는 --platform manylinux2014_aarch64 , 그러나 이는 향후 Pydantic 주요 릴리스에서 변경될 수 있습니다.

  • Python 버전이 일치하지 않습니다(예: cpython-310cpython-312 ). 올바른 --python-version 인수를 pip install 에 전달하거나, 그렇지 않으면 빌드에 사용된 Python 버전을 변경해 보세요.

email-validator 에 대한 패키지 메타데이터를 찾을 수 없습니다.

Pydantic은 importlib.metadataversion 사용하여 설치된 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 설치하는 데 여전히 어려움을 겪고 있다면 다른 개발자가 직면한 다양한 문제와 솔루션을 다루는 이 문제를 참조할 수 있습니다.

eventcontext 데이터 유효성 검사

pydantic 사용하여 AWS Lambda 함수에서 eventcontext 데이터를 검증하는 방법에 대해 자세히 알아보려면 블로그 게시물을 확인하세요.


本文总阅读量