Perjalanan LocalStack dari mengembangkan langsung di AWS, emulasi awal dengan moto, kelahiran LocalStack 2016, hingga ekosistem Pro/Ultimate. Episode ini mengupas masalah yang dipecahkan dan perbandingannya dengan pendekatan emulasi lain.

Di episode 0 kita sudah menyiapkan seluruh environment: Docker, LocalStack CLI, AWS CLI, dan awslocal. Sekarang kita mundur sejenak untuk memahami satu hal yang lebih penting dari sekadar perintah: mengapa LocalStack ada, dan masalah apa yang sebenarnya ia pecahkan.
Memahami sejarah dan latar belakang bukan sekadar nostalgia. Ketika nanti kalian menghadapi perbedaan perilaku antara emulator dan AWS asli, pemahaman tentang filosofi desain LocalStack akan membantu kalian memutuskan kapan harus kompromi dan kapan harus mengganti pendekatan.
Cara pengembang menguji integrasi AWS berubah drastis dalam satu dekade. Mari telusuri tahapannya.
Dulu — dan masih banyak tim yang melakukannya — pengembangan aplikasi cloud berjalan langsung di akun AWS. Alurnya: buat akun, konfigurasi credentials, buat resource lewat console atau CLI, lalu tulis kode yang menempel pada resource tersebut. Masalahnya nyata:
Masalah ini membuat tim mencari cara menguji integrasi tanpa menyentuh cloud sungguhan.
Jawaban awal datang dari dunia test-driven: moto, library Python yang me-mock layanan AWS untuk keperluan unit test. moto sangat ringan dan cepat, tapi ia adalah mock, bukan emulator — perilakunya disederhanakan, hanya mencakup sebagian API, dan state-nya tidak realistis. Ia cocok untuk test ringan, tetapi tidak untuk menjalankan aplikasi sungguhan.
Pada tahun 2016, LocalStack lahir sebagai proyek open source berlisensi Apache 2.0 untuk mengisi celah tersebut: sebuah emulator yang menjalankan tumpukan layanan AWS secara lokal dalam satu proses, dengan state yang nyata dan perilaku yang meniru API AWS. Sejak itu ia berkembang pesat. Saat ini versinya memakai kalender versioning sejak 2026.03.0, dengan rilis stabil terbaru 2026.07.0 (Juli 2026). Cek versi di mesin kalian dengan:
localstack --version
localstack statusBayangkan kalian menguji sebuah mesin ATM. Pendekatan mocking seperti bertanya kepada seseorang "apa yang dikatakan mesin ATM jika PIN salah?" — jawabannya sudah ditulis di atas kertas, tidak berubah, tidak peduli kartu apa yang dipakai. Pendekatan emulasi seperti membangun miniatur ATM sungguhan: kalian memasukkan kartu, menekan PIN, dan melihat proses verifikasi benar-benar terjadi. LocalStack memilih jalan kedua — ia menjalankan logika service, bukan sekadar menebak jawaban.
Setelah Community terbukti, LocalStack merilis edisi komersial: Pro dan Ultimate. Sejak v2026.03.0 keduanya digabung dalam satu image tunggal localstack/localstack — yang membedakan hanyalah aktivasi lewat LOCALSTACK_API_KEY. Fitur Pro mencakup Cloud Pods, Web Application, AWS Replicator, hingga dukungan untuk Snowflake dan Azure. Inti emulasinya tetap sama: satu endpoint di http://localhost:4566.
| Tahun | Peristiwa |
|---|---|
| 2016 | LocalStack rilis sebagai emulator open source Apache 2.0 |
| 2026.03.0 | Kalender versioning dimulai, image tunggal Community + Pro |
| 2026.07.0 | Rilis stabil terbaru saat artikel ini ditulis |
Dengan LocalStack, seluruh pengembangan berjalan di mesin lokal. Tidak ada akun, tidak ada quota, tidak ada tagihan, dan tidak ada kebocoran data. Iterasi menjadi instan: buat bucket di detik yang sama, hapus saat tidak dipakai. Ini mengubah pengalaman dari "menunggu provisioning" menjadi "bereksperimen".
Filosofi utama LocalStack adalah API parity: meniru endpoint AWS dengan setia sehingga kode produksi — baik SDK, CLI, maupun IaC — berjalan hampir tanpa modifikasi. Yang berubah hanyalah endpoint, misalnya lewat awslocal atau aws --endpoint-url=http://localhost:4566. Inilah yang membuat integration testing menjadi bermakna: apa yang kalian uji secara lokal adalah apa yang akan berjalan di cloud.
Buktinya sederhana. Perintah identitas berikut berperilaku persis seperti di AWS asli, hanya kredensialnya berupa fake credentials test/test dengan region us-east-1:
awslocal sts get-caller-identityEnvironment lokal yang sama bisa direplikasi ke semua developer dan ke CI. Dengan Docker Compose, definisi environment — service mana yang aktif, versi image, variabel apa saja — menjadi artefak yang di-versioning. Tidak ada lagi "berhasil di mesin saya tapi tidak di mesin kamu".
Data test tidak pernah menyentuh akun asli. Tidak ada risiko kebocoran data, tidak ada environment produksi yang terganggu oleh percobaan, dan setiap developer bisa punya workspace-nya sendiri.
| Pendekatan | Jenis | Kekuatan | Kelemahan |
|---|---|---|---|
| LocalStack | Emulator full-stack | Parity tinggi, state nyata, banyak service | Lebih berat, butuh Docker |
| moto | Mock (Python) | Ringan, cepat untuk unit test | Parity terbatas, state tidak realistis |
| AWS SAM Local | Tool khusus serverless | Integrasi dengan SAM template | Terbatas ke Lambda dan API Gateway |
| Cloud sandbox | Akun AWS test sungguhan | Akurasi 100 persen | Butuh akun, biaya, dan manajemen |
Gunakan moto untuk unit test yang sangat ringan dan tidak butuh integrasi antar service. Gunakan AWS SAM Local bila fokus kalian murni Lambda dan API Gateway. Gunakan cloud sandbox untuk validasi akhir yang benar-benar butuh perilaku AWS asli. Untuk pengembangan dan test integrasi sehari-hari, LocalStack menawarkan keseimbangan terbaik antara parity, kecepatan, dan biaya.
Tip
Pilih sesuai kebutuhan: moto untuk unit test cepat, LocalStack untuk integration test dan development lokal, cloud sandbox untuk penerimaan akhir sebelum produksi. Perbandingan ini akan dibahas lebih dalam di episode 22.
Perlu dipahami sejak awal bahwa LocalStack punya dua lapisan lisensi:
Sejak v2026.03.0, Community dan Pro digabung dalam satu image localstack/localstack; lisensi Pro diaktifkan lewat LOCALSTACK_API_KEY. Fokus seri ini adalah Community, dengan penyinggungan fitur Pro saat relevan.
Sekarang kalian paham mengapa LocalStack ada. Di episode 2 kita membongkar mesinnya: bagaimana LocalStack bekerja di balik layar — satu gateway di port 4566, arsitektur provider-based, dan komponen-komponen utamanya. Pastikan kalian sudah nyaman dengan konsep episode 0 dan 1, karena mulai episode 3 kita akan menjalankan emulator untuk pertama kali!