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:
- Menggunakan arsip file
.zip
untuk mengemas kode dan dependensi Anda - Menggunakan Lapisan AWS Lambda untuk berbagi perpustakaan di berbagai fungsi
- Menggunakan gambar kontainer untuk mengemas kode dan dependensi Anda
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)!
- Gunakan platform yang sesuai dengan runtime Lambda Anda.
- Tentukan direktori tempat Anda ingin menginstal paket (seringkali
python
untuk Lambda Layers). - Gunakan implementasi CPython.
- Versi Python harus kompatibel dengan runtime Lambda.
- Bendera ini memastikan bahwa paket tersebut dipasang roda biner yang sudah dibuat sebelumnya.
- 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):
-
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.
-
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 kepip 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
vscpython-312
). Coba berikan argumen--python-version
yang benar kepip 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.
本文总阅读量次