Mekanisme unik Floci: real Docker integration via docker.sock sehingga task ECS dan instance RDS benar-benar dijalankan sebagai container — praktik menjalankan Postgres via RDS floci dengan app connect end-to-end

Sampai episode 11, semua layanan adalah implementasi in-process di JVM. Tapi bagaimana meniru RDS — database sungguhan dengan engine Postgres/MySQL? Atau ElastiCache yang memang Redis asli?
Jawaban Floci berbeda dari pendekatan mana pun sebelumnya: untuk layanan stateful berbasis infrastruktur, ia tidak meniru API saja — ia menjalankan container Docker sungguhan melalui docker socket, lalu mengelola lifecycle-nya via API AWS. Ini fitur paling unik di kelasnya.
Ingat volume ini dari compose episode 3:
services:
floci:
image: floci/floci:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sockAlurnya ketika kalian create-db-instance:
Konsekuensi desain ini:
postgres resmi; perilaku SQL 100% nyata, bukan tiruan.creating → available → deleting, snapshot, reboot: semuanya lewat API RDS.Warning
Mounting docker.sock memberi floci kontrol penuh atas Docker Engine host — kuat tapi sensitif. Di shared runner pertimbangkan mitigasi (episode 24 membahas keamanannya).
| Service | Yang Dijalankan | Use Case Uji |
|---|---|---|
| ECS | Task definition → container sesuai image & env | Orkestrasi job, service discovery lokal |
| RDS | Instance database (postgres/mysql) sebagai container | Integrasi ORM/migrasi/schema |
| ElastiCache | Cluster Redis/Memcached | Session cache, pub/sub, rate limiter |
Untuk ECS: register-task-definition + run-task memicu floci membuat container sesuai spec (image, port, environment) — berguna menguji definisi job sebelum deploy ke cluster sungguhan.
Target outline: jalankan Postgres via RDS floci + app connect end-to-end.
export AWS_ENDPOINT_URL=http://localhost:4566
aws rds create-db-instance \
--db-instance-identifier app-db \
--engine postgres \
--db-instance-class db.t3.micro \
--master-username dev --master-user-password devpass123 \
--allocated-storage 20
# tunggu sampai available - endpoint mengarah ke container postgres nyata
aws rds wait db-instance-available --db-instance-identifier app-db
aws rds describe-db-instances --db-instance-identifier app-db \
--query 'DBInstances[0].Endpoint.[Address,Port]' --output text
docker ps --format '{{.Names}} {{.Image}}' | grep -i postgres # bukti fisiknyaPerhatikan pola produksinya utuh: app tidak tahu database-nya berasal dari Docker — ia hanya membaca endpoint dari API RDS. Itu artinya kode konfigurasi yang sama persis dipakai saat pindah ke RDS sungguhan.
Tip
Bersihkan dengan delete-db-instance agar container postgres ikut dimatikan — atau biarkan persisten di compose dev untuk iterasi cepat.
Rangkuman episode ini:
create-db-instance, app Python connect end-to-end tanpa tahu ada Docker.Episode 13 naik level orkestrasi: Step Functions & EventBridge — state machine, event bus, pattern matching, scheduled events, dan saga order-processing lengkap. Sampai jumpa!