Mengatur pipeline ETL dengan validasi, transformasi, dan partisi menggunakan AWS Step Functions - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengatur pipeline ETL dengan validasi, transformasi, dan partisi menggunakan AWS Step Functions

Sandip Gangapadhyay, Amazon Web Services

Ringkasan

Pola ini menjelaskan cara membuat pipeline ekstrak, transformasi, dan beban (ETL) tanpa server untuk memvalidasi, mengubah, mengompres, dan mempartisi kumpulan data CSV besar untuk kinerja dan pengoptimalan biaya. Pipeline diatur oleh AWS Step Functions dan mencakup penanganan kesalahan, coba ulang otomatis, dan fitur notifikasi pengguna.

Saat file CSV diunggah ke folder sumber bucket Amazon Simple Storage Service (Amazon S3), pipeline ETL mulai berjalan. Pipeline memvalidasi konten dan skema file CSV sumber, mengubah file CSV menjadi format Apache Parquet terkompresi, mempartisi kumpulan data berdasarkan tahun, bulan, dan hari, dan menyimpannya dalam folder terpisah untuk diproses alat analitik.

Kode yang mengotomatiskan pola ini tersedia di GitHub, di ETL Pipeline dengan AWS Step Functions repositori.

Prasyarat dan batasan

Prasyarat

  • Aktif Akun AWS.

  • AWS Command Line Interface (AWS CLI) diinstal dan dikonfigurasi dengan Anda Akun AWS, sehingga Anda dapat membuat AWS sumber daya dengan menerapkan AWS CloudFormation tumpukan. Kami merekomendasikan menggunakan AWS CLI versi 2. Untuk petunjuk, lihat Menginstal atau memperbarui ke versi terbaru dari AWS CLI dokumentasi. AWS CLI Untuk petunjuk konfigurasi, lihat Pengaturan konfigurasi dan file kredensi dalam AWS CLI dokumentasi.

  • Bucket Amazon S3.

  • Dataset CSV dengan skema yang benar. (Repositori kode yang disertakan dengan pola ini menyediakan contoh file CSV dengan skema dan tipe data yang benar yang dapat Anda gunakan.)

  • Browser web yang mendukung AWS Management Console. (Lihat daftar browser yang didukung.)

  • AWS Glue akses konsol.

  • AWS Step Functions akses konsol.

Batasan

  • Dalam AWS Step Functions, batas maksimum untuk menyimpan catatan riwayat adalah 90 hari. Untuk informasi selengkapnya, lihat kuota layanan Step Functions dalam AWS Step Functions dokumentasi.

Versi produk

  • Python 3.13 untuk AWS Lambda

  • AWS Glue versi 4.0

Arsitektur

Proses ETL dari bucket sumber S3 melalui Step Functions, AWS Glue, dan Amazon SNS dalam 10 langkah.

Alur kerja yang diilustrasikan dalam diagram terdiri dari langkah-langkah tingkat tinggi ini:

  1. Pengguna mengunggah file CSV ke folder sumber di Amazon S3.

  2. Peristiwa notifikasi Amazon S3 memulai AWS Lambda fungsi yang memulai mesin status. AWS Step Functions

  3. Fungsi Lambda memvalidasi skema dan tipe data dari file CSV mentah.

  4. Tergantung pada hasil validasi:

    1. Jika validasi file sumber berhasil, file pindah ke folder tahap untuk diproses lebih lanjut.

    2. Jika validasi gagal, file pindah ke folder kesalahan, dan pemberitahuan kesalahan dikirim melalui Amazon Simple Notification Service (Amazon SNS).

  5. AWS Glue Crawler membuat skema file mentah dari folder panggung di Amazon S3.

  6. AWS Glue Pekerjaan mengubah, mengompres, dan mempartisi file mentah ke dalam format Parket.

  7. AWS Glue Pekerjaan juga memindahkan file ke folder transformasi di Amazon S3.

  8. AWS Glue Crawler membuat skema dari file yang diubah. Skema yang dihasilkan dapat digunakan oleh pekerjaan analitik apa pun. Anda juga dapat menggunakan Amazon Athena untuk menjalankan kueri ad-hoc.

  9. Jika pipeline selesai tanpa kesalahan, file skema dipindahkan ke folder arsip. Jika ada kesalahan yang ditemui, file dipindahkan ke folder kesalahan sebagai gantinya.

  10. Amazon SNS mengirimkan notifikasi yang menunjukkan keberhasilan atau kegagalan berdasarkan status penyelesaian pipeline.

Semua AWS sumber daya yang digunakan dalam pola ini tanpa server. Tidak ada server untuk dikelola.

