Lewati ke isi

pydantic terintegrasi dengan baik dengan fungsi AWS Lambda. Dalam panduan ini, kita akan membahas cara menyiapkan pydantic untuk fungsi AWS Lambda.

Menginstal pustaka Python untuk fungsi AWS Lambda

Ada banyak cara untuk memanfaatkan pustaka Python dalam fungsi AWS Lambda. Sebagaimana diuraikan dalam dokumentasi AWS Lambda , pendekatan yang paling umum meliputi:

Semua pendekatan ini dapat digunakan dengan pydantic . Pendekatan terbaik untuk Anda akan bergantung pada kebutuhan dan batasan spesifik Anda. Kami akan membahas dua kasus pertama secara lebih mendalam di sini, karena manajemen ketergantungan dengan gambar container lebih mudah. Jika Anda menggunakan gambar kontainer, komentar ini mungkin berguna untuk menginstal pydantic .

!!! tip Jika Anda menggunakan pydantic di beberapa fungsi, Anda mungkin ingin mempertimbangkan Lapisan AWS Lambda, yang mendukung berbagi perpustakaan dengan lancar di berbagai fungsi.

Apa pun pendekatan manajemen dependensi yang Anda pilih, sebaiknya patuhi panduan ini untuk memastikan proses manajemen dependensi berjalan lancar.

Menginstal pydantic untuk fungsi AWS Lambda

Saat Anda membuat arsip file .zip dengan kode dan dependensi atau mengatur file .zip untuk Lapisan Lambda, Anda mungkin akan menggunakan lingkungan virtual lokal untuk menginstal dan mengelola dependensi Anda. Ini bisa sedikit rumit jika Anda menggunakan pip karena pip menginstal wheel yang dikompilasi untuk platform lokal Anda, yang mungkin tidak kompatibel dengan lingkungan Lambda.

Oleh karena itu, kami menyarankan Anda menggunakan perintah yang mirip dengan berikut ini:

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. Gunakan platform yang sesuai dengan runtime Lambda Anda.
  2. Tentukan direktori tempat Anda ingin menginstal paket (seringkali python untuk Lambda Layers).
  3. Gunakan implementasi CPython.
  4. Versi Python harus kompatibel dengan runtime Lambda.
  5. Bendera ini memastikan bahwa paket tersebut dipasang roda biner yang sudah dibuat sebelumnya.
  6. Versi terbaru pydantic akan diinstal.

Pemecahan masalah

no module named 'pydantic_core._pydantic_core'

Itu

no module named `pydantic_core._pydantic_core`

kesalahan adalah masalah umum yang menunjukkan Anda salah menginstal pydantic . Untuk men-debug masalah ini, Anda dapat mencoba langkah-langkah berikut (sebelum impor gagal):

  1. Periksa isi paket pydantic-core yang diinstal. Apakah perpustakaan yang dikompilasi dan stub tipenya ada?

    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')] """

Anda akan melihat dua file seperti yang dicetak di atas. File perpustakaan kompilasi akan berupa .so atau .pyd dengan nama yang bervariasi sesuai dengan versi OS dan Python.

  1. Periksa apakah versi Python lambda Anda kompatibel dengan versi perpustakaan terkompilasi yang ditemukan di atas.

    import sysconfig print(sysconfig.get_config_var("EXT_SUFFIX"))

    > '.cpython-312-x86_64-linux-gnu.so'

Anda akan melihat akhiran yang sama di sini dengan perpustakaan yang dikompilasi, misalnya di sini kita melihat akhiran ini .cpython-312-x86_64-linux-gnu.so memang cocok _pydantic_core.cpython-312-x86_64-linux-gnu.so .

Jika kedua pemeriksaan ini tidak cocok, langkah pembangunan Anda belum memasang kode asli yang benar untuk platform target lambda Anda. Anda harus menyesuaikan langkah-langkah pembangunan Anda untuk mengubah versi perpustakaan terinstal yang diinstal.

Kesalahan yang paling mungkin terjadi:

  • Arsitektur OS atau CPU Anda tidak cocok (misalnya darwin vs x86_64-linux-gnu). Coba berikan argumen --platform yang benar ke pip install saat memasang dependensi lambda Anda, atau bangun di dalam wadah buruh pelabuhan linux untuk platform yang benar. Platform yang memungkinkan saat ini antara lain --platform manylinux2014_x86_64 atau --platform manylinux2014_aarch64 , tapi ini mungkin berubah dengan rilis besar Pydantic di masa depan.

  • Versi Python Anda tidak cocok (misalnya cpython-310 vs cpython-312 ). Coba berikan argumen --python-version yang benar ke pip install , atau ubah versi Python yang digunakan pada build Anda.

Tidak ada metadata paket yang ditemukan untuk email-validator

Pydantic menggunakan version dari importlib.metadata untuk memeriksa versi email-validator yang diinstal. Mekanisme pembuatan versi paket ini agak tidak kompatibel dengan AWS Lambda, meskipun ini merupakan standar industri untuk pembuatan versi paket dengan Python. Ada beberapa cara untuk memperbaiki masalah ini:

Jika Anda menerapkan lambda dengan kerangka kerja tanpa server, kemungkinan metadata yang sesuai untuk paket email-validator tidak disertakan dalam paket penerapan Anda. Alat seperti serverless-python-requirements hapus metadata untuk mengurangi ukuran paket. Anda dapat memperbaiki masalah ini dengan menyetel pengaturan slim ke false di file serverless.yml Anda:

pythonRequirements:
    dockerizePip: non-linux
    slim: false
    fileName: requirements.txt

Anda dapat membaca lebih lanjut tentang perbaikan ini, dan pengaturan slim lainnya yang mungkin relevan di sini .

Jika Anda menggunakan arsip .zip untuk kode dan/atau dependensi Anda, pastikan paket Anda berisi metadata versi yang diperlukan. Untuk melakukan ini, pastikan Anda menyertakan direktori dist-info di arsip .zip Anda untuk paket email-validator .

Masalah ini telah dilaporkan untuk pustaka python populer lainnya seperti jsonschema , sehingga Anda juga dapat membaca lebih lanjut tentang masalah ini dan kemungkinan perbaikannya.

Sumber Daya Ekstra

Tip Debug Lainnya

Jika Anda masih kesulitan menginstal pydantic untuk AWS Lambda Anda, Anda dapat berkonsultasi dengan masalah ini , yang mencakup berbagai masalah dan solusi yang dihadapi oleh pengembang lain.

Memvalidasi data event dan context

Lihat postingan blog kami untuk mempelajari lebih lanjut tentang cara menggunakan pydantic untuk memvalidasi data event dan context dalam fungsi AWS Lambda.


本文总阅读量