

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

# Secara otomatis menghasilkan model PynamoDB dan fungsi CRUD untuk Amazon DynamoDB dengan menggunakan aplikasi Python
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application"></a>

*Vijit Vashishtha, Dheeraj Alimchandani, dan Dhananjay Karanjkar, Amazon Web Services*

## Ringkasan
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-summary"></a>

Adalah umum untuk meminta entitas dan membuat, membaca, memperbarui, dan menghapus (CRUD) fungsi operasi untuk secara efisien melakukan operasi database Amazon DynamoDB. PynamoDB adalah antarmuka berbasis Python yang mendukung Python 3. Ini juga menyediakan fitur seperti dukungan untuk transaksi Amazon DynamoDB, serialisasi nilai atribut otomatis dan deserialisasi, dan kompatibilitas dengan kerangka kerja Python umum, seperti Flask dan Django. Pola ini membantu pengembang bekerja dengan Python dan DynamoDB dengan menyediakan perpustakaan yang merampingkan pembuatan otomatis model PynamoDB dan fungsi operasi CRUD. Meskipun menghasilkan fungsi CRUD penting untuk tabel database, ia juga dapat merekayasa balik model PynamoDB dan fungsi CRUD dari tabel Amazon DynamoDB. Pola ini dirancang untuk menyederhanakan operasi database dengan menggunakan aplikasi berbasis Python.

Berikut ini adalah fitur utama dari solusi ini:
+ **Skema JSON ke model PynamoDB - Secara otomatis menghasilkan model PynamodB** dengan Python dengan mengimpor file skema JSON.
+ **Pembuatan fungsi CRUD** - Secara otomatis menghasilkan fungsi untuk melakukan operasi CRUD pada tabel DynamoDB.
+ **Rekayasa balik dari DynamoDB** - Gunakan pynamoDB object-relational mapping (ORM) untuk merekayasa balik model PynamoDB dan fungsi CRUD untuk tabel Amazon DynamoDB yang ada.

