Impor pustaka psycopg2 AWS Lambda untuk berinteraksi dengan database PostgreSQL Anda - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Impor pustaka psycopg2 AWS Lambda untuk berinteraksi dengan database PostgreSQL Anda

Louis Hourcade, Amazon Web Services

Ringkasan

Psycopg adalah adaptor database PostgressQL untuk Python. Pengembang menggunakan psycopg2 perpustakaan untuk menulis aplikasi Python yang berinteraksi dengan database PostgreSQL.

Di Amazon Web Services (AWS), pengembang juga menggunakan AWS Lambdauntuk menjalankan kode untuk aplikasi atau layanan backend. Lambda adalah layanan komputasi tanpa server yang digerakkan oleh peristiwa yang menjalankan kode tanpa perlu menyediakan atau mengelola server.

Secara default, saat Anda membuat fungsi baru yang menggunakan runtime Python (versi 3.9, 3.8, atau 3.7), lingkungan runtime Lambda dibuat dari gambar dasar untuk Lambda yang disediakan oleh. AWS Pustaka, seperti pandas ataupsycopg2, tidak termasuk dalam gambar dasar. Untuk menggunakan perpustakaan, Anda perlu menggabungkannya dalam paket khusus dan melampirkannya ke Lambda.

Ada beberapa cara untuk menggabungkan dan melampirkan perpustakaan, termasuk yang berikut:

  • Terapkan fungsi Lambda Anda dari arsip file.zip.

  • Terapkan fungsi Lambda Anda dari gambar kontainer khusus.

  • Buat layer Lambda, dan lampirkan ke fungsi Lambda Anda.

Pola ini menunjukkan dua opsi pertama.

Dengan paket penyebaran.zip, menambahkan pandas pustaka ke fungsi Lambda Anda relatif mudah. Buat folder di mesin Linux Anda, tambahkan skrip Lambda bersama dengan pandas perpustakaan dan dependensi perpustakaan ke folder, zip folder, dan sediakan sebagai sumber untuk fungsi Lambda Anda.

Meskipun menggunakan paket penyebaran.zip adalah praktik umum, pendekatan itu tidak berfungsi untuk perpustakaan. psycopg2 Pola ini pertama-tama menunjukkan kesalahan yang Anda dapatkan jika Anda menggunakan paket penyebaran .zip untuk menambahkan psycopg2 pustaka ke fungsi Lambda Anda. Pola kemudian menunjukkan cara menerapkan Lambda dari Dockerfile dan mengedit gambar Lambda untuk membuat perpustakaan berfungsi. psycopg2

Untuk informasi tentang tiga sumber daya yang diterapkan pola, lihat bagian Informasi tambahan.

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS dengan izin yang cukup untuk menyebarkan AWS sumber daya yang digunakan oleh pola ini

  • AWS Cloud Development Kit (AWS CDK) diinstal secara global dengan menjalankan npm install -g aws-cdk

  • Klien Git

  • Python

  • Docker

Keterbatasan

Versi produk

  • Versi runtime AWS Lambda: Python 3.8 (Pola dapat disesuaikan untuk versi Python lainnya.)

  • Psycopg2 versi 2.9.3

  • Pandas versi 1.5.2

Arsitektur

Ikhtisar solusi

Untuk mengilustrasikan tantangan yang mungkin Anda hadapi saat menggunakan psycopg2 pustaka di Lambda, pola tersebut menerapkan dua fungsi Lambda:

Fungsi Lambda pertama menginstal pandas perpustakaan dan dependensinya dalam file.zip, dan Lambda dapat menggunakan pustaka itu.

Fungsi Lambda kedua menunjukkan bahwa dengan membangun gambar kontainer untuk fungsi Lambda Anda, Anda dapat menjalankan dan pandas perpustakaan di Lambda. psycopg2

Alat

Layanan AWS

  • AWS Cloud Development Kit (AWS CDK)adalah kerangka kerja pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan infrastruktur AWS Cloud dalam kode.

  • AWS Lambdaadalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.

Alat-alat lainnya

  • Docker adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.

  • panda adalah alat open source berbasis Python untuk analisis dan manipulasi data.

  • Psycopg adalah adaptor database PostgreSQL untuk bahasa Python yang dirancang untuk aplikasi multithreaded. Pola ini menggunakan Psycopg 2.

  • Python adalah bahasa pemrograman komputer tujuan umum.

Repositori kode

Kode untuk pola ini tersedia di impor-psycopg2 - - repositori pada. in-lambda-to-interact with-postgres-database GitHub

Praktik terbaik

Pola ini memberi Anda contoh kerja penggunaan AWS CDK untuk membuat fungsi Lambda dari Dockerfile. Jika Anda menggunakan kembali kode ini dalam aplikasi Anda, pastikan bahwa sumber daya yang digunakan memenuhi semua persyaratan keamanan. Gunakan alat seperti Checkov, yang memindai konfigurasi infrastruktur cloud untuk menemukan kesalahan konfigurasi sebelum infrastruktur diterapkan.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori.

