Membangun app delivery platform sebagai abstraksi tertinggi: buildpacks untuk build tanpa Dockerfile, app runners untuk deploy tanpa menyentuh Kubernetes, dan keputusan kapan PaaS tepat dipakai di platform

Setelah di episode 12 developer bisa meng-create service sendiri lewat portal, muncul pertanyaan lebih dalam: haruskah developer tahu apa itu Dockerfile, Deployment, atau HorizontalPodAutoscaler? Jika jawabannya "tidak", maka kita butuh lapisan abstraksi paling tinggi di platform: app delivery platform (PaaS) — di mana developer hanya membawa kode, dan platform mengurus sisanya.
Mengapa PaaS relevan di 2026? Karena platform engineering belajar dari kegagalan abstraksi sebelumnya: Kubernetes langsung untuk semua orang membuat banyak developer tenggelam dalam detail infrastruktur. PaaS di atas Kubernetes memberikan kembali kebebasan tanpa beban — gaya Heroku yang sudah terbukti, tetapi dengan kontrol dan portabilitas platform internal.
Gradasi abstraksi yang kita lihat sejak episode 3 kini mencapai puncaknya:
| Tingkat | Yang Diketahui Developer | Yang Disembunyikan |
|---|---|---|
| K8s langsung | Deployment, Service, HPA, PVC | — |
| Golden path + template | Template, tapi bisa melihat manifest | Sebagian detail |
| PaaS / app runner | Kode + score.yaml sederhana | Semua detail infra |
PaaS bukan menghilangkan Kubernetes — ia menempatkan Kubernetes di belakang antarmuka yang jauh lebih kecil. Platform team tetap memegang kendali; developer mendapat kebebasan.
Tahap build PaaS menggunakan buildpacks — mekanisme deteksi otomatis bahasa dan framework, lalu menghasilkan container image yang optimal tanpa developer menulis Dockerfile.
Cloud Native Buildpacks (CNB) adalah standar modern (memakai OCI image). Contoh kerja dengan pack:
pack build registry.example.com/payments-api:latest \
--builder paketobuildpacks/builder-jammy-base \
--env BP_NODE_RUN_SCRIPTS=buildYang terjadi di balik layar: buildpack mendeteksi package.json (atau pom.xml, go.mod, dst), memilih runtime, meng-compile, dan menghasilkan image yang otomatis aman (user non-root, image teroptimasi, cache layer yang efisien). Developer tidak perlu tahu base image mana yang benar.
Keuntungan platform: image dihasilkan dengan proses yang sama untuk semua bahasa — platform team bisa menjamin konsistensi, keamanan, dan update base image di satu tempat.
Di atas buildpacks ada app runner — lapisan yang menerima "specifikasi sederhana aplikasi" dan mengubahnya menjadi Kubernetes resource yang benar. Alat paling relevan di ekosistem CNCF: Kratos (dari Grafana Labs, di-akuisisi dan jadi bagian CNCF) dan standar Score.
Score adalah standar open-source untuk mendeskripsikan workload tanpa vendor lock-in. Developer menulis spec abstrak:
apiVersion: score.dev/v1b1
metadata:
name: payments-api
containers:
payments-api:
image: registry.example.com/payments-api:sha
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
service:
ports:
www:
port: 8080
type: LoadBalancer
resources:
db:
type: postgresSatu score.yaml bisa di-render ke berbagai target — Kubernetes, cloud PaaS, bahkan Docker Compose untuk lokal. Developer mendeskripsikan kebutuhan, bukan implementasi.
Kratos adalah app runner yang menerima ops (deklarasi) dan mengelola lifecycle lengkapnya di Kubernetes — termasuk:
kratos run -f score.yaml -o manifests/Perbedaan dengan manifest Kubernetes manual: developer tidak pernah menyentuh kind: Deployment, HPA, atau Service — semuanya di-generate dan dikelola runner. Ini yang membuat PaaS internal terasa seperti "Heroku di atas cluster kita sendiri".
Note
Pilihannya bukan "K8s manual" vs "PaaS" secara absolut. Pola yang paling sehat di 2026: default developer adalah PaaS (Score/Kratos), dan jalur K8s langsung tetap tersedia sebagai escape hatch untuk workload spesial (stateful, GPU, near-metal) — terdokumentasi dan di-review.
score.yaml sebagai bahasa bersama.App delivery platform adalah contoh paling jelas platform-as-a-product (episode 2): ia punya pengguna jelas (developer), SLO jelas (deploy time, success rate), dan roadmap jelas (fitur runner apa berikutnya). Pengukurannya langsung:
| Metrik | Target PaaS |
|---|---|
| Deploy-to-production time | < 10 menit |
| Deploy success rate | > 95% |
| % workload yang memakai PaaS | > 70% (selebihnya jalur khusus) |
| Support tickets per developer | Turun dari baseline manual |
Jika angka-angka ini tidak membaik setelah PaaS hadir, evaluasi desainnya — bukan hanya "sosialisasi lebih gencar".
Tip
Jangan pasang PaaS untuk semua workload sekaligus. Adopsi bertahap: pilih 3 tim yang workload-nya cocok (stateless, HTTP-based), buat mereka sebagai pilot, ukur, lalu perluas. PaaS yang dipaksakan ke semua jenis workload akan mati oleh pengecualian yang tak terhitung.
Inti yang harus dibawa pulang:
Di episode 14 selanjutnya kita melengkapi PaaS dengan salah satu kebutuhan paling sering diminta developer: data platform — managed databases, data services, dan self-service data yang membuat developer bisa dapat database tanpa tiket dan tanpa menjadi DBA!