Alat

Layanan AWS

  • AWS Glue— AWS Glue adalah layanan ETL yang dikelola sepenuhnya yang memudahkan pelanggan untuk menyiapkan dan memuat data mereka untuk analitik.

  • AWS Step Functions- AWS Step Functions adalah layanan orkestrasi tanpa server yang memungkinkan Anda menggabungkan AWS Lambda fungsi dan lainnya Layanan AWS untuk membangun aplikasi bisnis yang penting. Melalui konsol AWS Step Functions grafis, Anda melihat alur kerja aplikasi Anda sebagai serangkaian langkah berbasis peristiwa.

  • Amazon S3 — Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) adalah layanan penyimpanan objek yang menawarkan skalabilitas, ketersediaan data, keamanan, dan kinerja terdepan di industri.

  • Amazon SNS — Amazon Simple Notification Service (Amazon SNS) adalah layanan pesan yang sangat tersedia, tahan lama, aman, dan pub/sub terkelola sepenuhnya yang memungkinkan Anda memisahkan layanan mikro, sistem terdistribusi, dan aplikasi tanpa server.

  • AWS Lambda— AWS Lambda adalah layanan komputasi yang memungkinkan Anda menjalankan kode tanpa menyediakan atau mengelola server. AWS Lambda menjalankan kode Anda hanya bila diperlukan dan menskalakan secara otomatis, dari beberapa permintaan per hari hingga ribuan per detik.

Kode

Kode untuk pola ini tersedia di GitHub, di ETL Pipeline dengan AWS Step Functions repositori. Repositori kode berisi file dan folder berikut:

  • template.yml— AWS CloudFormation template untuk membuat pipa ETL dengan AWS Step Functions.

  • parameter.json- Berisi semua parameter dan nilai parameter. Anda memperbarui file ini untuk mengubah nilai parameter, seperti yang dijelaskan di bagian Epik.

  • myLayer/pythonfolder - Berisi paket Python yang diperlukan untuk membuat AWS Lambda lapisan yang diperlukan untuk proyek ini.

  • lambdafolder - Berisi fungsi Lambda berikut:

    • move_file.py— Memindahkan kumpulan data sumber ke folder arsip, transformasi, atau kesalahan.

    • check_crawler.py— Memeriksa status AWS Glue crawler sebanyak yang dikonfigurasi oleh variabel RETRYLIMIT  lingkungan sebelum mengirim pesan kegagalan.

    • start_crawler.py— Memulai AWS Glue crawler.

    • start_step_function.py— Mulai AWS Step Functions.

    • start_codebuild.pyMemulai AWS CodeBuild proyek.

    • validation.py— Memvalidasi dataset mentah input.

    • s3object.py— Membuat struktur direktori yang diperlukan di dalam bucket Amazon S3.

    • notification.py— Mengirim pemberitahuan sukses atau kesalahan di akhir pipeline.

Untuk menggunakan kode sampel, ikuti instruksi di bagian Epik.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori kode sampel.

  1. Buka Pipeline ETL dengan AWS Step Functions repositori.

  2. Pilih Kode pada halaman repositori utama, di atas daftar file, dan salin URL yang tercantum di bawah Clone dengan HTTPS.

  3. Ubah direktori kerja Anda ke lokasi tempat Anda ingin menyimpan file sampel.

  4. Pada terminal atau command prompt, ketik perintah:

    git clone <repoURL>

    dimana <repoURL> mengacu pada URL yang Anda salin di langkah 2.

Developer

Perbarui nilai parameter.

Dalam salinan lokal repositori Anda, edit parameter.json file dan perbarui nilai parameter default sebagai berikut:

  • pS3BucketName─ Nama bucket Amazon S3 untuk menyimpan dataset. Template akan membuat ember ini untuk Anda. Nama bucket harus unik secara global.

  • pSourceFolder─ Nama folder di dalam bucket Amazon S3 yang akan digunakan untuk mengunggah file CSV sumber.

  • pStageFolder─ Nama folder di dalam bucket Amazon S3 yang akan digunakan sebagai area pementasan selama proses berlangsung.

  • pTransformFolder─ Nama folder di dalam bucket Amazon S3 yang akan digunakan untuk menyimpan dataset yang diubah dan dipartisi.

  • pErrorFolder─ Folder di dalam bucket Amazon S3 tempat file CSV sumber akan dipindahkan jika tidak dapat divalidasi.

  • pArchiveFolder ─ Nama folder di dalam bucket Amazon S3 yang akan digunakan untuk mengarsipkan file CSV sumber.

  • pEmailforNotification─ Alamat email yang valid untuk menerima success/error pemberitahuan.

  • pPrefix─ String awalan yang akan digunakan dalam nama AWS Glue crawler.

  • pDatasetSchema─ Skema kumpulan data yang akan divalidasi terhadap file sumber. Paket Cerberus Python digunakan untuk validasi dataset sumber. Untuk informasi lebih lanjut, lihat situs web Cerberus.

