Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Jalankan pengujian unit untuk pekerjaan ETL Python dalam AWS Glue menggunakan kerangka pytest
Praveen Kumar Jeyarajan dan Vaidy Sankaran, Amazon Web Services
Ringkasan
Anda dapat menjalankan pengujian unit untuk pekerjaan ekstrak, transformasi, dan muat Python (ETL) AWS Glue di lingkungan pengembangan lokal, tetapi mereplikasi pengujian tersebut dalam DevOps pipeline bisa jadi sulit dan memakan waktu. Pengujian unit bisa sangat menantang ketika Anda memodernisasi proses ETL mainframe pada tumpukan teknologi. AWS Pola ini menunjukkan kepada Anda cara menyederhanakan pengujian unit, sambil menjaga fungsionalitas yang ada tetap utuh, menghindari gangguan pada fungsionalitas aplikasi utama saat Anda merilis fitur baru, dan memelihara perangkat lunak berkualitas tinggi. Anda dapat menggunakan langkah-langkah dan contoh kode dalam pola ini untuk menjalankan pengujian unit untuk pekerjaan ETL Python AWS Glue dengan menggunakan kerangka pytest di. AWS CodePipeline Anda juga dapat menggunakan pola ini untuk menguji dan menyebarkan beberapa AWS Glue pekerjaan.
Prasyarat dan batasan
Prasyarat
Aktif Akun AWS
URI gambar Amazon Elastic Container Registry (Amazon ECR) Registry ECR) untuk perpustakaan AWS Glue Anda, diunduh dari Galeri Publik Amazon
ECR Terminal Bash (pada sistem operasi apa pun) dengan profil untuk target Akun AWS dan Wilayah AWS
Python 3.10
atau yang lebih baru Pustaka Moto
Python untuk pengujian Layanan AWS
Arsitektur
Diagram berikut menjelaskan cara menggabungkan pengujian unit untuk proses AWS Glue ETL yang didasarkan pada Python ke dalam pipa skala perusahaan yang khas AWS DevOps .

