Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Jalankan pembacaan paralel objek S3 dengan menggunakan Python dalam suatu fungsi AWS Lambda
Eduardo Bortoluzzi, Amazon Web Services
Ringkasan
Anda dapat menggunakan pola ini untuk mengambil dan meringkas daftar dokumen dari Amazon Simple Storage Service (Amazon S3) bucket secara real time. Pola ini memberikan contoh kode ke objek baca paralel dari bucket S3 di Amazon Web Services ()AWS. Pola ini menampilkan cara menjalankan tugas I/O terikat secara efisien dengan AWS Lambda fungsi menggunakan Python.
Sebuah perusahaan keuangan menggunakan pola ini dalam solusi interaktif untuk secara manual menyetujui atau menolak transaksi keuangan yang berkorelasi secara real time. Dokumen transaksi keuangan disimpan dalam ember S3 yang terkait dengan pasar. Operator memilih daftar dokumen dari bucket S3, menganalisis nilai total transaksi yang dihitung oleh solusi, dan memutuskan untuk menyetujui atau menolak batch yang dipilih.
Tugas terikat I/O mendukung banyak utas. Dalam contoh kode ini, concurrent.futures. ThreadPoolExecutorbotocore
sehingga semua thread dapat melakukan download objek S3 secara bersamaan.
Kode contoh menggunakan satu objek 8,3 KB, dengan data JSON, dalam ember S3. Objek dibaca beberapa kali. Setelah fungsi Lambda membaca objek, data JSON diterjemahkan ke objek Python. Pada bulan Desember 2024, hasil setelah menjalankan contoh ini adalah 1.000 pembacaan diproses dalam 2,3 detik dan 10.000 pembacaan diproses dalam 27 detik menggunakan fungsi Lambda yang dikonfigurasi dengan memori 2.304 MB. AWS Lambda mendukung konfigurasi memori dari 128 MB menjadi 10.240 MB (10 GB), meskipun meningkatkan Lambdamemory melebihi 2.304 MB tidak membantu mengurangi waktu untuk menjalankan tugas terikat I/O khusus ini.
Alat AWS Lambda Power Tuning
Prasyarat dan batasan
Prasyarat
Aktif Akun AWS
Kemahiran dengan pengembangan Python
Batasan
Fungsi Lambda dapat memiliki paling banyak 1.024 proses eksekusi atau utas.
Baru Akun AWS memiliki batas memori Lambda 3.008 MB. Sesuaikan alat AWS Lambda Power Tuning yang sesuai. Untuk informasi selengkapnya, lihat bagian Pemecahan Masalah.
Amazon S3 memiliki batas 5.500 GET/HEAD permintaan per detik per awalan yang dipartisi.
Versi produk
Python 3.9 atau yang lebih baru
AWS Cloud Development Kit (AWS CDK) v2
AWS Command Line Interface (AWS CLI) versi 2
AWS Lambda Power Tuning 4.3.6 (opsional)
Arsitektur
Tumpukan teknologi target
AWS Lambda
Amazon S3
AWS Step Functions (jika AWS Lambda Power Tuning digunakan)
Arsitektur target
Diagram berikut menunjukkan fungsi Lambda yang membaca objek dari bucket S3 secara paralel. Diagram juga memiliki alur kerja Step Functions untuk alat AWS Lambda Power Tuning untuk menyempurnakan memori fungsi Lambda. Penyetelan halus ini membantu mencapai keseimbangan yang baik antara biaya dan kinerja.

