

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
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework"></a>

*Praveen Kumar Jeyarajan dan Vaidy Sankaran, Amazon Web Services*

## Ringkasan
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-summary"></a>

Anda dapat menjalankan pengujian unit untuk pekerjaan ekstrak, transformasi, dan muat Python (ETL) AWS Glue di [lingkungan pengembangan lokal](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html), 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
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS
+ URI gambar Amazon Elastic Container Registry (Amazon ECR) Registry ECR) untuk perpustakaan AWS Glue Anda, diunduh dari Galeri Publik [Amazon](https://gallery.ecr.aws/glue/aws-glue-libs) ECR
+ Terminal Bash (pada sistem operasi apa pun) dengan profil untuk target Akun AWS dan Wilayah AWS
+ [Python 3.10](https://www.python.org/downloads/) atau yang lebih baru
+ [Pytest](https://github.com/pytest-dev/pytest)
+ Pustaka [Moto](https://github.com/getmoto/moto) Python untuk pengujian Layanan AWS

## Arsitektur
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-architecture"></a>

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.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/82781ca8-4da0-4df0-bf23-32992fece231/images/6286dafc-f1e0-4967-beed-4dedc6047c10.png)


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.

1. 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](https://spark.apache.org/docs/latest/api/python/) 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`

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

1. Pengguna menyebarkan AWS Glue tugas dengan menggunakan CloudFormation template di `deploy` folder.

## Alat
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-tools"></a>

**Layanan AWS**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)adalah layanan build yang dikelola sepenuhnya yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)membantu 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](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)adalah 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek yang menawarkan skalabilitas, ketersediaan data, keamanan, dan kinerja terdepan di industri.

**Alat lainnya**
+ [Python adalah bahasa](https://www.python.org/) pemrograman tujuan umum tingkat tinggi yang ditafsirkan.
+ [Moto](https://github.com/getmoto/moto) adalah perpustakaan Python untuk pengujian. Layanan AWS
+ [Pytest](https://github.com/pytest-dev/pytest) adalah kerangka kerja untuk menulis tes unit kecil yang skala untuk mendukung pengujian fungsional yang kompleks untuk aplikasi dan pustaka.
+ [Python ETL library](https://github.com/awslabs/aws-glue-libs) 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](https://github.com/aws-samples/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
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-best-practices"></a>

**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](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) 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](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring-cloudtrail-logs.html) 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](https://docs.aws.amazon.com/codepipeline/latest/userguide/detect-state-changes-cloudwatch-events.html) dalam CodePipeline dokumentasi.

## Epik
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-epics"></a>

### Menyebarkan kode sumber
<a name="deploy-the-source-code"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan arsip kode untuk penyebaran. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | DevOps insinyur | 
| Buat CloudFormation tumpukan. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html)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 | 

### Jalankan pengujian unit
<a name="run-the-unit-tests"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan pengujian unit di dalam pipa. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps insinyur | 

### Bersihkan semua AWS sumber daya
<a name="clean-up-all-aws-resources"></a>


| 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.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | AWS DevOps, DevOps insinyur | 

## Pemecahan masalah
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| Peran CodePipeline layanan tidak dapat mengakses bucket Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework.html) | 
| 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.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-versioning-examples.html) | 

## Sumber daya terkait
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-resources"></a>
+ [AWS Glue](https://aws.amazon.com/glue/)
+ [Mengembangkan dan menguji AWS Glue pekerjaan secara lokal](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-libraries.html)
+ [AWS CloudFormation untuk AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-with-cloudformation-templates.html)

## Informasi tambahan
<a name="run-unit-tests-for-python-etl-jobs-in-aws-glue-using-the-pytest-framework-additional"></a>

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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-deploy.html) dalam dokumentasi. CloudFormation 