Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Struktur proyek Python dalam arsitektur heksagonal menggunakan AWS Lambda
Furkan Oruc, Dominik Goby, Darius Kunce, dan Michal Ploski, Amazon Web Services
Ringkasan
Pola ini menunjukkan bagaimana menyusun proyek Python dalam arsitektur heksagonal dengan menggunakan AWS Lambda. Pola ini menggunakan AWS Cloud Development Kit (AWS CDK) sebagai alat infrastruktur sebagai kode (IAc), Amazon API Gateway sebagai REST API, dan Amazon DynamoDB sebagai lapisan persistensi. Arsitektur heksagonal mengikuti prinsip-prinsip desain berbasis domain. Dalam arsitektur heksagonal, perangkat lunak terdiri dari tiga komponen: domain, port, dan adaptor. Untuk informasi rinci tentang arsitektur heksagonal dan manfaatnya, lihat panduan Membangun arsitektur heksagonal di AWS.
Prasyarat dan batasan
Prasyarat
Akun AWS yang aktif
Pengalaman dalam Python
Keakraban dengan AWS Lambda, AWS CDK, Amazon API Gateway, dan DynamoDB
GitHub Akun (lihat instruksi untuk mendaftar
) Git (lihat petunjuk instalasi
) Editor kode untuk membuat perubahan dan mendorong kode Anda ke GitHub (misalnya, Visual Studio Code
atau JetBrains PyCharm ) Docker diinstal, dan daemon Docker aktif dan berjalan
Versi produk
Git versi 2.24.3 atau yang lebih baru
Python versi 3.7 atau yang lebih baru
AWS CDK v2
Puisi versi 1.1.13 atau yang lebih baru
AWS Lambda Powertools untuk Python versi 1.25.6 atau yang lebih baru
pytest versi 7.1.1 atau yang lebih baru
Moto versi 3.1.9 atau yang lebih baru
pydantic versi 1.9.0 atau yang lebih baru
Boto3 versi 1.22.4 atau yang lebih baru
mypy-boto3-dynamodb versi 1.24.0 atau yang lebih baru
Arsitektur
Tumpukan teknologi target
Tumpukan teknologi target terdiri dari layanan Python yang menggunakan API Gateway, Lambda, dan DynamoDB. Layanan ini menggunakan adaptor DynamoDB untuk mempertahankan data. Ini menyediakan fungsi yang menggunakan Lambda sebagai titik masuk. Layanan ini menggunakan Amazon API Gateway untuk mengekspos REST API. API menggunakan AWS Identity and Access Management (IAM) untuk otentikasi klien.
Arsitektur target
Untuk mengilustrasikan implementasi, pola ini menerapkan arsitektur target tanpa server. Klien dapat mengirim permintaan ke titik akhir API Gateway. API Gateway meneruskan permintaan ke fungsi Lambda target yang mengimplementasikan pola arsitektur heksagonal. Fungsi Lambda melakukan operasi create, read, update, and delete (CRUD) pada tabel DynamoDB.
pentingPola ini diuji di lingkungan PoC. Anda harus melakukan tinjauan keamanan untuk mengidentifikasi model ancaman dan membuat basis kode yang aman sebelum Anda menerapkan arsitektur apa pun ke lingkungan produksi. |
---|