Untuk mengkloning GitHub repositori pada mesin lokal Anda, jalankan perintah berikut:

git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git cd AWS-lambda-psycopg2
AWS Umum

Konfigurasikan penerapan Anda.

Edit app.py file dengan informasi tentang Anda Akun AWS:

aws_acccount = "AWS_ACCOUNT_ID" region = "AWS_REGION" # Select the CPU architecture you are using to build the image (ARM or X86) architecture = "ARM"
AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Bootstrap Anda Akun AWS.

Jika Anda belum mem-bootstrap lingkungan AWS Anda, jalankan perintah berikut dengan AWS kredensyal akun Anda: AWS

cdk bootstrap aws://<tooling-account-id>/<aws-region>
AWS Umum

Menyebarkan kode.

Untuk menyebarkan AWS CDK aplikasi, jalankan perintah berikut:

cdk deploy AWSLambdaPyscopg2
AWS Umum
TugasDeskripsiKeterampilan yang dibutuhkan

Uji fungsi Lambda yang dibuat dari file.zip.

Untuk menguji fungsi Lambda yang dibuat dari file.zip, lakukan hal berikut:

  1. Masuk ke konsol, dan buka konsol Lambda di. https://console.aws.amazon.com/lambda/

  2. Pilih fungsi lambda-from-zip Lambda.

  3. Buat acara pengujian untuk memanggil fungsi.

  4. Saat dipanggil, fungsi tersebut akan memunculkan kesalahan yang menyertakan pesan berikut:

    "errorMessage": Unable to import module 'lambda_code': libpq.so.5: cannot open shared object, "stackTrace": [] "errorType": Runtime.ImportModuleError",
  5. Buka CloudWatch konsol Amazon di https://console.aws.amazon.com/cloudwatch/. CloudWatch Log menunjukkan bahwa pandas pustaka telah berhasil diimpor tetapi impor psycopg2 pustaka gagal.

Karena Lambda tidak menemukan pustaka PostgreSQL yang diperlukan dalam gambar default, Lambda tidak dapat menggunakan pustaka. psycopg2

AWS Umum

Uji fungsi Lambda yang dibuat dari Dockerfile.

Untuk menggunakan psycopg2 pustaka dalam fungsi Lambda Anda, Anda harus mengedit Lambda Amazon Machine Image (AMI).

Untuk menguji fungsi Lambda yang dibuat dari Dockerfile, lakukan hal berikut:

  1. Masuk ke konsol, dan buka konsol Lambda.

  2. Pilih fungsi lambda-from-docker Lambda.

  3. Buat acara pengujian untuk memanggil fungsi.

  4. Ketika dipanggil, fungsi harus berjalan dengan sukses.

Kode berikut menunjukkan Dockerfile yang dibuat AWS CDK template:

# Start from lambda Python3.8 image FROM public.ecr.aws/lambda/python:3.8 # Copy the lambda code, together with its requirements COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT} COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT} # Install postgresql-devel in your image RUN yum install -y gcc postgresql-devel # install the requirements for the Lambda code RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}" # Command can be overwritten by providing a different command in the template directly. CMD ["lambda_code.handler"]

Dockerfile mengambil gambar AWS Lambda yang disediakan untuk runtime Python 3.8 dan menginstal postgresql-devel, yang berisi pustaka yang diperlukan untuk mengkompilasi aplikasi yang berinteraksi langsung dengan server manajemen PostgreSQL. Dockerfile juga menginstal pandas dan psycopg2 perpustakaan, yang ditunjukkan dalam file. requirements.txt

AWS Umum

Sumber daya terkait

Informasi tambahan

Dalam pola ini, AWS CDK template menyediakan AWS tumpukan dengan tiga sumber daya:

  • Peran AWS Identity and Access Management (IAM) untuk fungsi Lambda.

  • Fungsi Lambda dengan runtime Python 3.8. Fungsi ini digunakan dari paket Constructs/lambda/lambda_deploy.zip penyebaran.

  • Fungsi Lambda dengan runtime Python 3.8. Fungsi ini digunakan dari Dockerfile di bawah folder Constructs

Skrip untuk kedua fungsi Lambda memeriksa apakah psycopg2 pustaka pandas dan pustaka berhasil diimpor:

import pandas print("pandas successfully imported") import psycopg2 print("psycopg2 successfully imported") def handler(event, context): """Function that checks whether psycopg2 and pandas are successfully imported or not""" return {"Status": "psycopg2 and pandas successfully imported"}

Paket lambda_deploy.zip penerapan dibangun dengan skrip Constructs/lambda/build.sh bash. Skrip ini membuat folder, menyalin skrip Lambda, menginstal pandas dan psycopg2 perpustakaan, dan menghasilkan file.zip. Untuk membuat file.zip sendiri, jalankan skrip bash ini dan gunakan kembali tumpukan. AWS CDK

Dockerfile dimulai dengan image dasar yang AWS disediakan untuk Lambda dengan runtime Python 3.8. Dockerfile menginstal pandas dan psycopg2 pustaka di atas gambar default.