

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
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions"></a>

*Sandip Gangapadhyay, Amazon Web Services*

## Ringkasan
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-summary"></a>

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](https://github.com/aws-samples/aws-step-functions-etl-pipeline-pattern) repositori.

## Prasyarat dan batasan
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-prereqs"></a>

**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](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) dari AWS CLI dokumentasi. AWS CLI Untuk petunjuk konfigurasi, lihat [Pengaturan konfigurasi dan file kredensi](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) dalam AWS CLI dokumentasi.
+ Bucket Amazon S3.
+ Dataset CSV dengan skema yang benar. ([Repositori kode](https://github.com/aws-samples/aws-step-functions-etl-pipeline-pattern/) yang disertakan dengan pola ini menyediakan contoh file CSV dengan skema dan tipe data yang benar yang dapat Anda gunakan.)
+ Browser web yang mendukung Konsol Manajemen AWS. (Lihat [daftar browser yang didukung](https://aws.amazon.com/premiumsupport/knowledge-center/browsers-management-console/).)
+ 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](https://docs.aws.amazon.com/step-functions/latest/dg/service-quotas.html) dalam AWS Step Functions dokumentasi.

**Versi produk**
+ Python 3.13 untuk AWS Lambda
+ AWS Glue versi 4.0

## Arsitektur
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-architecture"></a>

![\[Proses ETL dari bucket sumber S3 melalui Step Functions, AWS Glue, dan Amazon SNS dalam 10 langkah.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/054c8e9d-76a2-4334-b21a-cbe76af45923.png)


 

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

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

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

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

1. Tergantung pada hasil validasi:

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

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

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

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

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

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

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

1. 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
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-tools"></a>

**Layanan AWS**
+ [AWS Glue](https://aws.amazon.com/glue/)— AWS Glue adalah layanan ETL yang dikelola sepenuhnya yang memudahkan pelanggan untuk menyiapkan dan memuat data mereka untuk analitik.
+ [AWS Step Functions](https://aws.amazon.com/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](https://aws.amazon.com/s3/) 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](https://aws.amazon.com/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](https://aws.amazon.com/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](https://github.com/aws-samples/aws-step-functions-etl-pipeline-pattern) 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/python`folder - Berisi paket Python yang diperlukan untuk membuat AWS Lambda lapisan yang diperlukan untuk proyek ini.
+ `lambda`folder - 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.py`Memulai 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
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-epics"></a>

### Siapkan file sumber
<a name="prepare-the-source-files"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kloning repositori kode sampel. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | Developer | 
| Perbarui nilai parameter. | Dalam salinan lokal repositori Anda, edit `parameter.json` file dan perbarui nilai parameter default sebagai berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 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:<pre>aws cloudformation package --template-file template.yml --s3-bucket <bucket_name> --output-template-file packaged.template --profile <profile_name></pre>di mana:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | Developer | 

### Buat tumpukan
<a name="create-the-stack"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Menyebarkan CloudFormation template. | Untuk menyebarkan AWS CloudFormation template, jalankan AWS CLI perintah berikut:<pre>aws cloudformation deploy --stack-name <stack_name> --template-file packaged.template --parameter-overrides file://parameter.json --capabilities CAPABILITY_IAM --profile <profile_name></pre>di mana:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | Developer | 
| Periksa kemajuan. | Di [AWS CloudFormation konsol](https://console.aws.amazon.com/cloudformation/), periksa kemajuan pengembangan tumpukan. Ketika statusnya`CREATE_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 | 

### Uji pipa
<a name="test-the-pipeline"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Mulai pipa ETL. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 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  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions.html) | 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](https://docs.aws.amazon.com/athena/latest/ug/querying-athena-tables.html) dokumentasi. AWS  | Analis basis data | 

## Pemecahan masalah
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-troubleshooting"></a>


| Isu | Solusi | 
| --- | --- | 
| 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](https://docs.aws.amazon.com/lake-formation/latest/dg/upgrade-glue-lake-formation.html). | 

## Sumber daya terkait
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-resources"></a>

**Layanan AWS dokumentasi**
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/)
+ [AWS Glue](https://docs.aws.amazon.com/glue/)
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/)
+ [Amazon S3](https://docs.aws.amazon.com/s3/)
+ [Amazon SNS](https://docs.aws.amazon.com/sns/)

## Informasi tambahan
<a name="orchestrate-an-etl-pipeline-with-validation-transformation-and-partitioning-using-aws-step-functions-additional"></a>

**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.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/bd77de7b-4d04-44bb-95d2-3ec4599b3770.png)


**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.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/8eb792b0-d35b-4a63-ba2d-71eb8d2c1203/images/5fd7dd79-ba4c-4c20-b1f0-ad4b5f22bdfc.png)


 