Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memproses peristiwa secara asinkron dengan Amazon API Gateway dan AWS Lambda
Andrea Meroni, Mariem Kthiri, Nadim Majed, dan Michael Wallner, Amazon Web Services
Ringkasan
Amazon API Gateway adalah layanan terkelola penuh yang dapat digunakan pengembang untuk membuat, menerbitkan, memelihara, memantau, dan mengamankan APIs pada skala apa pun. Ini menangani tugas-tugas yang terlibat dalam menerima dan memproses hingga ratusan ribu panggilan API bersamaan.
Kuota layanan penting API Gateway adalah batas waktu integrasi. Batas waktu adalah waktu maksimum di mana layanan backend harus mengembalikan respons sebelum REST API mengembalikan kesalahan. Batas keras 29 detik umumnya dapat diterima untuk beban kerja sinkron. Namun, batas itu merupakan tantangan bagi pengembang yang ingin menggunakan API Gateway dengan beban kerja asinkron.
Pola ini menunjukkan contoh arsitektur untuk memproses peristiwa secara asinkron menggunakan API Gateway dan. AWS Lambda Arsitektur mendukung menjalankan tugas pemrosesan dengan durasi hingga 15 menit, dan menggunakan REST API dasar sebagai antarmuka.
Projen
Prasyarat dan batasan
Prasyarat
Aktif Akun AWS
Alat-alat berikut diinstal pada workstation Anda:
Keterbatasan
Runtime maksimum suatu pekerjaan dibatasi oleh runtime maksimum untuk fungsi Lambda (15 menit).
Jumlah maksimum permintaan pekerjaan bersamaan dibatasi oleh konkurensi yang dicadangkan dari fungsi Lambda.
Arsitektur
Diagram berikut menunjukkan interaksi API pekerjaan dengan fungsi Lambda pemrosesan peristiwa dan penanganan kesalahan, dengan peristiwa yang disimpan dalam arsip peristiwa Amazon. EventBridge

