Jalankan pengujian unit untuk pekerjaan ETL Python dalam AWS Glue menggunakan kerangka pytest - AWS Prescriptive Guidance

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

  • Pytest

  • 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 .

Pengujian unit untuk proses AWS Glue ETL.

Diagram menunjukkan alur kerja berikut:

  1. 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.

  2. 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 perbarui pipeline.yml file di GitHub repositori untuk sumber daya. TestBuild

  3. Pada tahap penerapan, CodeBuild proyek diluncurkan dan menerbitkan kode ke bucket Amazon S3 jika semua tes lulus.

  4. 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. Repositori mencakup sumber daya berikut:

  • 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

TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan arsip kode untuk penyebaran.

  1. Unduh code.zip dari repositori GitHub aws-glue-jobs-unit-testing, atau buat file.zip sendiri dengan menggunakan alat baris perintah. Misalnya, Anda dapat membuat file.zip di Linux atau Mac dengan menjalankan perintah berikut di terminal:

    git clone https://github.com/aws-samples/aws-glue-jobs-unit-testing.git cd aws-glue-jobs-unit-testing git checkout master zip -r code.zip src/ tests/ deploy/
  2. Masuk ke AWS Management Consoledan pilih Wilayah AWS pilihan Anda.

  3. Buat bucket Amazon S3, lalu unggah paket dan code.zip file .zip (diunduh sebelumnya) ke bucket Amazon S3 yang Anda buat.

DevOps insinyur

Buat CloudFormation tumpukan.

  1. Masuk ke AWS Management Console dan kemudian buka CloudFormation konsol.

  2. Pilih Buat tumpukan, lalu pilih Dengan sumber daya yang ada (sumber daya impor).

  3. Di bagian Tentukan templat dari halaman Buat tumpukan, pilih Unggah file templat, lalu pilih template pipeline.yml. (diunduh dari repositori). GitHub Lalu, pilih Selanjutnya.

  4. Untuk nama Stack, masukkan glue-unit-testing-pipeline, atau pilih nama tumpukan pilihan Anda.

  5. Untuk ApplicationStackName, gunakan nama yang sudah terisi sebelumnya glue-codepipeline-app. Ini adalah nama CloudFormation tumpukan yang dibuat oleh pipeline.

  6. Untuk BucketName, gunakan nama bucket aws-glue-artifacts-us-east-1 yang telah diisi sebelumnya. Ini adalah nama bucket Amazon S3 yang berisi file.zip dan digunakan oleh pipeline untuk menyimpan artefak kode.

  7. Untuk CodeZipFile, gunakan nilai code.zip yang telah diisi sebelumnya. Ini adalah nama kunci dari kode sampel objek Amazon S3. Objek harus berupa file.zip.

  8. Untuk TestReportGroupName, gunakan nama yang sudah terisi sebelumnya glue-unittest-report. Ini adalah nama grup laporan CodeBuild pengujian yang dibuat untuk menyimpan laporan pengujian unit.

  9. Pilih Berikutnya, lalu pilih Berikutnya lagi di halaman Configure stack options.

  10. Pada halaman Tinjauan, di bawah Kemampuan, pilih opsi Saya mengakui yang CloudFormation mungkin membuat sumber daya IAM dengan nama kustom.

  11. Pilih Kirim. Setelah pembuatan tumpukan selesai, Anda dapat melihat sumber daya yang dibuat di tab Sumber Daya. Pembuatan tumpukan membutuhkan waktu sekitar 5-7 menit.

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
TugasDeskripsiKeterampilan yang dibutuhkan

Jalankan pengujian unit di dalam pipa.

  1. Untuk menguji pipeline yang digunakan, masuk ke AWS Management Console, lalu buka CodePipeline konsol.

  2. Pilih pipeline yang dibuat oleh CloudFormation tumpukan, lalu pilih Rilis perubahan. Pipeline mulai berjalan (menggunakan kode terbaru di bucket Amazon S3).

  3. Setelah fase test_and_build selesai, pilih tab Details, dan kemudian periksa log.

  4. Pilih tab Laporan, lalu pilih laporan pengujian dari Riwayat laporan untuk melihat hasil pengujian unit.

  5. Setelah tahap penerapan selesai, jalankan dan pantau AWS Glue pekerjaan yang diterapkan di konsol. AWS Glue Untuk informasi selengkapnya, lihat Pemantauan AWS Glue dalam AWS Glue dokumentasi.

AWS DevOps, DevOps insinyur
TugasDeskripsiKeterampilan 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.

  1. Buka CloudFormation konsol, lalu pilih tumpukan yang Anda buat.

  2. Pilih Hapus. Ini menghapus semua sumber daya yang dibuat stack Anda, termasuk peran AWS Identity and Access Management (IAM), kebijakan IAM, dan proyek. CodeBuild

AWS DevOps, DevOps insinyur

Pemecahan Masalah

IsuSolusi

Peran CodePipeline layanan tidak dapat mengakses bucket Amazon S3.

  • Untuk kebijakan yang dilampirkan pada peran CodePipeline layanan Anda, tambahkan s3:ListBucket ke daftar tindakan dalam kebijakan Anda. Untuk petunjuk cara melihat kebijakan peran layanan, lihat Melihat ARN pipeline dan peran layanan ARN (konsol). Edit pernyataan kebijakan untuk peran layanan Anda seperti yang dijelaskan di Tambahkan izin ke peran CodePipeline layanan.

  • Untuk kebijakan berbasis sumber daya yang dilampirkan ke bucket artefak Amazon S3 untuk pipeline Anda, juga disebut kebijakan bucket artefak, tambahkan pernyataan yang memungkinkan peran layanan menggunakan izin. CodePipeline s3:ListBucket

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