Developer

Unggah kode sumber ke bucket Amazon S3.

Sebelum Anda menerapkan AWS CloudFormation template yang mengotomatiskan pipeline ETL, Anda harus mengemas file sumber untuk template dan mengunggahnya ke bucket Amazon S3. Untuk melakukan ini, jalankan AWS CLI perintah berikut dengan profil Anda yang telah dikonfigurasi sebelumnya:

aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name>

di mana:

  • <bucket_name>adalah nama bucket Amazon S3 yang ada di Wilayah AWS tempat Anda ingin menyebarkan tumpukan. Bucket ini digunakan untuk menyimpan paket kode sumber untuk CloudFormation template.

  • <profile_name>adalah AWS CLI profil valid yang telah Anda konfigurasi sebelumnya saat Anda mengatur AWS CLI.

Developer
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan CloudFormation template.

Untuk menyebarkan AWS CloudFormation template, jalankan AWS CLI perintah berikut:

aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name>

di mana:

  • <stack_name>adalah pengidentifikasi unik untuk CloudFormation tumpukan.

  • <profile-name>adalah AWS CLI profil Anda yang telah dikonfigurasi sebelumnya.

Developer

Periksa kemajuan.

Di AWS CloudFormation konsol, periksa kemajuan pengembangan tumpukan. Ketika statusnyaCREATE_COMPLETE, tumpukan telah berhasil digunakan.

Developer

Perhatikan nama AWS Glue database.

Tab Output untuk tumpukan menampilkan nama AWS Glue database. Nama kunci tersebut adalah GlueDBOutput.

Developer
TugasDeskripsiKeterampilan yang dibutuhkan

Mulai pipa ETL.

  1. Arahkan ke folder sumber (source, atau nama folder yang Anda tetapkan dalam parameter.json file) di dalam bucket Amazon S3.

  2. Unggah contoh file CSV ke folder ini. (Repositori kode menyediakan file contoh yang disebut Sample_Bank_Transaction_Raw_Dataset.csv yang dapat Anda gunakan.) Mengunggah file akan memulai pipeline ETL melalui Step Functions.

  3. Pada konsol Step Functions, periksa status pipeline ETL.

Developer

Periksa dataset yang dipartisi.

Saat pipeline ETL selesai, verifikasi bahwa kumpulan data yang dipartisi tersedia di folder transformasi Amazon S3 (transform, atau nama folder yang Anda tetapkan dalam file). parameter.json

Developer

Periksa database yang dipartisi. AWS Glue

  1. Di AWS Glue konsol, pilih AWS Glue database yang dibuat oleh tumpukan (ini adalah database yang Anda catat di epik sebelumnya).

  2. Verifikasi bahwa tabel yang dipartisi tersedia di. AWS Glue Data Catalog

Developer

Jalankan kueri.

(Opsional) Gunakan Amazon Athena untuk menjalankan kueri ad-hoc pada database yang dipartisi dan diubah. Untuk petunjuk, lihat Menjalankan kueri SQL di Amazon Athena dalam dokumentasi. AWS

Analis basis data

Pemecahan Masalah

IsuSolusi

AWS Identity and Access Management (IAM) izin untuk AWS Glue pekerjaan dan crawler

Jika Anda lebih lanjut menyesuaikan AWS Glue pekerjaan atau crawler, pastikan untuk memberikan izin IAM yang sesuai dalam peran IAM yang digunakan oleh AWS Glue pekerjaan, atau memberikan izin data ke. AWS Lake Formation Lihat informasi yang lebih lengkap dalam dokumentasi AWS.

Sumber daya terkait

Layanan AWS dokumentasi

Informasi tambahan

Diagram berikut menunjukkan AWS Step Functions alur kerja untuk pipeline ETL yang sukses, dari panel Inspector AWS Step Functions .

Alur kerja Step Functions untuk memvalidasi input .csv, merayapi data, dan menjalankan tugas AWS Glue.

Diagram berikut menunjukkan AWS Step Functions alur kerja untuk pipeline ETL yang gagal karena kesalahan validasi input, dari panel Step Functions Inspector.

Step Functions alur kerja dengan kegagalan sehingga file pindah ke folder kesalahan.