Diagram menunjukkan alur kerja berikut:
Pada tahap sumber, AWS CodePipeline gunakan bucket Amazon Simple Storage Service (Amazon S3) berversi versi untuk menyimpan dan mengelola aset kode sumber. Aset ini termasuk contoh Python ETL job (
sample.py
), unit test file (test_sample.py
), dan template. AWS CloudFormation Kemudian, CodePipeline transfer kode terbaru dari cabang utama ke AWS CodeBuild proyek untuk diproses lebih lanjut.Pada tahap build dan publish, kode terbaru dari tahap sumber sebelumnya diuji unit dengan bantuan gambar ECR Amazon AWS Glue publik. Kemudian, laporan pengujian dipublikasikan untuk CodeBuild melaporkan kelompok. Gambar kontainer di repositori ECR Amazon publik untuk AWS Glue pustaka mencakup semua binari yang diperlukan untuk menjalankan dan tugas ETL PySparkberbasis
pengujian unit secara lokal. AWS Glue Repositori kontainer publik memiliki tiga tag gambar, satu untuk setiap versi yang didukung oleh. AWS Glue Untuk tujuan demonstrasi, pola ini menggunakan tag glue_libs_4.0.0_image_01
gambar. Untuk menggunakan gambar kontainer ini sebagai gambar runtime CodeBuild, salin URI gambar yang sesuai dengan tag gambar yang ingin Anda gunakan, lalu perbaruipipeline.yml
file di GitHub repositori untuk sumber daya.TestBuild
Pada tahap penerapan, CodeBuild proyek diluncurkan dan menerbitkan kode ke bucket Amazon S3 jika semua tes lulus.
Pengguna menyebarkan AWS Glue tugas dengan menggunakan CloudFormation template di
deploy
folder.
Alat
Layanan AWS
AWS CodeBuildadalah layanan build yang dikelola sepenuhnya yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
AWS CodePipelinemembantu Anda dengan cepat memodelkan dan mengkonfigurasi berbagai tahapan rilis perangkat lunak dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.
Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
AWS Glueadalah layanan ETL yang dikelola sepenuhnya. Ini membantu Anda mengkategorikan, membersihkan, memperkaya, dan memindahkan data dengan andal antara penyimpanan data dan aliran data.
Amazon Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek yang menawarkan skalabilitas, ketersediaan data, keamanan, dan kinerja terdepan di industri.
Alat lainnya
Python adalah bahasa
pemrograman tujuan umum tingkat tinggi yang ditafsirkan. Moto
adalah perpustakaan Python untuk pengujian. Layanan AWS Pytest
adalah kerangka kerja untuk menulis tes unit kecil yang skala untuk mendukung pengujian fungsional yang kompleks untuk aplikasi dan pustaka. Python ETL library
untuk AWS Glue adalah repositori untuk pustaka Python yang digunakan dalam pengembangan lokal pekerjaan batch untuk. PySpark AWS Glue
Repositori kode
Kode untuk pola ini tersedia di repositori GitHub aws-glue-jobs-unit-testing
Contoh AWS Glue pekerjaan berbasis Python di folder
src
Kasus uji unit terkait (dibuat menggunakan kerangka pytest) di folder
tests
CloudFormation Template (ditulis dalam YAMAL) di folder
deploy
Praktik terbaik
Keamanan untuk CodePipeline sumber daya
Ini adalah praktik terbaik untuk menggunakan enkripsi dan otentikasi untuk repositori sumber yang terhubung ke saluran pipa Anda. CodePipeline Untuk informasi selengkapnya, lihat Praktik terbaik keamanan dalam CodePipeline dokumentasi.
Pemantauan dan pencatatan CodePipeline sumber daya
Ini adalah praktik terbaik untuk menggunakan fitur AWS logging untuk menentukan tindakan apa yang diambil pengguna di akun Anda dan sumber daya apa yang mereka gunakan. File log menunjukkan hal berikut:
Waktu dan tanggal tindakan
Alamat IP sumber tindakan
Tindakan mana yang gagal karena izin yang tidak memadai
Fitur logging tersedia di AWS CloudTrail dan Amazon CloudWatch Events. Anda dapat menggunakan CloudTrail untuk mencatat panggilan AWS API dan peristiwa terkait yang dibuat oleh atau atas nama Anda Akun AWS. Untuk informasi selengkapnya, lihat Logging panggilan CodePipeline API dengan AWS CloudTrail CodePipeline dokumentasi.
Anda dapat menggunakan CloudWatch Acara untuk memantau AWS Cloud sumber daya dan aplikasi yang sedang berjalan AWS. Anda juga dapat membuat peringatan di CloudWatch Acara. Untuk informasi selengkapnya, lihat Memantau CodePipeline peristiwa dalam CodePipeline dokumentasi.
Epik
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Siapkan arsip kode untuk penyebaran. |
| DevOps insinyur |
Buat CloudFormation tumpukan. |
Tumpukan membuat CodePipeline tampilan menggunakan Amazon S3 sebagai sumbernya. Pada langkah-langkah di atas, pipa adalah aws-glue-unit-test-pipeline. | AWS DevOps, DevOps insinyur |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Jalankan pengujian unit di dalam pipa. |
| AWS DevOps, DevOps insinyur |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Bersihkan sumber daya di lingkungan Anda. | Untuk menghindari biaya infrastruktur tambahan, pastikan Anda menghapus tumpukan setelah bereksperimen dengan contoh yang disediakan dalam pola ini.
| AWS DevOps, DevOps insinyur |
Pemecahan Masalah
Isu | Solusi |
---|---|
Peran CodePipeline layanan tidak dapat mengakses bucket Amazon S3. |
|
CodePipeline mengembalikan kesalahan bahwa bucket Amazon S3 tidak berversi. | CodePipeline mengharuskan bucket Amazon S3 sumber diberi versi. Aktifkan pembuatan versi di bucket Amazon S3 Anda. Untuk petunjuk, lihat Mengaktifkan pembuatan versi pada bucket. |
Sumber daya terkait
Informasi tambahan
Selain itu, Anda dapat menerapkan AWS CloudFormation template dengan menggunakan AWS Command Line Interface (AWS CLI). Untuk informasi selengkapnya, lihat Menerapkan templat dengan cepat dengan transformasi dalam dokumentasi. CloudFormation