Otomatisasi dan skala
Fungsi Lambda berskala cepat saat diperlukan. Untuk menghindari kesalahan 503 Slow Down dari Amazon S3 selama permintaan tinggi, kami sarankan untuk membatasi penskalaan.
Alat
Layanan AWS
AWS Cloud Development Kit (AWS CDK) v2 adalah kerangka pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan AWS Cloud infrastruktur dalam kode. Infrastruktur contoh dibuat untuk digunakan. AWS CDK
AWS Command Line InterfaceAWS CLIadalah alat open source yang membantu Anda berinteraksi Layanan AWS melalui perintah di shell baris perintah Anda. Dalam pola ini, AWS CLI versi 2 digunakan untuk mengunggah contoh file JSON.
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.
Amazon Simple Storage Service Amazon S3 adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
AWS Step Functionsadalah layanan orkestrasi tanpa server yang membantu Anda menggabungkan fungsi AWS Lambda dan layanan AWS lainnya untuk membangun aplikasi yang penting bagi bisnis.
Alat-alat lainnya
Python adalah bahasa
pemrograman komputer tujuan umum. Penggunaan kembali thread idle worker diperkenalkan di Python versi 3.8, dan kode fungsi Lambda dalam pola ini dibuat untuk Python versi 3.9 dan yang lebih baru.
Repositori kode
Kode untuk pola ini tersedia di aws-lambda-parallel-download
Praktik terbaik
AWS CDK Konstruksi ini bergantung pada izin Akun AWS pengguna Anda untuk menerapkan infrastruktur. Jika Anda berencana menggunakan AWS CDK Pipelines atau penerapan lintas akun, lihat Stack synthesizer.
Aplikasi contoh ini tidak mengaktifkan log akses di bucket S3. Ini adalah praktik terbaik untuk mengaktifkan log akses dalam kode produksi.
Epik
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Periksa versi yang diinstal Python. | Kode ini telah diuji secara khusus pada Python 3.9 dan Python 3.13, dan harus bekerja pada semua versi di antara rilis ini. Untuk memeriksa versi Python Anda, jalankan Untuk memverifikasi bahwa modul yang diperlukan diinstal, jalankan | Arsitek awan |
Instal AWS CDK. | Untuk menginstal AWS CDK jika belum diinstal, ikuti petunjuk di Memulai dengan AWS CDK. Untuk mengonfirmasi bahwa AWS CDK versi yang diinstal adalah 2.0 atau yang lebih baru, jalankan | Arsitek awan |
Bootstrap lingkungan Anda. | Untuk bootstrap lingkungan Anda, jika belum dilakukan, ikuti instruksi di Bootstrap lingkungan Anda untuk digunakan dengan AWS CDK. | Arsitek awan |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Kloning repositori. | Untuk mengkloning versi terbaru dari repositori, jalankan perintah berikut:
| Arsitek awan |
Ubah direktori kerja ke repositori kloning. | Jalankan perintah berikut:
| Arsitek awan |
Buat lingkungan virtual Python. | Untuk membuat lingkungan virtual Python, jalankan perintah berikut:
| Arsitek awan |
Aktifkan lingkungan virtual. | Untuk mengaktifkan lingkungan virtual, jalankan perintah berikut:
| Arsitek awan |
Instal dependensi. | Untuk menginstal dependensi Python, jalankan perintah:
| Arsitek awan |
Jelajahi kodenya. | (Opsional) Contoh kode yang mengunduh objek dari bucket S3 ada di Kode infrastruktur ada di | Arsitek awan |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Terapkan aplikasi. | Jalankan Tuliskan AWS CDK outputnya:
| Arsitek awan |
Unggah contoh file JSON. | Repositori berisi contoh file JSON sekitar 9 KB. Untuk mengunggah file ke bucket S3 dari tumpukan yang dibuat, jalankan perintah berikut:
Ganti | Arsitek awan |
Jalankan aplikasi. | Untuk menjalankan aplikasi, lakukan hal berikut:
| Arsitek awan |
Tambahkan jumlah unduhan. | (Opsional) Untuk menjalankan 1.500 get panggilan objek, gunakan JSON berikut di Event JSON parameter:
| Arsitek awan |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Jalankan alat AWS Lambda Power Tuning. |
Di akhir proses, hasilnya akan berada di tab input dan output Eksekusi. | Arsitek awan |
Lihat hasil AWS Lambda Power Tuning dalam grafik. | Pada tab Input dan output eksekusi, salin tautan | Arsitek awan |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Hapus objek dari ember S3. | Sebelum Anda menghancurkan sumber daya yang digunakan, Anda menghapus semua objek dari bucket S3:
Ingatlah untuk mengganti | Arsitek awan |
Hancurkan sumber daya. | Untuk menghancurkan semua sumber daya yang dibuat untuk pilot ini, jalankan perintah berikut:
| Arsitek awan |
Pemecahan Masalah
Isu | Solusi |
---|---|
| Untuk akun baru, Anda mungkin tidak dapat mengonfigurasi lebih dari 3.008 MB di fungsi Lambda Anda. Untuk menguji menggunakan AWS Lambda Power Tuning, tambahkan properti berikut pada input JSON saat Anda memulai eksekusi Step Functions:
|
Sumber daya terkait
Informasi tambahan
Kode
Cuplikan kode berikut melakukan pemrosesan I/O paralel:
with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor: for result in executor.map(a_function, (the_arguments)): ...
ThreadPoolExecutor
Menggunakan kembali utas saat tersedia.
Pengujian dan hasil
Tes ini dilakukan pada Desember 2024.
Tes pertama memproses 2.500 pembacaan objek, dengan hasil sebagai berikut.

Mulai dari 3.009 MB, tingkat waktu pemrosesan tetap hampir sama untuk setiap peningkatan memori, tetapi biaya meningkat seiring dengan meningkatnya ukuran memori.
Tes lain menyelidiki kisaran antara 1.536 MB dan 3.072 MB memori, menggunakan nilai yang kelipatan 256 MB dan memproses 10.000 pembacaan objek, dengan hasil sebagai berikut.

performance-to-costRasio terbaik adalah dengan konfigurasi Lambda memori 2.304 MB.
Sebagai perbandingan, proses sekuensial 2.500 pembacaan objek membutuhkan waktu 47 detik. Proses paralel menggunakan konfigurasi Lambda 2.304 MB membutuhkan waktu 7 detik, yaitu 85 persen lebih sedikit.