## Prasyarat dan batasan
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ [Python versi 3.8 atau yang lebih baru, diunduh dan diinstal](https://www.python.org/downloads/)
+ [Jinja2 versi 3.1.2 atau yang lebih baru, diunduh dan diinstal](https://pypi.org/project/Jinja2/#files)
+ Tabel Amazon DynamoDB yang ingin Anda hasilkan ORM
+ AWS Command Line Interface (AWS CLI), [diinstal](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) dan [dikonfigurasi](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ [PynamoDB versi 5.4.1 atau yang lebih baru, diinstal](https://pynamodb.readthedocs.io/en/stable/tutorial.html#installation)

## Arsitektur
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-architecture"></a>

**Tumpukan teknologi target**
+ Skrip JSON
+ Aplikasi Python
+ Model PynamoDB
+ Contoh basis data Amazon DynamoDB

**Arsitektur target**

![Menggunakan aplikasi Python untuk menghasilkan fungsi CRUD dan model PynamoDB dari tabel DynamoDB.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/74cc4c73-5c8b-448d-98fb-b681cfa5f860/images/c2c367d6-d88a-4f49-8571-89160539eb08.png)


1. Anda membuat file skema JSON masukan. File skema JSON ini mewakili atribut dari tabel DynamoDB masing-masing yang Anda ingin membuat model PynamoDB dari dan fungsi CRUD untuk. Ini berisi tiga kunci penting berikut:
   + `name`—Nama tabel DynamoDB target.
   + `region`— AWS Region Tempat tabel dihosting
   + `attributes`[Atribut yang merupakan bagian dari tabel target, seperti [kunci partisi](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey) (juga dikenal sebagai *atribut hash*), [kunci sortir](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey), [indeks sekunder lokal, indeks sekunder](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html)[global](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html), dan atribut non-kunci apa pun.](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.TablesItemsAttributes) Alat ini mengharapkan skema input hanya menyediakan atribut non-kunci karena aplikasi mengambil atribut kunci langsung dari tabel target. Untuk contoh cara menentukan atribut dalam file skema JSON, lihat bagian [Informasi tambahan](#automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-additional) dari pola ini.

1. Jalankan aplikasi Python dan berikan file skema JSON sebagai masukan.

1. Aplikasi Python membaca file skema JSON.

1. Aplikasi Python terhubung ke tabel DynamoDB untuk mendapatkan skema dan tipe data. Aplikasi ini menjalankan operasi [describe\_table](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/describe_table.html) dan mengambil atribut kunci dan indeks untuk tabel.

1. Aplikasi Python menggabungkan atribut dari file skema JSON dan tabel DynamoDB. Ini menggunakan mesin template Jinja untuk menghasilkan model PynamoDB dan fungsi CRUD yang sesuai.

1. Anda mengakses model PynamoDB untuk melakukan operasi CRUD pada tabel DynamoDB.

## Alat
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-tools"></a>

**Layanan AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.

**Alat-alat lainnya**
+ [Jinja](https://jinja.palletsprojects.com/en/) adalah mesin templating extensible yang mengkompilasi template ke dalam kode Python yang dioptimalkan. Pola ini menggunakan Jinja untuk menghasilkan konten dinamis dengan menyematkan placeholder dan logika dalam template.
+ [PynamoDB](https://pynamodb.readthedocs.io/en/stable/) adalah antarmuka berbasis Python untuk Amazon DynamoDB.
+ [Python adalah bahasa](https://www.python.org/) pemrograman komputer tujuan umum.

**Repositori kode**

Kode untuk pola ini tersedia dalam model [PynamoDB yang GitHub dihasilkan otomatis](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb) dan repositori fungsi CRUD. Repositori dibagi menjadi dua bagian utama: paket controller dan template.

*Controller paket*

Paket Python controller berisi logika aplikasi utama yang membantu menghasilkan model PynamoDB dan fungsi CRUD. Ini berisi yang berikut:
+ `input_json_validator.py`- Skrip Python ini memvalidasi file skema JSON masukan dan membuat objek Python yang berisi daftar tabel DynamoDB target dan atribut yang diperlukan untuk masing-masing.
+ `dynamo_connection.py`— Skrip ini membuat koneksi ke tabel DynamoDB dan menggunakan operasi untuk mengekstrak atribut `describe_table` yang diperlukan untuk membuat model PynamoDB.
+ `generate_model.py`- Script ini berisi kelas Python `GenerateModel` yang menciptakan model PynamoDB berdasarkan file skema JSON masukan dan operasi. `describe_table`
+ `generate_crud.py`— Untuk tabel DynamoDB yang didefinisikan dalam file skema JSON, skrip ini menggunakan `GenerateCrud` operasi untuk membuat kelas Python.

*Template*

Direktori Python ini berisi template Jinja berikut:
+ `model.jinja`- Template Jinja ini berisi ekspresi template untuk menghasilkan skrip model PynamoDB.
+ `crud.jinja`- Template Jinja ini berisi ekspresi template untuk menghasilkan skrip fungsi CRUD.

## Epik
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-epics"></a>

### Mengatur lingkungan
<a name="set-up-the-environment"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori. | Masukkan perintah berikut untuk mengkloning model [PynamoDB yang dihasilkan otomatis dan repositori fungsi CRUD](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb).<pre>git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git</pre> | Pengembang aplikasi | 
| Siapkan lingkungan Python. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | Pengembang aplikasi | 

### Hasilkan model PynamoDB dan fungsi CRUD
<a name="generate-the-pynamodb-model-and-crud-functions"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ubah file skema JSON. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | Pengembang aplikasi | 
| Jalankan aplikasi Python. | Masukkan perintah berikut untuk menghasilkan model PynamoDB dan fungsi CRUD, `<input_schema.json>` di mana nama file skema JSON Anda.<pre>python main.py --file <input_schema.json></pre> | Pengembang aplikasi | 

### Verifikasi model PynamoDB dan fungsi CRUD
<a name="verify-the-pynamodb-model-and-crud-functions"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Verifikasi model PynamodB yang dihasilkan. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | Pengembang aplikasi | 
| Verifikasi fungsi CRUD yang dihasilkan. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | Pengembang aplikasi | 

## Sumber daya terkait
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-resources"></a>
+ [Komponen inti Amazon DynamoDB (dokumentasi](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html) DynamoDB)
+ [Meningkatkan akses data dengan indeks sekunder](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html) (dokumentasi DynamoDB)

## Informasi tambahan
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-additional"></a>

**Contoh atribut untuk file skema JSON**

```
[
{
"name": "test_table",
"region": "ap-south-1",
"attributes": [
{
"name": "id",
"type": "UnicodeAttribute"
},
{
"name": "name",
"type": "UnicodeAttribute"
},
{
"name": "age",
"type": "NumberAttribute"
}
]
}
]
```