Alur kerja tipikal mencakup langkah-langkah berikut:
Anda mengautentikasi terhadap AWS Identity and Access Management (IAM) dan mendapatkan kredensi keamanan.
Anda mengirim
POSTpermintaan HTTP ke titik akhir API/jobslowongan, yang menentukan parameter pekerjaan di badan permintaan.API jobs, yang merupakan API API Gateway REST API, mengembalikan respons HTTP yang berisi pengenal pekerjaan kepada Anda.
API pekerjaan memanggil fungsi Lambda pemrosesan peristiwa secara asinkron.
Fungsi pemrosesan peristiwa memproses peristiwa, dan kemudian menempatkan hasil pekerjaan di tabel Amazon DynamoDB pekerjaan
Anda mengirim
GETpermintaan HTTP ke titik akhir API/jobs/{jobId}pekerjaan, dengan pengenal pekerjaan dari langkah 3 sebagai.{jobId}API pekerjaan menanyakan tabel
jobsDynamoDB untuk mengambil hasil pekerjaan.API pekerjaan mengembalikan respons HTTP yang berisi hasil pekerjaan.
Jika pemrosesan peristiwa gagal, fungsi pemrosesan peristiwa mengirimkan acara ke fungsi penanganan kesalahan.
Fungsi penanganan kesalahan menempatkan parameter pekerjaan dalam tabel
jobsDynamoDB.Anda dapat mengambil parameter pekerjaan dengan mengirimkan
GETpermintaan HTTP ke titik akhir API/jobs/{jobId}lowongan.Jika penanganan kesalahan gagal, fungsi penanganan kesalahan akan mengirimkan acara ke arsip EventBridge peristiwa.
Anda dapat memutar ulang acara yang diarsipkan dengan menggunakan. EventBridge
Alat
Layanan AWS
AWS Cloud Development Kit (AWS CDK)adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode.
AWS Command Line Interface (AWS CLI) adalah alat open source yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.
Amazon DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan terukur.
Amazon EventBridge adalah layanan bus acara tanpa server yang membantu Anda menghubungkan aplikasi Anda dengan data waktu nyata dari berbagai sumber. Misalnya, fungsi Lambda, titik akhir pemanggilan HTTP menggunakan tujuan API, atau bus acara di tempat lain. Akun AWS
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
autopep8
secara otomatis memformat kode Python berdasarkan panduan gaya Proposal Peningkatan Python (PEP) 8. Bandit
memindai kode Python untuk menemukan masalah keamanan umum. Commitizen
adalah pemeriksa dan generator komit Git. CHANGELOGcfn-lint adalah linter
AWS CloudFormation Checkov
adalah alat analisis kode statis yang memeriksa infrastruktur sebagai kode (IAc) untuk kesalahan konfigurasi keamanan dan kepatuhan. jq
adalah alat baris perintah untuk mengurai JSON. Postman
adalah platform API. pre-commit
adalah manajer Git Hooks. Projen
adalah generator proyek. pytest
adalah kerangka kerja Python untuk menulis tes kecil yang dapat dibaca.
Repositori kode
Contoh kode arsitektur ini dapat ditemukan di GitHub Asynchronous Event Processing dengan API Gateway dan repositori Lambda
Praktik terbaik
Contoh arsitektur ini tidak termasuk pemantauan infrastruktur yang diterapkan. Jika kasus penggunaan Anda memerlukan pemantauan, evaluasi penambahan Konstruksi Pemantauan CDK atau solusi
pemantauan lainnya. Contoh arsitektur ini menggunakan izin IAM untuk mengontrol akses ke API pekerjaan. Siapa pun yang berwenang untuk berasumsi
JobsAPIInvokeRoleakan dapat memanggil API pekerjaan. Dengan demikian, mekanisme kontrol akses adalah biner. Jika kasus penggunaan Anda memerlukan model otorisasi yang lebih kompleks, evaluasi menggunakan mekanisme kontrol akses yang berbeda.Saat pengguna mengirim
POSTpermintaan HTTP ke titik akhir API/jobsjobs, data input divalidasi pada dua tingkatan yang berbeda:Amazon API Gateway bertanggung jawab atas validasi permintaan pertama.
Fungsi pemrosesan acara melakukan permintaan kedua.
Tidak ada validasi yang dilakukan saat pengguna melakukan
GETpermintaan HTTP ke titik akhir API/jobs/{jobId}lowongan. Jika kasus penggunaan Anda memerlukan validasi input tambahan dan peningkatan tingkat keamanan, evaluasi menggunakan AWS WAF untuk melindungi API Anda.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Kloning repositori. | Untuk mengkloning repositori secara lokal, jalankan perintah berikut:
| DevOps insinyur |
Siapkan proyek. |
| DevOps insinyur |
Instal kait pra-komit. | Untuk memasang kait pra-komit, lakukan hal berikut:
| DevOps insinyur |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Bootstrap AWS CDK. | Untuk bootstrap AWS CDK di Anda Akun AWS, jalankan perintah berikut:
| AWS DevOps |
Menyebarkan contoh arsitektur. | Untuk menerapkan arsitektur contoh di Anda Akun AWS, jalankan perintah berikut:
| AWS DevOps |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Instal prasyarat tes. | Instal di workstation Anda AWS Command Line Interface (AWS CLI), Postman Menggunakan Postman | DevOps insinyur |
Asumsikan | Asumsikan
| AWS DevOps |
Konfigurasikan Tukang Pos. |
| AWS DevOps |
Uji contoh arsitektur. | Untuk menguji arsitektur contoh, kirim permintaan | DevOps insinyur |
Pemecahan Masalah
| Isu | Solusi |
|---|---|
Penghancuran dan pemindahan arsitektur contoh berikutnya gagal karena grup CloudWatch log Amazon Logs |
|