Pengembangan AWS Secara Lokal: Pendekatan Praktis Menggunakan LocalStack
Amazon Web Services (AWS) telah menjadi fondasi utama bagi banyak aplikasi modern. Dengan menyediakan berbagai layanan seperti komputasi, penyimpanan, messaging, database, hingga serverless, AWS memungkinkan perusahaan membangun sistem yang scalable, fleksibel, dan andal dengan cepat. Layanan-layanan seperti S3, SQS, DynamoDB, dan Lambda kini menjadi bagian penting dalam arsitektur banyak aplikasi di seluruh dunia.
Namun, menggunakan AWS secara langsung dalam proses pengembangan bukan tanpa tantangan. Setiap komponen AWS memiliki biaya, meskipun terlihat kecil. Dalam proses development, developer sering melakukan eksperimen berulang seperti membuat SQS queue, mengirim banyak pesan, meng-upload file ke S3, atau menjalankan Lambda berkali-kali. Aktivitas-aktivitas ini dapat menimbulkan biaya yang signifikan jika tidak dikelola dengan baik.
Tantangan ini tidak hanya dialami oleh startup atau tim kecil. Perusahaan besar sekalipun menghadapi kompleksitas serupa dalam skala lebih besar. Pengujian internal harus mematuhi kebijakan keamanan yang ketat, sementara akses ke layanan AWS sering dibatasi oleh konfigurasi IAM dan jaringan internal perusahaan. Developer membutuhkan kredensial dan izin tertentu, yang menambah beban administratif. Selain itu, biaya yang tidak terprediksi dapat menyulitkan perencanaan anggaran, dan environment “sandbox” yang digunakan bersama sering kali tidak sepenuhnya terisolasi antar tim.
Hal ini memunculkan pertanyaan penting:
Bagaimana jika kita bisa mengembangkan dan menguji aplikasi berbasis AWS tanpa perlu menggunakan AWS itu sendiri?
Bagaimana jika kita dapat membuat S3 bucket, SQS queue, menjalankan Lambda, atau membangun seluruh arsitektur event-driven langsung di laptop kita, tanpa biaya, tanpa internet, dan tanpa kredensial AWS?
LocalStack - Simple tapi Membantu
LocalStack menyediakan cara untuk meniru berbagai layanan AWS secara lokal menggunakan Docker. Layanan seperti S3, SQS, DynamoDB, hingga Lambda dapat dijalankan dalam bentuk emulator, sehingga developer bisa melakukan pengembangan dan pengujian tanpa memerlukan akses langsung ke akun AWS. Pendekatan ini mengurangi biaya development, menghindari kebutuhan kredensial IAM, dan memungkinkan eksperimen dilakukan secara terisolasi di mesin lokal. Dengan begitu, workflow menjadi lebih sederhana dan cepat tanpa harus bergantung pada environment cloud atau konfigurasi infrastruktur perusahaan.
Pengembangan pun menjadi lebih fleksibel developer tetap dapat bekerja tanpa koneksi internet, dan seluruh setup bisa dilakukan dengan mudah hanya dengan menjalankan container.
services:
localstack:
image: localstack/localstack:latest
container_name: localstack
ports:
- "4566:4566"
environment:
- SERVICES=s3,sqs
- AWS_DEFAULT_REGION=ap-southeast-1
- DEBUG=1
volumes:
- "./localstack-data:/var/lib/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
Konfigurasi Docker Compose di atas digunakan untuk menjalankan LocalStack secara lokal. LocalStack memang menyediakan versi UI yang berbayar, tetapi seluruh fitur inti termasuk S3, SQS, Lambda emulator, dan berbagai layanan lainnya bisa diakses gratis melalui CLI. Karena itu, dalam penggunaan standar sehari-hari, CLI sudah lebih dari cukup dan tidak memerlukan lisensi tambahan.
Cukup jalankan perintah:
docker compose up -d # docker-compose up -d
dan LocalStack sudah berjalan di mesin lokal Anda dengan layanan seperti S3 dan SQS. Pertanyaannya, bagaimana cara mengakses dan memeriksa layanan tersebut sebagaimana menggunakan AWS CLI?
Anda tidak perlu menginstal AWS CLI sama sekali.
LocalStack menyediakan utilitas bawaan bernama awslocal, yang berfungsi sama seperti AWS CLI tetapi otomatis terhubung ke LocalStack. Untuk menggunakannya, cukup masuk ke dalam container melalui:
docker exec -it localstack bash
Setelah berada di dalam container, Anda dapat langsung menggunakan perintah-perintah AWS seperti biasa. Contohnya:
root@b17ece16258b:/opt/code/localstack# awslocal sqs list-queues
{
"QueueUrls": [
"http://sqs.ap-southeast-1.localhost.localstack.cloud:4566/000000000000/webhook-incoming"
]
}
root@b17ece16258b:/opt/code/localstack#
Jika belum ada atau belum terbuat, anda bisa buat queue baru;
awslocal sqs create-queue --queue-name test-queue
nantinya akan output seperti ini dan anda cukup lisitng apakah sudah dibuat atau belum.
root@b17ece16258b:/opt/code/localstack# awslocal sqs create-queue --queue-name test-queue
{
"QueueUrl": "http://sqs.ap-southeast-1.localhost.localstack.cloud:4566/000000000000/test-queue"
}
root@b17ece16258b:/opt/code/localstack# awslocal sqs list-queues
{
"QueueUrls": [
"http://sqs.ap-southeast-1.localhost.localstack.cloud:4566/000000000000/webhook-incoming",
"http://sqs.ap-southeast-1.localhost.localstack.cloud:4566/000000000000/test-queue"
]
}
Sama hal jika adan menggunakan s3, anda cukup bisa mengakses selayaknya AWSCLI cukup mengetik
awslocal s3 ls
Integrasi
untuk integrasi anda cukup override semua ENV di proyek yang akan anda kerjakan ke lokal, misal pengembangan SQS saya menggunakan seperti ini
type SQSConfig struct {
Endpoint string
Region string
}
func NewSQSClient(cfg SQSConfig) *sqs.Client {
awsCfg, err := config.LoadDefaultConfig(
context.Background(),
config.WithRegion(cfg.Region),
config.WithCredentialsProvider(
credentials.NewStaticCredentialsProvider("dummy", "dummy", ""),
),
config.WithEndpointResolver(aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
return aws.Endpoint{
URL: cfg.Endpoint,
SigningRegion: cfg.Region,
}, nil
})),
)
if err != nil {
panic(err)
}
return sqs.NewFromConfig(awsCfg)
}
dimana nantinya SQSConfig anda init dan set URL
ap-southeast-1
http://localhost:4566
Kesimpulan
LocalStack memberikan cara praktis untuk mengembangkan dan menguji aplikasi berbasis AWS tanpa harus menggunakan AWS secara langsung. Dengan meniru layanan seperti S3 dan SQS di lingkungan lokal, developer dapat bereksperimen tanpa biaya tambahan, tanpa kredensial IAM, dan tanpa bergantung pada koneksi internet. Proses setup pun sederhana cukup menjalankan docker-compose up -d, dan seluruh layanan sudah siap digunakan melalui awslocal di dalam container.