

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
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Ringkasan
<a name="import-psycopg2-library-lambda-summary"></a>

[Psycopg adalah adaptor database](https://www.psycopg.org/docs/) 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 Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)untuk 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 yang didukung oleh Lambda, lingkungan runtime Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) dibuat dari gambar dasar untuk Lambda yang disediakan oleh.](https://github.com/aws/aws-lambda-base-images) AWS Pustaka, seperti `pandas` atau`psycopg2`, 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.](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html)
+ Terapkan fungsi Lambda Anda dari gambar kontainer khusus.
+ Buat [layer Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions), 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](#import-psycopg2-library-lambda-additional).

## Prasyarat dan batasan
<a name="import-psycopg2-library-lambda-prereqs"></a>

**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**
+ Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat [Layanan AWS berdasarkan Wilayah](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Untuk titik akhir tertentu, lihat halaman [titik akhir dan kuota Layanan](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), dan pilih tautan untuk layanan.

**Versi produk**
+ [Versi runtime Python yang didukung oleh Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Psycopg2 versi 2.9.3
+ Pandas versi 1.5.2

## Arsitektur
<a name="import-psycopg2-library-lambda-architecture"></a>

**Ikhtisar solusi**

Untuk mengilustrasikan tantangan yang mungkin Anda hadapi saat menggunakan `psycopg2` pustaka di Lambda, pola tersebut menerapkan dua fungsi Lambda:
+ Satu fungsi Lambda dengan runtime Python dibuat dari file.zip. `pandas`[Pustaka `psycopg2` dan diinstal dalam paket penyebaran.zip ini dengan menggunakan pip.](https://pypi.org/project/pip/)
+ Satu fungsi Lambda dengan runtime Python dibuat dari Dockerfile. Dockerfile menginstal `psycopg2` dan `pandas` pustaka ke dalam gambar kontainer 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
<a name="import-psycopg2-library-lambda-tools"></a>

**Layanan AWS**
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)adalah kerangka kerja pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan infrastruktur AWS Cloud dalam kode.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah 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](https://www.docker.com/) adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah.
+ [panda](https://pandas.pydata.org/) adalah alat open source berbasis Python untuk analisis dan manipulasi data.
+ [Psycopg](https://www.psycopg.org/docs/) adalah adaptor database PostgreSQL untuk bahasa Python yang dirancang untuk aplikasi multithreaded. Pola ini menggunakan Psycopg 2.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

Kode untuk pola ini tersedia di [impor-psycopg2](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - - repositori pada. in-lambda-to-interact with-postgres-database GitHub

## Praktik terbaik
<a name="import-psycopg2-library-lambda-best-practices"></a>

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](https://www.checkov.io/), yang memindai konfigurasi infrastruktur cloud untuk menemukan kesalahan konfigurasi sebelum infrastruktur diterapkan.

## Epik
<a name="import-psycopg2-library-lambda-epics"></a>

### Kloning repositori dan konfigurasikan penerapan
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Untuk mengkloning GitHub repositori pada mesin lokal Anda, jalankan perintah berikut:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | AWS Umum | 
| Konfigurasikan penerapan Anda. | Edit `app.py` file dengan informasi tentang Anda Akun AWS:<pre>aws_acccount = "AWS_ACCOUNT_ID"<br />region = "AWS_REGION"<br /># Select the CPU architecture you are using to build the image (ARM or X86)<br />architecture = "ARM"</pre> | AWS Umum | 

### Bootstrap akun AWS Anda dan terapkan aplikasi
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Bootstrap Anda Akun AWS. | Jika Anda belum [mem-bootstrap lingkungan AWS Anda](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), jalankan perintah berikut dengan AWS kredensyal akun Anda: AWS <pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | AWS Umum | 
| Menyebarkan kode. | Untuk menyebarkan AWS CDK aplikasi, jalankan perintah berikut:<pre>cdk deploy AWSLambdaPyscopg2</pre> | AWS Umum | 

### Uji fungsi Lambda dari AWS Management Console
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Uji fungsi Lambda yang dibuat dari file.zip. | Untuk menguji fungsi Lambda yang dibuat dari file.zip, lakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Kode berikut menunjukkan Dockerfile yang dibuat AWS CDK template:<pre># Start from lambda Python3.13 image<br />FROM public.ecr.aws/lambda/python:3.13<br /><br /># Copy the lambda code, together with its requirements<br />COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT}<br />COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT}<br /><br /># Install postgresql-devel in your image<br />RUN yum install -y gcc postgresql-devel<br /><br /># install the requirements for the Lambda code<br />RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"<br /><br /># Command can be overwritten by providing a different command in the template directly.<br />CMD ["lambda_code.handler"]</pre>Dockerfile mengambil gambar AWS Lambda yang disediakan untuk runtime Python dan menginstal [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/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
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK dokumentasi](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda dokumentasi](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Informasi tambahan
<a name="import-psycopg2-library-lambda-additional"></a>

Dalam pola ini, AWS CDK template menyediakan AWS tumpukan dengan tiga sumber daya:
+ Peran [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) untuk fungsi Lambda.
+ Fungsi Lambda dengan runtime Python. Fungsi ini digunakan dari paket `Constructs/lambda/lambda_deploy.zip` penyebaran.
+ Fungsi Lambda dengan runtime Python. 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` pustaka, 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. Dockerfile menginstal `pandas` dan `psycopg2` pustaka di atas gambar default.