API mendukung lima operasi pada entitas produk:
GET /products
mengembalikan semua produk.POST /products
menciptakan produk baru.GET /products/{id}
mengembalikan produk tertentu.PUT /products/{id}
memperbarui produk tertentu.DELETE /products/{id}
menghapus produk tertentu.
Anda dapat menggunakan struktur folder berikut untuk mengatur proyek Anda untuk mengikuti pola arsitektur heksagonal:
app/ # application code |--- adapters/ # implementation of the ports defined in the domain |--- tests/ # adapter unit tests |--- entrypoints/ # primary adapters, entry points |--- api/ # api entry point |--- model/ # api model |--- tests/ # end to end api tests |--- domain/ # domain to implement business logic using hexagonal architecture |--- command_handlers/ # handlers used to execute commands on the domain |--- commands/ # commands on the domain |--- events/ # events triggered via the domain |--- exceptions/ # exceptions defined on the domain |--- model/ # domain model |--- ports/ # abstractions used for external communication |--- tests/ # domain tests |--- libraries/ # List of 3rd party libraries used by the Lambda function infra/ # infrastructure code simple-crud-app.py # AWS CDK v2 app
Alat
Layanan AWS
Amazon API Gateway
adalah layanan yang dikelola sepenuhnya yang memudahkan pengembang untuk membuat, menerbitkan, memelihara, memantau, dan mengamankan APIs pada skala apa pun. Amazon DynamoDB
adalah database NoSQL bernilai kunci yang dikelola sepenuhnya, tanpa server, yang dirancang untuk menjalankan aplikasi berkinerja tinggi pada skala apa pun. AWS Lambda
adalah layanan komputasi tanpa server dan berbasis peristiwa yang memungkinkan Anda menjalankan kode untuk hampir semua jenis aplikasi atau layanan backend tanpa menyediakan atau mengelola server. Anda dapat meluncurkan fungsi Lambda dari lebih dari 200 layanan AWS dan aplikasi perangkat lunak sebagai layanan (SaaS), dan hanya membayar untuk apa yang Anda gunakan.
Alat
Git
digunakan sebagai sistem kontrol versi untuk pengembangan kode dalam pola ini. Python
digunakan sebagai bahasa pemrograman untuk pola ini. Python menyediakan struktur data tingkat tinggi dan pendekatan untuk pemrograman berorientasi objek. AWS Lambda menyediakan runtime Python bawaan yang menyederhanakan pengoperasian layanan Python. Visual Studio Code
digunakan sebagai IDE untuk pengembangan dan pengujian untuk pola ini. Anda dapat menggunakan IDE apa pun yang mendukung pengembangan Python (misalnya, PyCharm ). AWS Cloud Development Kit (AWS CDK
) adalah kerangka kerja pengembangan perangkat lunak open-source yang memungkinkan Anda menentukan sumber daya aplikasi cloud Anda dengan menggunakan bahasa pemrograman yang sudah dikenal. Pola ini menggunakan CDK untuk menulis dan menyebarkan infrastruktur cloud sebagai kode. Puisi
digunakan untuk mengelola dependensi dalam pola. Docker
digunakan oleh AWS CDK untuk membangun paket dan lapisan Lambda.
Kode
Kode untuk pola ini tersedia di repositori sampel arsitektur heksagonal GitHub Lambda
Praktik terbaik
Untuk menggunakan pola ini dalam lingkungan produksi, ikuti praktik terbaik berikut:
Gunakan kunci terkelola pelanggan di AWS Key Management Service (AWS KMS) untuk mengenkripsi grup log Amazon dan tabel CloudWatch Amazon DynamoDB.
Konfigurasikan AWS WAF untuk Amazon API Gateway agar hanya mengizinkan akses dari jaringan organisasi Anda.
Pertimbangkan opsi lain untuk otorisasi API Gateway jika IAM tidak memenuhi kebutuhan Anda. Misalnya, Anda dapat menggunakan kumpulan pengguna Amazon Cognito atau otorisasi API Gateway Lambda.
Gunakan backup DynamoDB.
Konfigurasikan fungsi Lambda dengan penyebaran virtual private cloud (VPC) untuk menjaga lalu lintas jaringan di dalam cloud.
Perbarui konfigurasi asal yang diizinkan untuk preflight cross-origin resource sharing (CORS)
untuk membatasi akses ke domain asal yang meminta saja. Gunakan cdk-nag untuk memeriksa kode AWS CDK untuk praktik terbaik keamanan.
Pertimbangkan untuk menggunakan alat pemindaian kode untuk menemukan masalah keamanan umum dalam kode. Misalnya, Bandit
adalah alat yang dirancang untuk menemukan masalah keamanan umum dalam kode Python. Pip-Audit memindai lingkungan Python untuk paket yang memiliki kerentanan yang diketahui.
Pola ini menggunakan AWS X-Ray
Epik
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Buat repositori Anda sendiri. |
| Pengembang aplikasi |
Instal dependensi. |
| Pengembang aplikasi |
Konfigurasikan IDE Anda. | Kami merekomendasikan Visual Studio Code, tetapi Anda dapat menggunakan IDE pilihan Anda yang mendukung Python. Langkah-langkah berikut adalah untuk Visual Studio Code.
| Pengembang aplikasi |
Jalankan pengujian unit, opsi 1: Gunakan Kode Visual Studio. |
| Pengembang aplikasi |
Jalankan pengujian unit, opsi 2: Gunakan perintah shell. |
| Pengembang aplikasi |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Minta kredensi sementara. | Untuk memiliki kredensi AWS di shell saat Anda menjalankan | Pengembang aplikasi, AWS DevOps |
Men-deploy aplikasi. |
| Pengembang aplikasi, AWS DevOps |
Uji API, opsi 1: Gunakan konsol. | Gunakan konsol API Gateway untuk menguji API. Untuk informasi selengkapnya tentang operasi dan request/response pesan API, lihat bagian penggunaan API dari file readme | Pengembang aplikasi, AWS DevOps |
Uji API, opsi 2: Gunakan Tukang Pos. | Jika Anda ingin menggunakan alat seperti Tukang Pos
| Pengembang aplikasi, AWS DevOps |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Tulis tes unit untuk domain bisnis. |
| Pengembang aplikasi |
Menerapkan perintah dan penangan perintah. |
| Pengembang aplikasi |
Tulis tes integrasi untuk adaptor sekunder. |
| Pengembang aplikasi |
Menerapkan adaptor sekunder. |
| Pengembang aplikasi |
Tulis end-to-end tes. |
| Pengembang aplikasi |
Menerapkan adaptor utama. |
| Pengembang aplikasi |
Sumber daya terkait
Panduan APG
Referensi AWS
Alat
IDEs