Step Functions #
Di dalam arsitektur sistem terdistribusi modern, khususnya yang menggunakan pendekatan microservices dan serverless, kita sering kali dihadapkan pada tantangan untuk mengoordinasikan alur kerja (workflow) yang melibatkan banyak layanan independen. Sebagai contoh, proses transaksi pembayaran e-commerce membutuhkan beberapa langkah berurutan: memvalidasi pesanan, memotong saldo kartu kredit, mengurangi stok barang di inventaris, dan mengirimkan email konfirmasi ke pembeli.
Jika setiap layanan memicu layanan berikutnya secara langsung menggunakan event asinkron (pola Koreografi atau Choreography), alur kerja keseluruhan menjadi sangat sulit untuk dipantau, di-debug, dan dikelola ketika terjadi kesalahan di tengah jalan. Di sinilah AWS Step Functions hadir sebagai solusi orkestrasi (Orchestration) terkelola berbasis serverless yang memungkinkan kita merancang, menjalankan, dan mengaudit alur kerja multi-langkah sebagai sebuah mesin status (State Machine) yang tangguh dan tahan terhadap kegagalan.
Orkestrasi vs. Koreografi dalam Microservices #
Sebelum mendalami Step Functions, penting bagi kita untuk memahami perbedaan antara dua pola utama koordinasi layanan terdistribusi:
flowchart TD
subgraph Koreografi["Pola Koreografi (Choreography)"]
direction LR
S1["Layanan Order"] -->|Event| S2["Layanan Bayar"]
S2 -->|Event| S3["Layanan Stok"]
S3 -->|Event| S4["Layanan Kirim"]
end
subgraph Orkestrasi["Pola Orkestrasi (Orchestration)"]
direction TB
Orch["AWS Step Functions<br/>(Orchestrator)"]
Orch -->|1. Panggil| O1["Layanan Order"]
Orch -->|2. Panggil| O2["Layanan Bayar"]
Orch -->|3. Panggil| O3["Layanan Stok"]
Orch -->|4. Panggil| O4["Layanan Kirim"]
end
- Koreografi (Choreography): Setiap layanan bekerja secara independen dan bereaksi terhadap peristiwa (event) dari layanan lain. Pola ini sangat fleksibel dan memiliki coupling terendah, namun sulit untuk dilacak alur prosesnya secara utuh (end-to-end) dan sangat rumit untuk menangani pembatalan transaksi (rollback) jika terjadi kegagalan di langkah terakhir.
- Orkestrasi (Orchestration): Ada satu komponen pusat (Orchestrator) yang secara aktif mengatur jalannya alur, memanggil layanan satu per satu, mengelola pertukaran data input/output, dan mengendalikan penanganan error. AWS Step Functions bertindak sebagai orchestrator terpusat ini.
Cara Kerja AWS Step Functions #
AWS Step Functions bekerja dengan mendefinisikan workflow kita sebagai sebuah State Machine. Setiap langkah di dalam workflow direpresentasikan sebagai sebuah State.
Alur kerja State Machine didefinisikan secara deklaratif menggunakan dokumen JSON atau YAML yang mengikuti aturan Amazon States Language (ASL).
flowchart TD
Start([Mulai Eksekusi]) --> Validate["Task: Validasi Pesanan<br/>(AWS Lambda)"]
Validate --> CheckCard{"Choice: Valid?"}
CheckCard -- "Ya" --> Charge["Task: Potong Saldo<br/>(Stripe/DynamoDB)"]
CheckCard -- "Tidak" --> Fail1[/"Fail: Batal (Invalid Order)"/]
Charge --> CheckPayment{"Choice: Sukses?"}
CheckPayment -- "Ya" --> Ship["Task: Kirim Email Konfirmasi<br/>(Amazon SES)"]
CheckPayment -- "Tidak" --> Refund["Task: Rollback / Refund<br/>(Saga Pattern)"]
Ship --> Success([Succeed: Transaksi Selesai])
Refund --> Fail2[/"Fail: Transaksi Gagal (Payment Rejected)"/]
Jenis-Jenis State Esensial di ASL: #
- Task State: Menjalankan pekerjaan komputasi nyata. Task ini bisa berupa memicu fungsi Lambda, menjalankan kontainer Fargate, menulis ke DynamoDB, atau melakukan panggilan HTTP eksternal.
- Choice State: Melakukan percabangan logika (if/else) berdasarkan nilai variabel data input.
- Parallel State: Menjalankan beberapa cabang alur kerja secara bersamaan (concurrently) dan menggabungkan hasilnya kembali setelah semua cabang selesai.
- Map State: Melakukan iterasi perulangan (looping) terhadap sebuah array data, memproses setiap elemen array secara paralel atau berurutan.
- Wait State: Menunda jalannya alur kerja selama durasi waktu tertentu (misalnya menunggu 24 jam) atau sampai waktu spesifik tercapai.
- Pass State: Tidak menjalankan komputasi luar, hanya digunakan untuk memanipulasi atau menyaring struktur data input/output.
- Succeed / Fail State: Menandai akhir dari eksekusi alur kerja dengan status sukses atau gagal secara eksplisit.
Dua Tipe Workflow: Standard vs. Express #
AWS Step Functions menyediakan dua pilihan tipe State Machine yang dioptimalkan untuk karakteristik beban kerja yang berbeda:
| Fitur Perbandingan | Standard Workflow | Express Workflow |
|---|---|---|
| Durasi Maksimal | Hingga 1 Tahun | Maksimal 5 Menit |
| Model Eksekusi | Exactly-Once (Pasti dieksekusi tepat satu kali) | At-Least-Once (Ada potensi dieksekusi lebih dari sekali) |
| Penyimpanan State | Durable (Riwayat eksekusi disimpan detail hingga 90 hari) | Ephemeral (Riwayat eksekusi hanya dikirim ke CloudWatch Logs) |
| Throughput | Hingga 2.000 eksekusi per detik | Hingga 100.000+ eksekusi per detik |
| Model Tagihan | Dihitung per State Transition ($0.025 per 1.000 transitions) | Dihitung per Durasi & Memori eksekusi (seperti Lambda) |
| Use Case Terbaik | Proses bisnis panjang, approval manusia, transfer dana | Pemrosesan IoT stream, API REST berkecepatan tinggi, ETL ringan |
Struktur Amazon States Language (ASL) #
Berikut adalah contoh penulisan alur kerja sederhana untuk validasi pembayaran menggunakan Amazon States Language (ASL) dalam format YAML:
Comment: "Workflow Orkestrasi Validasi Transaksi"
StartAt: ValidasiPesanan
States:
ValidasiPesanan:
Type: Task
Resource: "arn:aws:lambda:ap-southeast-1:123456789012:function:ValidateOrderFunction"
Next: ApakahValid
# ✓ Mengonfigurasi Retry otomatis secara deklaratif di tingkat platform
Retry:
- ErrorEquals:
- "States.Timeout"
- "Lambda.ServiceException"
IntervalSeconds: 2
MaxAttempts: 3
BackoffRate: 2.0
# ✓ Mengalihkan alur jika terjadi kegagalan permanen (Catch)
Catch:
- ErrorEquals:
- "States.ALL"
Next: GagalSistem
ApakahValid:
Type: Choice
Choices:
- Variable: "$.isValid"
BooleanEquals: true
Next: ProsesPembayaran
Default: BatalPesanan
ProsesPembayaran:
Type: Task
Resource: "arn:aws:lambda:ap-southeast-1:123456789012:function:ProcessPaymentFunction"
Next: SelesaiTransaksi
BatalPesanan:
Type: Fail
Error: "OrderValidationError"
Cause: "Data pesanan tidak valid setelah diverifikasi."
GagalSistem:
Type: Fail
Error: "SystemError"
Cause: "Terjadi kesalahan internal pada infrastruktur eksekusi."
SelesaiTransaksi:
Type: Succeed
Pola Transaksi Saga (Saga Pattern) #
Dalam sistem transaksi tanpa server yang terdistribusi, kita tidak bisa melakukan perintah COMMIT atau ROLLBACK SQL lintas database microservices secara instan. Sebagai gantinya, kita harus menerapkan Saga Pattern.
Saga Pattern bekerja dengan mendesain sepasang transaksi: Transaksi Utama dan Transaksi Kompensasi (pembatalan). Jika di tengah jalan langkah ke-3 gagal, orchestrator Step Functions berkewajiban memanggil Transaksi Kompensasi untuk langkah 1 dan 2 secara berurutan guna mengembalikan kondisi data sistem ke sedia kala (rollback).
Dengan Step Functions, pola Saga didefinisikan menggunakan blok Catch pada setiap Task. Jika pembayaran gagal, alur secara otomatis melompat ke fungsi Lambda RefundPayment atau CancelInventoryReservation sebelum menghentikan workflow dengan status gagal.
Manajemen Manipulasi Data: Path Processing #
Salah satu konsep paling membingungkan saat belajar Step Functions adalah bagaimana cara menyaring dan mengoperasikan data JSON yang mengalir antar-state. ASL menyediakan empat variabel filter jalur data (path processing):
InputPath: Menyaring bagian JSON mana dari input state sebelumnya yang boleh dibaca oleh state saat ini.Parameters: Membuat objek JSON baru dengan nilai yang kita tentukan sendiri untuk dikirim sebagai input ke resource task (misalnya payload Lambda).ResultPath: Menentukan di mana hasil output dari task saat ini harus disimpan di dalam objek JSON input utama. Ini sangat berguna jika kita ingin menyisipkan data baru tanpa menghapus data input lama.OutputPath: Menyaring bagian JSON mana dari hasil gabungan akhir yang boleh dikirimkan ke state berikutnya.
Ringkasan #
- AWS Step Functions adalah workflow orchestrator serverless yang menyatukan berbagai layanan AWS (Lambda, Fargate, DynamoDB) menjadi alur kerja yang teratur.
- Mendukung tipe Standard Workflow untuk proses jangka panjang (hingga 1 tahun) berbasis exactly-once, serta Express Workflow untuk proses cepat (maksimal 5 menit) dan throughput tinggi.
- Amazon States Language (ASL) adalah bahasa deklaratif berbasis JSON/YAML yang digunakan untuk mendefinisikan state machine.
- Penanganan Error Deklaratif (fitur
RetrydanCatchbawaan) membebaskan developer dari keharusan menulis logika retry manual di dalam kode aplikasi.- Saga Pattern dapat diorkestrasi secara andal menggunakan Step Functions untuk mengelola transaksi kompensasi (rollback) pada arsitektur microservices terdistribusi.