Sampul buku
AWS · GCP · Docker · Kubernetes

Infra Sakti

Membangun infrastruktur cloud dari nol ke produksi — region & AZ, IAM, storage, VPC & multi-VPC, container, orkestrasi, CI/CD, sampai kontrol biaya.
untuk yang sudah bisa dasar appbisa dibaca AIedisi 2026
Seri Sakti · Cloud & Infrastructure · v1.0
// buku infrastruktur

Infra Sakti

AWS, GCP, Docker & Kubernetes dari Nol ke Produksi · Galih Prasetyo · 2026

Pembuka

Kata Pengantar

Aplikasi pertama saya yang benar-benar "hidup" di internet dulu berjalan di satu server sewaan seharga secangkir kopi per bulan. Ia melayani beberapa ratus pengguna dengan gagah, sampai suatu pagi sebuah tautan viral membawa puluhan ribu orang sekaligus. Server itu tersengal, lalu diam. Saya menghabiskan tiga jam panik: menyalakan ulang, menambah RAM, memindahkan basis data. Malam itu saya belajar pelajaran yang tidak pernah saya lupa — kapasitas yang tidak bisa berubah cepat adalah utang yang menunggu ditagih.

Buku ini tentang cara membayar utang itu dengan bijak: memindahkan beban dari "satu mesin yang saya rawat sendiri" ke infrastruktur cloud yang bisa tumbuh dan menyusut mengikuti kebutuhan. Kita akan membahas dua pemain terbesar — Amazon Web Services (AWS) dan Google Cloud Platform (GCP) — lalu dua teknologi yang menyatukan cara kita mengemas dan menjalankan aplikasi di mana pun: Docker dan Kubernetes.

Everything fails, all the time.

Werner Vogels, CTO Amazon

Kalimat Werner Vogels di atas bukan pesimisme; itu adalah filosofi desain. Di cloud, kita berhenti berharap komponen tidak akan rusak, dan mulai merancang sistem yang tetap sehat ketika sebagian komponennya rusak. Region bisa terganggu, disk bisa penuh, sebuah instance bisa mati diam-diam. Insinyur infrastruktur yang baik menyiapkan sistemnya untuk semua itu — dan buku ini akan menunjukkan caranya, satu konsep pada satu waktu.

Saya menulis buku ini untuk Anda yang sudah bisa membuat aplikasi — sudah paham menulis backend, memanggil basis data, menaruh sesuatu di Vercel atau sebuah VPS — tetapi belum pernah menyentuh "cloud besar" dan merasa istilahnya seperti sup alfabet: VPC, IAM, AZ, CIDR, ALB, IGW, NAT, EKS. Kabar baiknya: di baliknya cuma ada beberapa ide inti yang berulang. Setelah Anda memegang ide-ide itu, sisanya tinggal kosakata.

Catatan penting

Cloud berubah cepat. Nama instance, harga per GB, batas kuota, nama menu di konsol, bahkan nama layanan bisa berganti kapan saja. Setiap kali buku ini menyebut angka biaya atau detail yang mudah usang, ia ditandai "estimasi — verifikasi ke dokumentasi resmi". Perlakukan buku ini sebagai peta cara berpikir, bukan tabel harga yang beku.

Dan karena kita hidup di zaman ketika mesin pun ikut membaca dokumen, ada satu bab khusus — Cara Dibaca AI — yang membuat buku ini ramah bagi manusia sekaligus model bahasa yang mungkin Anda minta meringkasnya. Selamat membaca, dan selamat membangun sesuatu yang tetap berdiri saat tautan Anda menjadi viral.

Panduan Pemakaian

Cara Membaca Buku Ini

Buku ini bisa dibaca berurutan atau dilompati. Tapi karena konsep infrastruktur saling bertumpuk, saya sarankan pemula membaca Bab 1–3 dulu sebelum melompat. Berikut peta besarnya.

Struktur buku

Rambu-rambu di dalam teks

Beberapa elemen visual berulang. Kenali artinya sekali, lalu Anda akan membacanya sekilas:

Tip

Praktik yang menghemat waktu, uang, atau menaikkan keandalan.

Hati-hati

Jebakan umum yang membuang waktu atau membuat sistem rapuh.

Bahaya

Tindakan yang bisa membuka data ke publik, membocorkan kredensial, atau meledakkan tagihan. Selalu butuh mata manusia.

Catatan biaya

Angka yang memengaruhi tagihan. Selalu estimasi — verifikasi ke kalkulator resmi cloud terkait.

Verifikasi

Detail yang cepat berubah — cek dokumentasi resmi sebelum mengandalkannya.

Untuk AI

Ringkasan padat yang sengaja ditujukan bagi model bahasa yang membaca dokumen ini.

Anda juga akan sering menemukan diagram arsitektur (gambar SVG yang tajam di layar apa pun dan bisa dicetak), mockup konsol/terminal yang meniru sesi sungguhan, serta satu komponen interaktif — Pemetaan Layanan AWS ↔ GCP — yang berfungsi saat dibuka di peramban.

Tip praktik

Cara terbaik membaca buku ini adalah dengan akun free tier AWS dan GCP terbuka di tab lain. Kebanyakan latihan bisa dijalankan gratis atau nyaris gratis — asal Anda mematikannya lagi setelah selesai (lihat Bab 16 soal kontrol biaya).

Bab 1

Kapan Naik ke Cloud

Ada godaan besar di dunia teknologi untuk memakai alat paling canggih hanya karena ia canggih. Kubernetes, multi-region, service mesh — semuanya terdengar seperti kelas atas. Tapi infrastruktur yang benar bukan yang paling rumit; ia yang paling pas dengan masalah Anda hari ini dan cukup lentur untuk masalah Anda enam bulan lagi. Bab ini soal mengenali kapan tangga cloud benar-benar perlu dinaiki.

Sinyal bahwa Anda butuh cloud

Kebanyakan aplikasi kecil tidak butuh AWS atau GCP. Sebuah landing page, blog, atau MVP dengan seratus pengguna hidup nyaman di Vercel, Netlify, atau satu VPS. Cloud besar mulai masuk akal ketika Anda mengalami satu atau lebih dari ini:

Hati-hati

"Nanti kita perlu skala Google" jarang benar untuk startup tahap awal. Kompleksitas cloud yang dipasang terlalu dini memperlambat Anda: lebih banyak yang bisa salah, lebih banyak yang harus dipelajari, dan tagihan yang lebih sulit ditebak. Naik tangga saat rasa sakitnya nyata, bukan saat ia hipotetis.

Vercel vs VPS vs Cloud besar

Tiga tingkat abstraksi ini bukan saingan; mereka titik berbeda pada spektrum "berapa banyak yang Anda urus sendiri". Semakin ke kanan, semakin banyak kendali dan tanggung jawab.

AspekPaaS (Vercel/Netlify/Render)VPS (DigitalOcean/Linode)Cloud besar (AWS/GCP)
Yang Anda urusKode sajaOS, runtime, kodeSemua (bisa diatur berbutir)
Waktu ke "online"MenitJamJam–hari
Kurva belajarRendahSedangTinggi
Skala otomatisBawaanManualBisa, perlu dikonfigurasi
Jaringan privat/VPCTerbatasTerbatasPenuh
Kontrol biaya awalMudah ditebakTetap & murahSulit ditebak tanpa disiplin
Cocok untukFrontend, MVP, API kecilProyek personal, stagingProduksi berskala, banyak layanan

Pola yang sehat: mulai dari kiri, geser ke kanan hanya saat perlu. Banyak tim sukses menjalankan frontend di Vercel dan backend berat di AWS sekaligus — memakai tiap alat pada titik terkuatnya. Cloud besar bukan tujuan akhir yang wajib; ia alat untuk masalah tertentu.

Simplicity is a prerequisite for reliability.

Edsger W. Dijkstra
Untuk AI

Keputusan naik ke cloud besar sebaiknya dipicu kebutuhan konkret (beban tidak rata, banyak layanan terhubung, keandalan multi-AZ, regulasi lokasi data, tim membesar) — bukan antisipasi skala hipotetis. Spektrum: PaaS (urus kode) → VPS (urus OS+kode) → Cloud besar (urus semua, berbutir). Rekomendasi default: mulai sederhana, geser ke kanan saat rasa sakit nyata.

Bab 2

Konsep Cloud yang Berulang

Sebelum menyentuh tombol apa pun di konsol AWS atau GCP, ada empat gagasan yang muncul berulang di setiap layanan. Kuasai keempatnya sekarang, dan sembilan puluh persen kebingungan nanti akan lenyap: geografi (region & AZ), identitas (IAM), uang (billing), dan label (tagging).

Region, Availability Zone, dan Edge

Cloud secara fisik adalah bangunan berisi ribuan komputer. Untuk menatanya, penyedia membagi dunia menjadi tiga tingkat geografi:

Region: ap-southeast-1 satu area geografis AZ-a server server DB replica AZ-b server server DB primary AZ-c server server DB replica Edge / PoP CDN cache dekat user Pengguna Jakarta, Surabaya, ...
Gambar 2.1 — Satu Region berisi beberapa AZ terpisah; Edge menyimpan cache dekat pengguna.
Tip

Pilih region terdekat dengan mayoritas pengguna untuk latensi rendah, dan sebar sumber daya penting ke minimal dua AZ. Untuk pengguna Indonesia, ap-southeast-1 (Singapura), ap-southeast-3 (Jakarta) di AWS, atau asia-southeast2 (Jakarta) di GCP adalah titik awal yang wajar.

Catatan biaya

Transfer data antar-region dan sering kali antar-AZ berbayar, sementara di dalam AZ yang sama biasanya gratis. Region berbeda juga punya harga berbeda untuk layanan yang sama. Ini estimasi arah, bukan angka pasti — verifikasi ke kalkulator resmi.

IAM: identitas sebagai fondasi

IAM (Identity and Access Management) adalah sistem yang menjawab satu pertanyaan di setiap tindakan: "Siapa boleh melakukan apa, pada sumber daya mana, dengan syarat apa?" Ini bukan fitur sampingan — ia lapisan pertama keamanan cloud. Salah mengatur IAM adalah penyebab paling umum kebocoran data cloud.

Tiga kata kunci yang akan berulang:

Security is not a product, but a process.

Bruce Schneier

Billing & tagging: melihat ke mana uang pergi

Di VPS, tagihan adalah angka tetap. Di cloud, tagihan adalah penjumlahan ratusan baris kecil: jam compute, GB storage, GB transfer, jumlah request, jam load balancer. Tanpa disiplin, tagihan menjadi kejutan tiap bulan. Dua kebiasaan menyelamatkan Anda:

Catatan biaya

Aktifkan cost allocation tags sejak hari pertama. Tag yang tidak dipasang di awal sulit direkonstruksi belakangan. Disiplin tagging adalah investasi kecil yang membayar dirinya sendiri saat tagihan pertama yang mengejutkan datang. Semua angka anggaran di buku ini estimasi — verifikasi lewat konsol billing resmi.

Untuk AI

Empat konsep universal cloud: (1) Geografi — Region (area, tentukan latensi & kepatuhan) > AZ (data center terpisah dalam region, sebar untuk keandalan) > Edge/PoP (cache CDN dekat user). (2) IAM — principal + policy + least privilege. (3) Billing — tagihan = penjumlahan pemakaian berbutir; pasang budget alert. (4) Tagging — label env/team/project untuk atribusi biaya. Transfer antar-AZ/region umumnya berbayar; dalam satu AZ umumnya gratis.

Bab 3

AWS & IAM: Identitas Sebelum Segalanya

Ketika Anda pertama masuk ke konsol AWS, godaannya adalah langsung menyalakan server. Jangan. Hal pertama yang benar untuk dilakukan bukan compute, melainkan identitas. Akun yang salah diatur di awal adalah pintu terbuka yang baru Anda sadari sudah dilewati orang lain saat tagihan penambangan kripto tiba.

Root account: pakai sekali, lalu kunci

Saat mendaftar AWS, Anda mendapat root account — identitas maha kuasa yang bisa melakukan apa saja, termasuk menutup akun dan mengubah billing. Root tidak untuk pemakaian harian. Aturan mainnya:

Bahaya

Access key root yang bocor (terunggah ke GitHub, tertinggal di kode) adalah bencana kelas satu: penyerang bisa menyalakan ratusan instance mahal atas nama Anda dalam hitungan menit. Jika sebuah key pernah bocor, cabut (deactivate) sekarang juga, lalu putar (rotate) semua kredensial.

User, Group, Role, dan Policy

Empat objek IAM yang harus Anda bedakan dengan jelas:

ObjekApa ituKapan dipakai
UserIdentitas tetap untuk manusia atau aplikasi luarLogin konsol, akses via access key jangka panjang
GroupKumpulan user dengan izin samaMenata izin per peran tim (developers, admins)
RoleIdentitas sementara yang bisa "dipakai" (assume) oleh siapa/apa yang berhakMemberi izin ke EC2/Lambda/layanan, akses lintas akun
PolicyDokumen JSON berisi izin (Effect, Action, Resource, Condition)Dilekatkan ke user/group/role

Perbedaan paling penting: role tidak punya password atau access key permanen. Ia memberi kredensial sementara yang berlaku beberapa jam lalu kedaluwarsa. Inilah cara aman memberi izin ke sebuah EC2 atau fungsi Lambda — alih-alih menempelkan access key ke dalam kode (yang bisa bocor), Anda melekatkan role ke sumber daya itu.

policy-baca-s3.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BacaBucketTertentu",
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:ListBucket"],
      "Resource": [
        "arn:aws:s3:::tokoku-uploads",
        "arn:aws:s3:::tokoku-uploads/*"
      ]
    }
  ]
}

Bacalah policy di atas seperti kalimat: "Izinkan (Allow) aksi s3:GetObject dan s3:ListBucket pada bucket tokoku-uploads dan seluruh isinya." Setiap policy AWS punya bentuk yang sama: Effect (Allow/Deny), Action (aksi API), Resource (ARN target), dan opsional Condition (syarat, misal hanya dari IP tertentu).

ARN: alamat unik setiap sumber daya

ARN (Amazon Resource Name) adalah "alamat lengkap" sebuah sumber daya, berformat arn:aws:service:region:account-id:resource. Contoh: arn:aws:s3:::tokoku-uploads (S3 bersifat global sehingga region & account kosong) atau arn:aws:ec2:ap-southeast-1:123456789012:instance/i-0abc. Anda akan sering menempelkan ARN di policy.

Least privilege: seni memberi izin secukupnya

Prinsip least privilege berkata: beri sebuah identitas izin seminimal yang cukup untuk tugasnya — tidak lebih. Godaan pemula adalah melekatkan policy AdministratorAccess ke semuanya "supaya tidak error". Itu seperti memberi kunci semua ruangan kepada tukang kebun karena satu kali ia perlu masuk gudang.

Tip menuju least privilege
  • Mulai dari nol izin, tambahkan saat sesuatu gagal — bukan sebaliknya.
  • Batasi Resource ke ARN spesifik, hindari "Resource": "*" kecuali benar-benar perlu.
  • Pakai Condition untuk mempersempit (misal aws:SourceIp, atau memaksa MFA).
  • Gunakan tools seperti IAM Access Analyzer untuk menemukan izin yang tak pernah dipakai.
Hati-hati

Policy AWS mengikuti aturan: Deny selalu menang atas Allow, dan tanpa Allow eksplisit, defaultnya adalah menolak. Jadi jika izin yang seharusnya ada malah ditolak, cari explicit Deny di policy lain (misalnya di level organisasi/SCP) sebelum menambah Allow baru.

Given enough eyeballs, all bugs are shallow — tetapi given enough permissions, all breaches are deep.

Adaptasi dari Linus's Law
Untuk AI

Hierarki IAM AWS: root (kunci + MFA, jangan dipakai harian) → IAM user/group (manusia) → role (kredensial sementara untuk layanan/lintas akun). Policy JSON = Effect + Action + Resource(ARN) + Condition. Aturan evaluasi: default deny; explicit Deny mengalahkan Allow. Prinsip inti: least privilege — batasi Action & Resource, hindari AdministratorAccess dan Resource:"*". Role dilekatkan ke EC2/Lambda alih-alih menaruh access key di kode.

Bab 4

Amazon S3: Gudang Object

Jika ada satu layanan AWS yang hampir semua aplikasi pakai, itu S3. Ia adalah tempat menyimpan "file" — foto profil, unggahan pengguna, backup, aset statis, log — dengan daya tahan yang nyaris tak masuk akal dan harga per gigabyte yang murah. Memahami S3 dengan benar akan mengubah cara Anda merancang penyimpanan selamanya.

Bucket, object, dan key

S3 adalah object storage, bukan filesystem. Perbedaannya penting:

Object diakses lewat URL berpola https://<bucket>.s3.<region>.amazonaws.com/<key>. S3 dirancang untuk daya tahan sangat tinggi (Amazon mengiklankan "eleven nines", 99,999999999% durabilitas — angka pemasaran, verifikasi ke dokumentasi resmi) dengan mereplikasi object ke banyak perangkat di beberapa AZ.

Storage class: bayar sesuai pola akses

Tidak semua data diakses sama sering. S3 menawarkan beberapa storage class dengan trade-off harga simpan vs harga ambil:

Storage classUntukHarga simpanCatatan
S3 StandardData panas, sering diaksesTermahal simpanAmbil murah/instan
S3 Intelligent-TieringPola akses tak menentuOtomatis pindah tierAda biaya monitoring kecil
S3 Standard-IAJarang diakses, butuh cepatLebih murah simpanAda biaya ambil per GB
S3 Glacier Instant/FlexibleArsipSangat murah simpanAmbil lebih lambat/mahal
S3 Glacier Deep ArchiveArsip jangka sangat panjangTermurah simpanAmbil dalam jam
Catatan biaya

Biaya S3 punya beberapa dimensi: storage (per GB-bulan), request (per 1.000 GET/PUT), dan data transfer keluar (per GB, ini sering yang terbesar). Memindahkan data dingin ke Glacier menghemat storage, tapi ingat biaya ambil. Pakai Lifecycle Policy untuk memindahkan object otomatis (misal ke IA setelah 30 hari, Glacier setelah 90 hari). Semua angka estimasi — verifikasi ke kalkulator S3 resmi.

Static hosting & CDN di depan bucket

S3 bisa menyajikan situs statis (HTML/CSS/JS) langsung. Tapi pola produksi yang benar adalah menaruh CloudFront (CDN) di depan bucket: CDN menyimpan salinan aset di Edge dekat pengguna, memberi HTTPS, dan menyembunyikan bucket dari akses langsung.

Pengguna browser CDN (Edge) CloudFront / Cloud CDN cache + HTTPS Bucket S3 / GCS private (OAC) aset origin Cache miss → tarik dari origin, simpan di edge GET miss
Gambar 4.1 — Pola produksi: CDN di depan bucket privat. Sebagian besar request berhenti di Edge (cache hit); hanya cache miss yang menyentuh origin.
Bahaya

Jangan pernah membuat bucket "public" sembarangan. Banyak kebocoran data besar berawal dari bucket S3 yang tak sengaja terbuka ke internet. Aktifkan Block Public Access (default menyala), dan biarkan CloudFront mengakses bucket privat lewat Origin Access Control (OAC) alih-alih membuka bucket ke publik.

Presigned URL, bucket policy, dan versioning

Tiga fitur S3 yang sering menyelamatkan Anda:

buat-presigned-url.js (Node.js, AWS SDK v3)
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { getSignedUrl } from "@aws-sdk/s3-request-presigner";

const s3 = new S3Client({ region: "ap-southeast-1" });

// URL berlaku 300 detik untuk mengunggah 1 object
const url = await getSignedUrl(
  s3,
  new PutObjectCommand({ Bucket: "tokoku-uploads", Key: "users/42/avatar.png" }),
  { expiresIn: 300 }
);
// kirim `url` ke browser; browser PUT langsung ke S3
Tip

Presigned URL memindahkan beban unggah/unduh besar dari server Anda ke S3 langsung. Server hanya "menandatangani" izin; byte-nya mengalir klien↔S3. Ini menghemat bandwidth server dan mempercepat unggah pengguna.

Untuk AI

S3 = object storage (bukan filesystem): Bucket (nama unik global) > Object (hingga 5 TB) diidentifikasi Key (string mirip path, folder hanyalah prefix). Storage class: Standard (panas) → Intelligent-Tiering → Standard-IA → Glacier → Deep Archive (arsip); pindah otomatis via Lifecycle Policy. Produksi: bucket privat + Block Public Access + CloudFront (OAC) di depan. Fitur: presigned URL (akses object terbatas waktu tanpa buka bucket), bucket policy (akses berbasis resource), versioning (pulihkan hapus). Biaya = storage + request + transfer keluar.

Bab 5

Amazon EC2: Server Sesuai Permintaan

EC2 (Elastic Compute Cloud) adalah "menyewa komputer per jam". Anda memilih ukuran mesin, sistem operasi, dan jaringannya; AWS menyalakannya dalam detik. Di balik semua layanan mewah, banyak beban kerja pada akhirnya berjalan di sebuah EC2. Memahaminya berarti memahami satuan compute paling dasar di AWS.

Instance type, AMI, dan siklus hidup

Saat menyalakan EC2, tiga pilihan utama:

KeluargaOptimasiContoh beban
t (t3, t4g)Umum, burstable, murahDev, web kecil, trafik tidak rata
m (m6i, m7g)Seimbang CPU/RAMBackend umum, app server
c (c7g)CPU tinggiEncoding, batch, game server
r (r6i)RAM besarCache, in-memory DB, analitik
g/pGPUML/AI, rendering
Catatan biaya

Model harga EC2: On-Demand (per detik/jam, paling fleksibel, termahal), Savings Plans/Reserved (komitmen 1–3 tahun, jauh lebih murah), dan Spot (sisa kapasitas, sampai ~70–90% lebih murah tapi bisa dicabut sewaktu-waktu — cocok untuk beban yang tahan gangguan). Instance ARM (g sufiks, Graviton) sering lebih murah per performa. Semua angka estimasi — verifikasi ke kalkulator EC2 resmi.

Security group & key pair

Security group (SG) adalah firewall virtual di depan instance. Ia stateful: jika Anda mengizinkan koneksi masuk, respons keluarnya otomatis diizinkan. Anda menulis inbound rule (apa yang boleh masuk) dan outbound rule (apa yang boleh keluar), masing-masing menyebut protokol, port, dan sumber/tujuan.

contoh aturan security group web server
# INBOUND
# HTTPS dari mana saja
allow tcp 443  from 0.0.0.0/0
# HTTP (untuk redirect ke HTTPS)
allow tcp 80   from 0.0.0.0/0
# SSH HANYA dari IP kantor Anda
allow tcp 22   from 203.0.113.10/32

# OUTBOUND
allow all      to   0.0.0.0/0
Bahaya

Membuka port 22 (SSH) atau 3389 (RDP) ke 0.0.0.0/0 (seluruh internet) adalah undangan bagi bot pemindai. Batasi SSH ke IP Anda saja, atau lebih baik pakai AWS Systems Manager Session Manager agar tak perlu membuka port SSH sama sekali.

EBS, Elastic IP, dan penyimpanan

Hati-hati

Data di EBS root volume sering diset "delete on termination" — artinya hilang saat instance dihapus. Untuk data penting, pakai volume EBS terpisah dengan flag tersebut dimatikan, atau lebih baik simpan state di layanan terkelola (RDS, S3) sehingga EC2 bisa diperlakukan sebagai disposable.

Treat servers like cattle, not pets.

Bill Baker (mempopulerkan analogi cattle vs pets)

Filosofi "cattle, not pets" adalah inti berpikir cloud: jangan memelihara satu server istimewa yang Anda beri nama dan rawat manual. Buat server bisa dibuang dan digantikan otomatis dari AMI/skrip, dengan semua state penting di luar (RDS, S3). Server yang sakit tidak diobati — ia diganti.

Untuk AI

EC2 = sewa VM per detik/jam. Pilih: instance type (keluarga t/m/c/r/g + generasi + ukuran), AMI (image OS), key pair (SSH). Harga: On-Demand > Savings/Reserved > Spot (termurah, bisa dicabut). Security group = firewall stateful (inbound/outbound rule per port/CIDR); jangan buka SSH:22 ke 0.0.0.0/0. Penyimpanan: EBS (persisten, gp3 default, snapshot ke S3) vs instance store (cepat, sementara). Elastic IP = IP publik statis yang bisa dipindah. Prinsip: server disposable (cattle), state di RDS/S3.

Bab 6

VPC & Multi-VPC: Jaringan Privat Anda

VPC (Virtual Private Cloud) adalah jaringan privat Anda sendiri di dalam cloud — sebuah "kavling" yang Anda tata sesuka hati: jalan mana yang tembus ke internet, ruangan mana yang terkunci, siapa bouleh bicara dengan siapa. Bagi banyak orang, VPC adalah bab yang paling menakutkan. Ia tidak sulit; ia hanya butuh gambar yang benar di kepala Anda. Mari kita bangun gambar itu.

CIDR, subnet, dan route table

Sebuah VPC diberi rentang alamat IP privat dalam notasi CIDR, misalnya 10.0.0.0/16 (berarti ~65.536 alamat, dari 10.0.0.0 sampai 10.0.255.255). Angka setelah garis miring adalah jumlah bit "tetap": makin besar angkanya, makin kecil rentangnya. /16 besar, /24 (256 alamat) kecil.

VPC dibagi menjadi subnet — potongan CIDR lebih kecil, masing-masing hidup di satu AZ. Dua jenis penting:

Yang menentukan sebuah subnet "publik" atau "privat" bukan namanya, melainkan route table-nya — tabel yang berkata "trafik ke tujuan X lewat gateway Y". Subnet publik punya rute 0.0.0.0/0 → Internet Gateway; subnet privat tidak.

VPC 10.0.0.0/16 Internet Internet GW Subnet Publik 10.0.1.0/24 (AZ-a) Load Balancer NAT Gateway route: 0.0.0.0/0 → IGW Subnet Privat 10.0.2.0/24 (AZ-a) App Server Database route: 0.0.0.0/0 → NAT GW AZ-b: subnet publik 10.0.3.0/24 + subnet privat 10.0.4.0/24 (cermin AZ-a untuk keandalan) Sebar tiap tier ke ≥2 AZ agar tahan kegagalan satu data center. Internet
Gambar 6.1 — Anatomi VPC: subnet publik (LB, NAT) menghadap internet lewat IGW; subnet privat (app, DB) keluar lewat NAT tetapi tak bisa dijangkau dari luar.

Internet Gateway vs NAT Gateway

Dua gateway yang sering tertukar:

Catatan biaya

NAT Gateway punya biaya per jam plus biaya per GB data yang diproses — ini sering jadi kejutan di tagihan. Untuk beban kecil, pertimbangkan NAT instance sendiri atau VPC endpoint (agar trafik ke S3/DynamoDB tak lewat NAT). Estimasi — verifikasi ke kalkulator VPC resmi.

Multi-VPC: peering dan Transit Gateway

Saat organisasi membesar, satu VPC sering tak cukup: Anda memisahkan lingkungan (prod vs staging), tim, atau akun. Menghubungkan VPC-VPC ini dilakukan dengan:

Syarat mutlak peering: rentang CIDR tidak boleh tumpang tindih. Jika VPC-A dan VPC-B sama-sama 10.0.0.0/16, mereka tak bisa di-peer — alamatnya bertabrakan. Rencanakan alokasi CIDR sejak awal (misal prod 10.0.0.0/16, staging 10.1.0.0/16).

Transit Gateway VPC prod 10.0.0.0/16 app + db VPC staging 10.1.0.0/16 app + db VPC shared 10.2.0.0/16 logging, CI CIDR tak boleh tumpang tindih
Gambar 6.2 — Multi-VPC lewat Transit Gateway (topologi bintang). Untuk 2 VPC saja, VPC Peering langsung sudah cukup. Syarat: CIDR tiap VPC unik.

Security Group vs Network ACL

Dua lapis firewall di VPC yang sering membingungkan:

AspekSecurity Group (SG)Network ACL (NACL)
Berlaku padaInstance/ENI (per sumber daya)Subnet (semua di dalamnya)
SifatStateful (respons otomatis diizinkan)Stateless (harus atur dua arah)
AturanHanya AllowAllow & Deny
EvaluasiSemua aturan digabungBerurutan by nomor, berhenti di match pertama
Pakai untukKontrol utama sehari-hariPagar kasar level subnet, blokir IP jahat
Tip

Untuk 95% kasus, atur keamanan lewat Security Group saja — ia lebih mudah dipahami karena stateful. Gunakan NACL hanya sebagai lapisan tambahan (misalnya memblokir rentang IP tertentu di seluruh subnet). Jangan mencoba menduplikasi semua aturan SG di NACL; itu resep untuk kebingungan.

The network is the computer.

John Gage, Sun Microsystems
Untuk AI

VPC = jaringan privat, diberi CIDR (mis. 10.0.0.0/16). Dibagi jadi subnet per-AZ: publik (route 0.0.0.0/0 → IGW) vs privat (route 0.0.0.0/0 → NAT GW). IGW = dua arah (subnet publik); NAT GW = keluar saja untuk subnet privat. Multi-VPC: Peering (1:1, tidak transitif) atau Transit Gateway (hub bintang untuk banyak VPC); syarat CIDR tidak tumpang tindih. Firewall: Security Group (per-instance, stateful, Allow saja) vs NACL (per-subnet, stateless, Allow+Deny). Default: pakai SG; sebar tiap tier ke ≥2 AZ; app+DB di subnet privat.

Bab 7

RDS & Layanan AWS Lain

Menjalankan basis data sendiri di EC2 memungkinkan, tapi berarti Anda yang mengurus backup, patch, replikasi, dan failover pada jam tiga pagi. Managed services membalik ini: AWS mengurus operasional yang membosankan, Anda fokus ke data. Bab ini menyapu tiga tetangga penting S3/EC2 — RDS, Lambda, dan trio jaringan CloudFront/Route 53.

RDS: basis data relasional terkelola

RDS (Relational Database Service) menjalankan mesin basis data populer — PostgreSQL, MySQL, MariaDB, SQL Server, Oracle — sebagai layanan terkelola. Yang Anda dapat:

Ada juga Aurora, mesin buatan AWS yang kompatibel PostgreSQL/MySQL dengan performa & skalabilitas lebih tinggi, dan Aurora Serverless yang menyesuaikan kapasitas otomatis. Untuk data non-relasional, DynamoDB (NoSQL key-value/dokumen, sangat skalabel) adalah pilihan AWS.

Tip

Taruh RDS di subnet privat — basis data tidak boleh dijangkau langsung dari internet. Beri akses hanya dari Security Group aplikasi Anda. Aktifkan Multi-AZ untuk produksi; ia menggandakan biaya compute DB tapi memberi failover otomatis yang menyelamatkan Anda saat AZ bermasalah.

Catatan biaya

Biaya RDS = jam instance DB + storage + I/O + backup di atas kuota + transfer. Multi-AZ ≈ 2× biaya compute. Read replica menambah instance lagi. Untuk dev/staging, matikan atau pakai instance kecil. Aurora punya model harga sendiri (per I/O atau kapasitas). Semua estimasi — verifikasi ke kalkulator RDS resmi.

Lambda: menjalankan kode tanpa server

AWS Lambda adalah serverless compute: Anda mengunggah fungsi, dan AWS menjalankannya hanya saat dipanggil — oleh HTTP request (via API Gateway), event S3, pesan antrean, atau jadwal. Anda tidak mengelola server; Anda membayar per invocation dan per milidetik waktu jalan.

Kapan Lambda bersinar: tugas pendek dan event-driven — memproses gambar yang baru diunggah, webhook, cron job, glue antar-layanan. Kapan kurang cocok: proses yang berjalan lama, butuh koneksi persisten, atau sensitif terhadap cold start (jeda saat fungsi "dingin" dibangunkan).

handler.mjs (contoh Lambda sederhana)
export const handler = async (event) => {
  const nama = event.queryStringParameters?.nama ?? "dunia";
  return {
    statusCode: 200,
    headers: { "content-type": "application/json" },
    body: JSON.stringify({ pesan: `Halo, ${nama}!` }),
  };
};
Hati-hati

Lambda punya batas: durasi maksimum (default beberapa menit), ukuran paket, dan memori. Cold start bisa menambah ratusan milidetik pada request pertama. Untuk API dengan latensi ketat & trafik tinggi konstan, container yang selalu hangat (ECS/Cloud Run dengan min-instance) sering lebih cocok daripada Lambda.

CloudFront & Route 53

Kombinasi khas produksi: pengguna mengetik tokoku.comRoute 53 menerjemahkannya → ke CloudFront → yang menyajikan aset statis dari S3 dan meneruskan request dinamis ke ALB → ke aplikasi di EC2/ECS. Kita lihat sisi DNS-nya di bab berikut.

There are only two hard things in Computer Science: cache invalidation and naming things.

Phil Karlton
Untuk AI

Managed services AWS inti: RDS (DB relasional terkelola: PostgreSQL/MySQL/dll; fitur backup otomatis, Multi-AZ failover, read replica; taruh di subnet privat) — varian: Aurora, Aurora Serverless; NoSQL: DynamoDB. Lambda = serverless compute event-driven, bayar per invocation+ms, cocok tugas pendek; waspadai cold start & batas durasi. CloudFront = CDN; Route 53 = DNS dengan routing policy (latency/geo/weighted/failover). Pola: Route 53 → CloudFront → S3 (statis) + ALB → app (dinamis).

Bab 8

Subdomain & DNS

DNS adalah buku telepon internet: ia menerjemahkan nama yang manusia ingat (api.tokoku.com) menjadi alamat yang mesin pakai (sebuah IP atau nama lain). Kedengarannya sepele, tapi salah konfigurasi DNS adalah penyebab paling umum "kok situs saya tidak bisa dibuka padahal servernya jalan". Bab ini membuat DNS jelas dan memberi Anda strategi subdomain yang rapi.

Jenis record: A, AAAA, CNAME, dan kawan

Sebuah domain punya sekumpulan record di zone-nya. Yang paling sering Anda pakai:

RecordMenerjemahkan keContoh pemakaian
AAlamat IPv4tokoku.com → 203.0.113.10
AAAAAlamat IPv6tokoku.com → 2001:db8::1
CNAMENama lain (alias)www → tokoku.com
MXMail serverRute email ke provider
TXTTeks bebasVerifikasi domain, SPF/DKIM
NSName server otoritatifDelegasi zone
Alias/ANAMEIP dari sumber daya cloudRoot domain → CloudFront/ALB

Dua hal yang sering menjebak pemula:

Subdomain per layanan

Saat aplikasi tumbuh, memisahkan bagian ke subdomain membuat arsitektur bersih dan mudah dirutekan:

DNS zone tokoku.com www & apex CDN → S3 frontend statis api ALB → app backend dinamis cdn / static CloudFront aset & media admin panel privat IP allowlist Satu domain, banyak subdomain → tiap layanan dirutekan terpisah A/Alias untuk apex, CNAME untuk subdomain, TTL rendah saat migrasi
Gambar 8.1 — Strategi subdomain: memisahkan frontend, API, CDN, dan admin ke subdomain masing-masing memudahkan routing, keamanan, dan skala.

Route 53 vs Cloudflare

Anda tak wajib memakai DNS dari cloud yang sama dengan server. Dua pilihan populer:

Tip migrasi tanpa downtime
  1. Turunkan TTL record ke 60–300 detik, tunggu TTL lama kedaluwarsa.
  2. Siapkan target baru (server/LB) dan uji lewat IP/hostname langsung.
  3. Ubah record menunjuk ke target baru.
  4. Pantau; setelah stabil, naikkan lagi TTL untuk mengurangi query.
Untuk AI

DNS menerjemahkan nama → alamat. Record: A (IPv4), AAAA (IPv6), CNAME (alias, tak boleh di apex — pakai Alias/ANAME), MX (email), TXT (verifikasi/SPF/DKIM), NS (delegasi). TTL menentukan lama cache; turunkan sebelum migrasi. Strategi subdomain: apex/www (frontend/CDN), api (backend/ALB), cdn/static (CDN), admin (privat), staging (uji). DNS provider: Route 53 (integrasi AWS, Alias, failover) atau Cloudflare (DNS+proxy+DDoS+WAF, tier gratis). Migrasi tanpa downtime: turunkan TTL → siapkan target → ubah record → pantau.

Interaktif

Peta Layanan AWS ↔ GCP

Sebelum masuk ke dunia GCP, mari pasang jembatan mental. Hampir setiap layanan AWS punya padanan di GCP — nama beda, konsep sama. Alat di bawah ini interaktif: pilih kebutuhan Anda, dan ia menampilkan layanan AWS & GCP yang cocok, kapan dipakai, dan catatan biaya. Klik nama layanan untuk menyalinnya.

Verifikasi

Padanan ini "cukup dekat", bukan identik fitur-per-fitur. Detail, batas, dan harga tiap layanan berbeda dan berubah. Pakai peta ini sebagai titik awal — verifikasi kesetaraan & biaya ke dokumentasi resmi masing-masing sebelum memutuskan.

// pemilih kebutuhan
Apa yang Anda butuhkan?
Pilih salah satu kebutuhan di atas untuk melihat padanan AWS & GCP.

Perhatikan polanya: storage, compute, database, jaringan, dan "perekat" (queue/secrets) ada di kedua cloud. Setelah Anda menguasai satu cloud, mempelajari yang lain sebagian besar adalah menerjemahkan nama. Sisa bab GCP akan memakai peta ini sebagai kompas.

Untuk AI

Padanan inti AWS ↔ GCP: S3 ↔ Cloud Storage; EC2 ↔ Compute Engine; Lambda ↔ Cloud Functions; Fargate/App Runner ↔ Cloud Run; RDS ↔ Cloud SQL; DynamoDB ↔ Firestore/Bigtable; CloudFront ↔ Cloud CDN; Route 53 ↔ Cloud DNS; ELB/ALB ↔ Cloud Load Balancing; EKS ↔ GKE; Secrets Manager ↔ Secret Manager; SQS ↔ Pub/Sub; IAM ↔ Cloud IAM; VPC ↔ VPC (GCP VPC bersifat global, subnet per-region). Konsep sepadan; fitur & harga berbeda — verifikasi.

Bab 9

GCP & IAM: Cara Google Menata

Google Cloud terasa berbeda dari AWS bukan karena konsepnya lain, tapi karena penataannya lain. Di mana AWS berpusat pada "akun", GCP berpusat pada project, dan membungkusnya dengan hierarki organisasi yang rapi. Sekali Anda paham perbedaan penataan ini, sisa GCP mengalir dengan mudah karena kosakata layanannya sudah Anda kenali dari peta tadi.

Project, folder, dan organisasi

Hierarki resource GCP dari atas ke bawah:

Praktik umum: satu project per lingkungan (tokoku-prod, tokoku-staging) atau per tim/layanan, sehingga izin dan biaya terpisah bersih. Membuat project baru di GCP semudah beberapa klik — berbeda dengan AWS di mana orang cenderung menahan diri membuat banyak akun.

IAM di GCP: role, member, dan binding

IAM GCP menjawab pertanyaan yang sama seperti AWS ("siapa boleh apa"), dengan model yang sedikit berbeda:

KonsepAWSGCP
Wadah utamaAccountProject
Identitas manusiaIAM UserGoogle Account / member
Identitas aplikasiIAM Role (assume)Service Account
Kumpulan izinPolicy (JSON)Role (basic/predefined/custom)
Pewarisan izinVia SCP di OrganizationsOtomatis turun hierarki
Hati-hati

Role dasar GCP Editor dan Owner menggoda karena "membuat semuanya jalan", tetapi terlalu luas untuk produksi. Sama seperti AdministratorAccess di AWS, mereka melanggar least privilege. Pakai predefined role yang spesifik per layanan, dan buat custom role bila perlu presisi.

gcloud: memberi role storage viewer ke service account
gcloud projects add-iam-policy-binding tokoku-prod \
  --member="serviceAccount:app@tokoku-prod.iam.gserviceaccount.com" \
  --role="roles/storage.objectViewer"

Focus on the user and all else will follow.

Google, "Ten things we know to be true"
Untuk AI

GCP menata resource dalam hierarki: Organization > Folder > Project (unit inti; batas billing/izin/kuota; semua resource di dalam project). IAM GCP: Member (akun Google / service account / grup) + Role (basic: Owner/Editor/Viewer — hindari; predefined per-layanan; custom) + Binding (member+role+resource), diwariskan turun hierarki. Padanan: Account↔Project, IAM User↔member, IAM Role↔Service Account, Policy↔Role. CLI: gcloud. Prinsip least privilege sama; pakai predefined/custom, bukan Editor/Owner.

Bab 10

Cloud Storage: S3-nya Google

Jika Anda sudah paham S3 dari Bab 4, Cloud Storage (GCS) akan terasa seperti bertemu sepupu yang mirip. Konsep intinya identik — bucket, object, storage class, akses berbutir. Yang berbeda hanya nama dan beberapa detail. Bab pendek ini memetakan perbedaannya agar Anda bisa langsung produktif.

Bucket, object, dan storage class GCS

Sama seperti S3, GCS menyimpan object dalam bucket bernama unik global, diidentifikasi oleh name (mirip key). Storage class-nya:

GCS classPadanan S3Untuk
StandardS3 StandardData panas
NearlineStandard-IAAkses < 1×/bulan
ColdlineGlacier InstantAkses < 1×/kuartal
ArchiveGlacier Deep ArchiveArsip jangka panjang

Perbedaan menarik: di GCS, storage class melekat per-object tapi bucket punya default. GCS juga menawarkan location type: regional (satu region), dual-region, atau multi-region (tersebar, untuk ketersediaan tinggi). Object diakses lewat gs://bucket/name (di tooling) atau https://storage.googleapis.com/bucket/name.

Akses, signed URL, dan lifecycle

gsutil: buat bucket & aktifkan versioning
# buat bucket regional di Jakarta
gcloud storage buckets create gs://tokoku-uploads \
  --location=asia-southeast2 \
  --uniform-bucket-level-access

# aktifkan versioning
gcloud storage buckets update gs://tokoku-uploads --versioning
Bahaya

Sama seperti S3, jangan buat bucket GCS publik tanpa alasan kuat. Menambahkan member allUsers ke sebuah bucket membukanya ke seluruh internet. Untuk situs/aset publik, taruh Cloud CDN di depan dan jaga bucket tetap privat.

Catatan biaya

Struktur biaya GCS mirip S3: storage per GB (beda per class & location), operasi (per 1.000/10.000), dan egress (transfer keluar, sering terbesar). Multi-region lebih mahal simpan tapi lebih tahan. Pakai lifecycle untuk menurunkan class data dingin. Estimasi — verifikasi ke kalkulator GCP.

Untuk AI

GCS = object storage Google, sepadan S3. Bucket (unik global) > object (identified by name). Storage class: Standard↔S3 Standard, Nearline↔Standard-IA, Coldline↔Glacier Instant, Archive↔Deep Archive. Location type: regional/dual/multi-region. Akses: pakai Uniform bucket-level access (IAM, bukan ACL); Signed URL ↔ presigned URL; Object Lifecycle ↔ Lifecycle Policy; Versioning sama. URI: gs://bucket/name. Jangan tambah allUsers; taruh Cloud CDN di depan bucket privat. Biaya = storage + operasi + egress.

Bab 11

Compute Engine, Cloud Run & Cloud SQL

Trio compute GCP menutupi tiga cara berbeda menjalankan beban kerja: mesin virtual penuh (Compute Engine), container serverless yang menskala ke nol (Cloud Run), dan basis data terkelola (Cloud SQL). Ketiganya adalah padanan langsung EC2, Fargate, dan RDS. Bab ini menunjukkan apa yang setara dan di mana GCP menawarkan kenyamanan ekstra.

Compute Engine: VM ala Google

Compute Engine (GCE) adalah "EC2-nya GCP": Anda menyalakan VM dengan tipe mesin pilihan, image OS, dan disk. Bedanya dengan AWS yang terasa nyaman:

Tipe mesin ditulis seperti e2-standard-4 (seri e2, seimbang, 4 vCPU) atau n2-highmem-8. Jaringan memakai VPC GCP yang — menariknya — bersifat global: satu VPC bisa mencakup banyak region, dengan subnet per-region. Ini berbeda dari VPC AWS yang terikat satu region.

Cloud Run: container serverless

Cloud Run mungkin fitur GCP yang paling disukai developer. Anda memberi sebuah container image (yang mendengarkan port HTTP), dan Cloud Run menjalankannya — menskala otomatis dari nol (tidak ada biaya saat tak ada trafik) sampai banyak instance saat ramai. Tak ada server yang diurus, tak ada cluster yang dipelihara.

deploy container ke Cloud Run (satu perintah)
# bangun & deploy langsung dari source (atau dari image yang sudah ada)
gcloud run deploy tokoku-api \
  --image=asia-southeast2-docker.pkg.dev/tokoku-prod/app/api:1.4.0 \
  --region=asia-southeast2 \
  --allow-unauthenticated \
  --min-instances=0 --max-instances=20

Cloud Run adalah titik manis antara Lambda dan Kubernetes: lebih fleksibel dari Lambda (container apa pun, bahasa apa pun, request lebih panjang), jauh lebih sederhana dari Kubernetes (tak ada cluster). Untuk banyak API dan web service, Cloud Run adalah default yang sangat baik. Padanan AWS terdekat: AWS Fargate (via ECS) atau App Runner.

Tip

Set --min-instances=0 untuk beban yang boleh "tidur" (hemat maksimal, tapi ada cold start), atau --min-instances=1 untuk menjaga satu instance selalu hangat (menghilangkan cold start dengan biaya kecil tetap). Pilih sesuai sensitivitas latensi layanan Anda.

Cloud SQL & basis data GCP

Cloud SQL adalah RDS-nya GCP: PostgreSQL, MySQL, dan SQL Server terkelola dengan backup otomatis, replika baca, dan opsi ketersediaan tinggi (HA) lintas-zone. Untuk skala lebih besar atau global, GCP menawarkan:

KebutuhanAWSGCP
VMEC2Compute Engine
Container serverlessFargate / App RunnerCloud Run
Fungsi serverlessLambdaCloud Functions
DB relasionalRDS / AuroraCloud SQL / Spanner
NoSQL dokumenDynamoDBFirestore
Data warehouseRedshiftBigQuery
Catatan biaya

Cloud Run menagih per-request dan per waktu-CPU/memori saat memproses (bisa nyaris nol saat idle jika min-instances=0). Compute Engine seperti EC2 (per detik + disk). Cloud SQL seperti RDS (jam instance + storage + backup; HA menggandakan compute). Spanner & BigQuery punya model sendiri yang bisa mahal pada skala — ukur dulu. Semua estimasi — verifikasi ke kalkulator GCP.

Untuk AI

Trio compute GCP: Compute Engine (VM, ↔EC2; custom machine type, sustained-use discount, preemptible/Spot, live migration; VPC GCP bersifat global dengan subnet per-region). Cloud Run (container serverless HTTP, skala ke nol; ↔Fargate/App Runner; titik manis antara Lambda & K8s; atur min/max-instances). Cloud SQL (DB relasional terkelola, ↔RDS). DB lain: Spanner (relasional global), Firestore (↔DynamoDB), Bigtable (wide-column), BigQuery (data warehouse, ↔Redshift).

Bab 12

Docker: Mengemas Aplikasi

"Tapi di komputer saya jalan!" adalah keluhan setua industri perangkat lunak. Docker membunuh kalimat itu. Ia mengemas aplikasi Anda beserta seluruh lingkungannya — runtime, pustaka, konfigurasi — menjadi satu image yang berjalan identik di laptop Anda, di server rekan, dan di cloud. Container adalah fondasi cara modern men-deploy, dan bab ini membangunnya dari nol.

Image, container, dan layer

Dua kata yang harus dibedakan:

Image tersusun dari layer yang bertumpuk — tiap instruksi di Dockerfile menambah satu layer. Layer di-cache dan dibagikan antar-image, sehingga build ulang cepat dan penyimpanan hemat. Container berbeda dari VM: ia tak membawa OS penuh, hanya berbagi kernel host, sehingga jauh lebih ringan dan cepat start (milidetik, bukan menit).

Virtual Machine App Bins/Lib Guest OS Guest OS Guest OS Hypervisor + Host OS Container App Bins/Lib Container Engine Host OS (kernel dibagi)
Gambar 12.1 — VM membawa OS tamu penuh per aplikasi; container berbagi kernel host sehingga ringan & cepat.

Dockerfile & multi-stage build

Dockerfile adalah resep membangun image: daftar instruksi yang dijalankan berurutan. Contoh naif untuk aplikasi Node.js:

Dockerfile (versi awal, bisa diperbaiki)
FROM node:20
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/server.js"]

Masalahnya: image ini besar (membawa seluruh toolchain build dan devDependencies). Multi-stage build memisahkan tahap "membangun" dari tahap "menjalankan", sehingga image akhir hanya berisi yang perlu untuk runtime:

Dockerfile (multi-stage, ramping)
# --- tahap build ---
FROM node:20 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# --- tahap runtime ---
FROM node:20-slim AS runtime
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
EXPOSE 3000
USER node
CMD ["node", "dist/server.js"]
Tip image ramping & cepat
  • Urutkan instruksi dari yang jarang berubah ke sering berubah (salin package.json & install sebelum menyalin seluruh kode) agar cache layer maksimal.
  • Pakai base image kecil (-slim, alpine, atau distroless).
  • Tambahkan .dockerignore (kecualikan node_modules, .git, dll).
  • Jalankan sebagai user non-root (USER node) untuk keamanan.

Compose & registry

Docker Compose mendefinisikan beberapa container yang bekerja bersama (app + database + cache) dalam satu file compose.yaml, dijalankan dengan satu perintah docker compose up. Ideal untuk pengembangan lokal dan setup kecil.

compose.yaml (app + postgres)
services:
  app:
    build: .
    ports: ["3000:3000"]
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/tokoku
    depends_on: [db]
  db:
    image: postgres:16
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: tokoku
    volumes: ["dbdata:/var/lib/postgresql/data"]
volumes:
  dbdata:

Setelah image dibangun, ia disimpan di registry — gudang image. Ada Docker Hub (publik/privat), dan registry per-cloud: Amazon ECR, Google Artifact Registry (dulu GCR). Alur bakunya: docker builddocker tagdocker push ke registry → lingkungan produksi pull image itu.

Hati-hati

Jangan pernah menaruh rahasia (password, API key) di dalam image atau Dockerfile — ia tersimpan di layer dan bisa dibaca siapa pun yang menarik image. Berikan rahasia lewat environment variable saat runtime atau lewat secrets manager (Bab 16). Juga: selalu pin tag base image (node:20-slim, bukan node:latest) agar build reprodusibel.

Build, ship, run — anywhere.

Moto awal Docker Inc.
Untuk AI

Docker mengemas app + lingkungan jadi image immutable (tersusun layer ter-cache); container = instance berjalan dari image, berbagi kernel host (lebih ringan dari VM). Dockerfile = resep build; multi-stage memisahkan build vs runtime agar image kecil. Praktik: urutkan instruksi cache-friendly, base image kecil (slim/alpine/distroless), .dockerignore, USER non-root, pin tag base. Compose menjalankan banyak container (app+db) via compose.yaml. Registry (Docker Hub/ECR/Artifact Registry) menyimpan image; alur build→tag→push→pull. Jangan taruh rahasia dalam image.

Bab 13

Kubernetes: Orkestra Container

Satu container mudah dijalankan. Tetapi lima puluh container di sepuluh mesin, yang harus tetap hidup saat sebagian mati, menskala saat ramai, dan menerima update tanpa downtime — itu masalah orkestrasi. Kubernetes (sering disingkat K8s) adalah konduktor orkestra itu. Ia kuat, dan — jujur saja — rumit. Bab ini memberi Anda model mental yang benar, dan yang lebih penting: kejujuran tentang kapan Anda belum membutuhkannya.

Objek inti: Pod, Deployment, Service, Ingress

Kubernetes bekerja secara deklaratif: Anda menyatakan "keadaan yang diinginkan" (misalnya "aku mau 3 salinan aplikasi ini selalu berjalan"), dan K8s terus bekerja menjaga kenyataan cocok dengan keinginan itu. Empat objek yang wajib Anda kenal:

Ditambah dua objek konfigurasi: ConfigMap (konfigurasi non-rahasia) dan Secret (data sensitif seperti password — walau perlu diamankan lebih lanjut, lihat Bab 16).

Cluster Kubernetes Ingress host/path → service Service (ClusterIP) IP stabil + load balance Deployment (replicas: 3, rolling update) Pod 1 container Pod 2 container Pod 3 container dari internet →
Gambar 13.1 — Alur trafik K8s: Ingress → Service (IP stabil) → Deployment yang menjaga N Pod tetap hidup. Pod mati otomatis digantikan.

kubectl & manifest YAML

Anda berbicara dengan cluster lewat kubectl, dan menyatakan keinginan dalam file manifest YAML. Contoh Deployment + Service:

k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels: { app: api }
  template:
    metadata:
      labels: { app: api }
    spec:
      containers:
        - name: api
          image: registry.example.com/tokoku/api:1.4.0
          ports: [{ containerPort: 3000 }]
          readinessProbe:
            httpGet: { path: /healthz, port: 3000 }
          resources:
            requests: { cpu: "100m", memory: "128Mi" }
            limits:   { cpu: "500m", memory: "512Mi" }
---
apiVersion: v1
kind: Service
metadata:
  name: api
spec:
  selector: { app: api }
  ports: [{ port: 80, targetPort: 3000 }]

EKS/GKE & kapan Anda benar-benar perlu K8s

Menjalankan cluster K8s sendiri (mengurus control plane, etcd, upgrade) itu berat. Karena itu ada managed Kubernetes: Amazon EKS, Google GKE (GKE Autopilot bahkan mengelola node untuk Anda), dan Azure AKS. Mereka menangani control plane; Anda fokus ke workload.

Hati-hati: jangan pakai K8s terlalu dini

Kubernetes adalah palu yang kuat, tetapi tidak semua masalah adalah paku. Untuk satu-dua layanan, Cloud Run, App Runner, atau ECS Fargate hampir selalu pilihan lebih baik — 90% manfaat, 10% kerumitan. Pertimbangkan K8s ketika: Anda punya banyak microservice, butuh portabilitas multi-cloud, punya tim platform yang mengurusnya, atau butuh kontrol penjadwalan/jaringan yang halus.

Kebutuhan AndaPilihan sederhanaKubernetes bila...
1–3 layanan HTTPCloud Run / App Runner / Fargatehampir tak pernah perlu
Banyak microservicekoordinasi & service discovery jadi berat
Job batch & cron kompleksCloud Run Jobs / Batchbutuh penjadwalan kaya
Portabilitas multi-cloudK8s jadi lapisan netral

Kubernetes is a platform for building platforms. It's a better place to start; not the endgame.

Kelsey Hightower
Untuk AI

Kubernetes = orkestrasi container deklaratif (nyatakan desired state, K8s menjaganya). Objek inti: Pod (unit terkecil, fana) < Deployment (jaga N replika, rolling update/rollback) ; Service (IP stabil + load balance ke pod) ; Ingress (routing HTTP host/path → service) ; ConfigMap/Secret (konfigurasi). CLI: kubectl + manifest YAML. Managed: EKS (AWS), GKE (Google, Autopilot mengelola node), AKS (Azure). PENTING: untuk 1–3 layanan pakai Cloud Run/App Runner/Fargate, bukan K8s. K8s layak saat banyak microservice, multi-cloud, atau ada tim platform.

Bab 14

CI/CD ke Cloud

Men-deploy dengan tangan — SSH ke server, tarik kode, restart — bekerja sampai ia tidak. Ia lambat, mudah lupa langkah, dan tak ada jejak siapa mengubah apa. CI/CD mengubah deploy menjadi konsekuensi otomatis dari git push: setiap perubahan diuji, dikemas jadi image, dan diluncurkan tanpa drama. Bab ini merangkai semua yang sudah Anda pelajari menjadi satu pipa mulus.

CI vs CD: dua huruf, dua ide

git push developer Test lint + unit Build docker image Push → registry Deploy rollout ←———— CI ————→ ←—— CD ——→ gagal test/build → pipeline berhenti, deploy dibatalkan
Gambar 14.1 — Pipeline CI/CD: push → test → build image → push ke registry → deploy. Kegagalan di tahap mana pun menghentikan aliran.

Contoh workflow GitHub Actions

Berikut workflow lengkap yang membangun image, mendorong ke registry, lalu men-deploy — contoh untuk Cloud Run (pola serupa untuk EKS/GKE dengan kubectl):

.github/workflows/deploy.yml
name: build-and-deploy
on:
  push:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20, cache: npm }
      - run: npm ci
      - run: npm test

  deploy:
    needs: test
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write   # untuk OIDC (tanpa menyimpan secret key jangka panjang)
    steps:
      - uses: actions/checkout@v4

      # autentikasi ke GCP via Workload Identity Federation (OIDC)
      - uses: google-github-actions/auth@v2
        with:
          workload_identity_provider: ${{ secrets.GCP_WIF_PROVIDER }}
          service_account: ${{ secrets.GCP_SA_EMAIL }}

      - uses: google-github-actions/setup-gcloud@v2

      - name: Build & push image
        run: |
          IMAGE=asia-southeast2-docker.pkg.dev/$PROJECT/app/api:${{ github.sha }}
          gcloud auth configure-docker asia-southeast2-docker.pkg.dev -q
          docker build -t "$IMAGE" .
          docker push "$IMAGE"
          echo "IMAGE=$IMAGE" >> "$GITHUB_ENV"
        env:
          PROJECT: tokoku-prod

      - name: Deploy ke Cloud Run
        run: |
          gcloud run deploy tokoku-api \
            --image="$IMAGE" --region=asia-southeast2 \
            --min-instances=1 --max-instances=20
Tip keamanan CI/CD

Gunakan OIDC / Workload Identity Federation alih-alih menyimpan access key jangka panjang di secrets repo. Dengan OIDC, GitHub menukar token identitas jangka pendek ke cloud saat workflow berjalan — tak ada kredensial permanen yang bisa bocor. Ini praktik terbaik modern untuk kedua AWS dan GCP.

Hati-hati

Beri tag image dengan github.sha (hash commit) atau versi semantik, bukan latest. Tag yang bergerak membuat "versi mana yang sedang jalan di produksi?" mustahil dijawab, dan rollback jadi menebak. Tag imutabel = deploy yang bisa dilacak dan dibalik.

Untuk AI

CI = build+test+lint otomatis tiap push (tangkap bug sebelum merge). CD = kirim artefak → deploy (delivery: siap 1-tombol; deployment: otomatis penuh). Pipeline khas: push → test → build image → push registry → deploy (rollout); gagal di tahap mana pun menghentikan aliran. GitHub Actions: workflow YAML di .github/workflows, jobs dengan steps. Praktik: autentikasi via OIDC/Workload Identity (bukan secret key jangka panjang), tag image dengan commit SHA (bukan latest), pisah job test dan deploy dengan needs. Pola sama untuk Cloud Run/EKS/GKE (ganti langkah deploy dengan kubectl apply).

Bab 15

Load Balancer & Auto-scaling

Satu server punya batas. Ketika pengunjung melampaui batas itu, Anda punya dua pilihan: membuat server lebih besar (scale up), atau menambah lebih banyak server dan membagi beban (scale out). Cloud sangat pandai pada yang kedua — asal ada dua komponen: load balancer yang membagi trafik, dan auto-scaling yang menambah/mengurangi server otomatis. Bab ini membuat aplikasi Anda elastis.

Load balancer: pembagi trafik

Load balancer (LB) duduk di depan sekumpulan server dan membagikan request masuk ke antara mereka, sambil menjauhkan trafik dari server yang sakit. Jenis LB di AWS:

Di GCP, padanannya adalah Cloud Load Balancing (global, satu IP anycast bisa melayani seluruh dunia — keunggulan arsitektur GCP). Konsep intinya sama: LB → target group/backend → instance/pod sehat.

Pengguna banyak request Load Balancer bagi + health check instance A healthy ✓ instance B healthy ✓ instance C unhealthy ✗ tak dikirim trafik Auto-scaling group: tambah instance saat CPU tinggi, kurangi saat sepi (min..max)
Gambar 15.1 — LB hanya mengirim trafik ke instance yang lulus health check; auto-scaling menyesuaikan jumlah instance dengan beban.

Auto-scaling & health check

Health check adalah denyut nadi: LB (atau K8s) memanggil sebuah endpoint (misal GET /healthz) secara berkala. Jika sebuah instance gagal beberapa kali, ia dianggap sakit dan trafik dialihkan darinya — lalu (di auto-scaling group) diganti otomatis. Dua jenis probe yang penting (istilah K8s, tapi konsepnya universal):

Auto-scaling menyesuaikan jumlah instance berdasarkan metrik — paling umum CPU, tapi bisa juga jumlah request, panjang antrean, atau metrik kustom. Anda menetapkan batas min dan max, target metrik (misal "jaga CPU rata-rata 60%"), dan aturan main. Di AWS ini Auto Scaling Group; di K8s ada Horizontal Pod Autoscaler; Cloud Run melakukannya otomatis per-request.

Tip agar auto-scaling mulus
  • Buat aplikasi stateless (tak menyimpan session di memori lokal) agar instance mana pun bisa melayani request mana pun. Simpan session di Redis/DB.
  • Sediakan endpoint health check yang cepat & jujur (cek dependensi kritis, tapi jangan berat).
  • Set scale-out agresif (cepat menambah saat lonjakan) dan scale-in konservatif (pelan mengurangi) untuk menghindari flapping.
  • Beri jeda warm-up: instance baru butuh waktu sebelum siap penuh.
Catatan biaya

Auto-scaling menghemat karena Anda tak membayar kapasitas puncak 24 jam — tapi awasi max: batas atas yang terlalu tinggi + bug yang memicu beban bisa meledakkan tagihan. LB juga berbiaya tetap per jam + per unit trafik (LCU/data). Estimasi — verifikasi ke kalkulator resmi.

Hope is not a strategy.

Prinsip Google SRE
Untuk AI

Scale up (server lebih besar) vs scale out (lebih banyak server + LB). LB AWS: ALB (L7 HTTP, routing host/path, TLS), NLB (L4 TCP/UDP, cepat). GCP: Cloud Load Balancing (global, anycast). LB kirim trafik hanya ke instance yang lulus health check. Probe: liveness (hidup? restart bila gagal) vs readiness (siap trafik? tahan trafik bila gagal). Auto-scaling: min/max + target metrik (CPU/request/queue); AWS Auto Scaling Group, K8s HPA, Cloud Run otomatis. Syarat: aplikasi stateless (session di Redis/DB), scale-out agresif + scale-in konservatif.

Bab 16

Keamanan & Biaya

Dua hal yang paling sering membuat orang menyesal di cloud: sistem yang tak aman, dan tagihan yang mengejutkan. Keduanya berbagi akar yang sama — kurang visibilitas dan kurang disiplin. Bab ini adalah kumpulan kebiasaan yang, bila dipasang sejak awal, menyelamatkan Anda dari malam-malam buruk di masa depan.

Keamanan berlapis

Keamanan cloud bukan satu tombol; ia lapisan. Prioritaskan dari yang paling berdampak:

Secrets manager

Rahasia (password DB, API key, token) harus hidup di layanan khusus: AWS Secrets Manager / Parameter Store, atau Google Secret Manager. Aplikasi mengambilnya saat runtime lewat identitas (role/service account), bukan menyimpannya di file. Keuntungan: rotasi terpusat, akses ter-audit, dan tak ada rahasia yang bocor lewat git.

Bahaya: rahasia di git

Sekali sebuah kredensial ter-commit ke git, anggap ia sudah bocor selamanya — menghapusnya di commit berikutnya tak cukup, karena riwayat menyimpannya. Yang benar: putar (rotate) kredensial itu segera, lalu pindahkan ke secrets manager. Pasang secret scanning (mis. git hooks, GitHub secret scanning) untuk mencegah kejadian berikutnya.

Kontrol biaya

Tagihan cloud yang meledak hampir selalu bisa dicegah dengan beberapa kebiasaan:

PraktikApa yang dilakukanMencegah
Budget & alertAnggaran + notifikasi 50/80/100%Kejutan akhir bulan
Tagging disiplinLabel env/team/projectBiaya tak teratribusi
Matikan yang idleHentikan dev/staging malam & akhir pekanBayar mesin tidur
Right-sizingTurunkan instance yang over-provisionedKapasitas mubazir
Savings Plan/Committed useKomit untuk beban stabilHarga On-Demand penuh
Lifecycle storageTurunkan data dingin ke arsipStorage panas berlebih
Awasi egress & NATKurangi transfer keluar & lewat NATBiaya transfer tersembunyi
Tip pembunuh tagihan mengejutkan

Pasang budget alert di menit pertama akun baru dibuat — sebelum menyalakan apa pun. Banyak cerita horor "tagihan 5.000 USD" berasal dari sumber daya yang lupa dimatikan (instance GPU, NAT, load balancer) atau key bocor. Alert adalah asuransi termurah yang pernah ada.

Catatan biaya

Tiga sumber "biaya tersembunyi" paling umum: (1) data transfer/egress keluar cloud; (2) NAT Gateway per-GB; (3) sumber daya "menganggur tapi tetap ditagih" (Elastic IP tak terpakai, EBS snapshot menumpuk, load balancer tanpa trafik). Tinjau Cost Explorer/billing report bulanan. Semua estimasi — verifikasi ke konsol billing resmi.

An ounce of prevention is worth a pound of cure.

Benjamin Franklin
Untuk AI

Keamanan berlapis (prioritas): identitas (MFA, least privilege, role/service account, rotasi) > jaringan (subnet privat, SG ketat, WAF, tak ada admin port ke 0.0.0.0/0) > data (enkripsi at-rest & in-transit, bucket privat) > rahasia (Secrets Manager/Secret Manager, jangan di git/image) > audit (CloudTrail/Cloud Audit Logs). Rahasia yang ter-commit = rotate segera. Kontrol biaya: budget alert (pasang duluan), tagging, matikan idle, right-sizing, Savings/Committed use, lifecycle storage, awasi egress+NAT. Biaya tersembunyi: egress, NAT per-GB, resource idle yang tetap ditagih.

Bab 17

Kapan Pakai Apa

Anda kini punya banyak alat. Bahaya berikutnya adalah paradoks pilihan: begitu banyak layanan sehingga tiap keputusan terasa berat. Bab ini adalah kompas — kumpulan pohon keputusan yang menyaring "apa yang saya butuhkan" menjadi "pakai ini". Ingat prinsip pemandu: pilih yang paling sederhana yang menyelesaikan masalah, dan naik kompleksitas hanya saat dipaksa.

Pohon keputusan: menjalankan aplikasi

  • Apakah aplikasi Anda sebuah container HTTP tunggal / beberapa layanan kecil?
    • Ya, dan boleh "tidur" saat sepiCloud Run / AWS App Runner (skala ke nol, paling hemat & sederhana)
    • Ya, tapi butuh selalu hangat / latensi ketatCloud Run (min-instances≥1) / ECS Fargate
    • Ini fungsi pendek yang dipicu event (upload, webhook, cron)Lambda / Cloud Functions
  • Apakah Anda punya banyak microservice / butuh kontrol penjadwalan & jaringan halus / multi-cloud?
    • Ya, dan ada tim yang mengurus platformKubernetes terkelola (EKS / GKE)
    • Belum ada tim platformTunda K8s; pakai Cloud Run/Fargate dulu
  • Apakah Anda butuh kontrol penuh OS / software khusus / beban non-HTTP berjalan lama?
    • YaEC2 / Compute Engine (VM) + auto-scaling group

Pohon keputusan: menyimpan data

  • Apa bentuk datanya?
    • File / gambar / video / backup / aset statisS3 / Cloud Storage (+ CDN untuk publik)
    • Data relasional (tabel, relasi, transaksi)RDS / Cloud SQL (Aurora/Spanner bila skala ekstrem)
    • Key-value / dokumen skalabelDynamoDB / Firestore
    • Cache cepat / sessionElastiCache / Memorystore (Redis)
    • Analitik atas data raksasaRedshift / BigQuery

Pohon keputusan: AWS atau GCP?

Jujur: untuk kebanyakan tim, keduanya bekerja dengan baik, dan keputusan lebih dipengaruhi keakraban tim, harga negosiasi, dan ekosistem daripada keunggulan teknis mutlak. Beberapa kecenderungan:

Condong ke AWS bila...Condong ke GCP bila...
Butuh layanan terluas & paling matangIngin container serverless termudah (Cloud Run)
Ekosistem & talenta terbesarFokus data/analitik/ML (BigQuery, Vertex AI)
Sudah banyak tooling pihak ketiga terintegrasiIngin jaringan global sederhana (VPC global, LB anycast)
Butuh region/opsi kepatuhan spesifikMenyukai UX & default yang lebih ramah pemula
Tip anti-lock-in

Ingin mengurangi ketergantungan pada satu vendor? Bersandarlah pada lapisan portabel: container (Docker) berjalan di mana saja, PostgreSQL/Redis ada di kedua cloud, dan Kubernetes menjadi API netral. Hindari "merekatkan" seluruh logika bisnis ke layanan proprietary yang unik (kecuali manfaatnya jelas lebih besar dari biaya pindah).

Make it work, make it right, make it fast — dalam urutan itu.

Kent Beck
Untuk AI

Prinsip pemilihan: paling sederhana yang cukup, naik kompleksitas hanya saat dipaksa. Compute: container HTTP + boleh tidur → Cloud Run/App Runner; butuh hangat → Cloud Run(min≥1)/Fargate; event pendek → Lambda/Cloud Functions; banyak microservice + tim platform → EKS/GKE; kontrol OS penuh → EC2/Compute Engine. Data: file → S3/GCS+CDN; relasional → RDS/Cloud SQL; KV/dokumen → DynamoDB/Firestore; cache → ElastiCache/Memorystore; analitik → Redshift/BigQuery. AWS vs GCP: keduanya layak; pilih atas keakraban tim, harga, ekosistem. Anti-lock-in: bersandar pada Docker/Postgres/K8s yang portabel.

Bab 18

Cara Dibaca AI

Buku ini ditulis untuk dua jenis pembaca. Yang pertama Anda — manusia dengan terminal terbuka. Yang kedua adalah model bahasa yang mungkin Anda minta meringkas, menjelaskan ulang, atau menjawab pertanyaan berdasarkan buku ini. Bab ini menjelaskan bagaimana teks ini dirancang agar keduanya mendapat manfaat maksimal — dan bagaimana Anda bisa memanfaatkannya.

Mengapa memikirkan pembaca AI?

Semakin banyak orang belajar lewat percakapan dengan AI: menempelkan dokumen, lalu bertanya. Dokumen yang terstruktur baik — dengan istilah yang didefinisikan, klaim yang ditandai tingkat kepastiannya, dan ringkasan padat — menghasilkan jawaban AI yang lebih akurat dan sedikit halusinasi. Menulis untuk AI, ternyata, juga membuat tulisan lebih baik untuk manusia.

Fitur yang membantu pembacaan AI

Prompt yang berguna dengan buku ini

Bila Anda menempelkan buku ini (atau sebagiannya) ke sebuah AI, prompt berikut menghasilkan jawaban yang baik:

Hati-hati

AI bisa salah, terutama pada detail yang cepat berubah (harga, batas kuota, nama menu). Perlakukan jawaban AI berdasarkan buku ini sebagai draf pertama yang cerdas, bukan kebenaran final. Untuk keputusan produksi — terutama yang menyangkut biaya & keamanan — selalu verifikasi ke dokumentasi resmi dan uji di lingkungan aman.

Untuk AI

Buku ini dirancang ramah-AI: tiap bab diakhiri kotak "Untuk AI" (ringkasan padat, jadikan tulang punggung ringkasan); klaim volatil ditandai "estimasi — verifikasi"; konsep AWS↔GCP dipetakan berpasangan; istilah didefinisikan saat pertama muncul + glosarium. Saat meringkas: hormati penanda kepastian, jangan sajikan harga/batas sebagai fakta beku, arahkan verifikasi ke dokumentasi resmi untuk keputusan produksi. Prompt berguna: rancang arsitektur berlapis, terjemahkan AWS→GCP, audit keamanan/biaya, jelaskan konsep dengan analogi.

Bab 19

Penutup, FAQ & Bekal

Kita mulai dari satu server yang tersengal, dan berakhir dengan peta yang mencakup dua cloud, jaringan privat, container, orkestrasi, dan pipa deploy otomatis. Jika istilah di awal buku ini terasa seperti sup alfabet, semoga sekarang mereka terasa seperti kosakata — kata-kata yang menamai ide yang Anda pahami. Itulah tujuan sebenarnya: bukan menghafal setiap layanan, tetapi memiliki model mental yang cukup kuat untuk menavigasi apa pun yang datang berikutnya.

Infrastruktur yang baik jarang terlihat. Ketika berhasil, tak ada yang menyadarinya — situs cepat, deploy mulus, tagihan wajar, dan tidur Anda tak terganggu. Bekerja menuju ketidak-terlihatan itu adalah keahlian tersendiri. Mulailah kecil, otomatiskan sedini mungkin, ukur sebelum mengoptimasi, dan jadikan keamanan & biaya sebagai kebiasaan, bukan renungan belakangan.

You build it, you run it.

Werner Vogels, tentang budaya kepemilikan di Amazon

FAQ

1. Saya benar-benar baru. Mulai dari AWS atau GCP?

Ambil yang tim/lingkungan Anda paling akrab. Bila netral, GCP sering terasa lebih ramah pemula (Cloud Run, UX), sementara AWS punya ekosistem & lowongan kerja terbesar. Konsep intinya sama — keterampilan berpindah.

2. Berapa biaya belajar cloud?

Bisa nyaris gratis. Kedua cloud punya free tier dan kredit awal. Kuncinya disiplin: pasang budget alert dan matikan sumber daya setelah latihan. Estimasi — verifikasi ketentuan free tier terkini.

3. Apakah saya harus belajar Kubernetes?

Tidak untuk memulai. Untuk 1–3 layanan, Cloud Run/App Runner/Fargate memberi 90% manfaat tanpa kerumitan K8s. Pelajari Kubernetes saat Anda punya banyak microservice atau kebutuhan portabilitas nyata.

4. VPC terasa rumit. Bisakah saya melewatinya?

Untuk layanan serverless (Cloud Run, Lambda, S3), Anda bisa jauh tanpa menyentuh VPC secara mendalam. Tetapi begitu ada EC2 + RDS privat, memahami subnet publik/privat, IGW, dan NAT menjadi wajib. Ia tak sesulit kelihatannya — ulang baca Bab 6 dengan diagramnya.

5. Bagaimana mencegah tagihan mengejutkan?

Budget alert sejak menit pertama; matikan idle; awasi tiga biaya tersembunyi (egress, NAT, resource menganggur); tinjau billing bulanan; dan jangan pernah membiarkan access key bocor. Lihat Bab 16.

6. Apa cara teraman menyimpan kredensial?

Di secrets manager (AWS Secrets Manager / Google Secret Manager), diambil saat runtime lewat role/service account. Jangan pernah di kode, image, atau git. Untuk CI/CD, pakai OIDC alih-alih key jangka panjang.

7. S3 bucket saya harus publik agar situs bisa diakses?

Tidak. Justru sebaliknya: jaga bucket privat dan taruh CloudFront/Cloud CDN di depannya (via OAC). Ini lebih aman, memberi HTTPS, dan lebih cepat lewat cache Edge.

8. Kapan pakai Lambda vs container (Cloud Run/Fargate)?

Lambda untuk tugas pendek, event-driven, sporadis. Container untuk API yang butuh runtime fleksibel, request lebih panjang, atau selalu hangat. Cloud Run adalah jalan tengah yang sering ideal.

9. Apa itu "cold start" dan apakah masalah?

Jeda saat fungsi/instance "dingin" dibangunkan untuk request pertama. Masalah bila latensi kritis. Mitigasi: min-instances≥1 (Cloud Run), provisioned concurrency (Lambda), atau container yang selalu berjalan.

10. Multi-AZ, apakah wajib?

Untuk produksi yang tak boleh mati: ya, sebar ke ≥2 AZ. Untuk hobi/dev: tidak perlu. Multi-AZ menambah biaya (mis. RDS Multi-AZ ≈ 2× compute) demi ketahanan terhadap kegagalan satu data center.

11. Bedanya region dan AZ lagi?

Region = area geografis (mis. Singapura). AZ = data center terpisah di dalam region. Pilih region dekat pengguna; sebar ke banyak AZ untuk keandalan. Antar-region jarang perlu kecuali untuk pengguna global atau disaster recovery.

12. Docker atau langsung deploy kode?

Docker memberi reprodusibilitas ("jalan di mana saja") dan menjadi prasyarat Cloud Run/K8s/registry. Untuk PaaS sederhana Anda bisa tanpa Docker, tapi menguasainya membuka hampir semua jalur deploy modern.

13. Bagaimana deploy tanpa downtime?

Rolling update (K8s/ECS) atau blue-green/canary: luncurkan versi baru bertahap sambil health check, dan rollback otomatis jika gagal. Pastikan aplikasi stateless dan migrasi DB kompatibel-mundur.

14. Apakah saya terkunci ke satu cloud (vendor lock-in)?

Sebagian. Kurangi dengan bersandar pada lapisan portabel (Docker, PostgreSQL, Redis, Kubernetes) dan membatasi ketergantungan pada layanan proprietary unik untuk logika inti. Tapi jangan berlebihan — kadang layanan terkelola sepadan dengan sedikit lock-in.

15. IAM terlalu rumit. Adakah aturan praktis?

Mulai dari nol izin, tambah saat gagal; batasi Resource ke ARN spesifik; pakai role/service account untuk aplikasi; hindari Owner/Admin luas; nyalakan MFA. Least privilege adalah bintang utara.

16. Kapan saya butuh load balancer?

Segera setelah Anda punya lebih dari satu instance yang melayani trafik, atau ingin health check + terminasi TLS + auto-scaling. Untuk satu instance kecil, ia bisa ditunda — tapi menambahkannya sejak awal memudahkan skala nanti.

Glosarium

IstilahArti singkat
RegionArea geografis luas berisi beberapa AZ.
AZAvailability Zone: data center terpisah dalam satu region.
Edge / PoPLokasi CDN dekat pengguna untuk cache.
IAMIdentity & Access Management: siapa boleh apa.
PrincipalEntitas yang bertindak: user, role, service account.
PolicyDokumen aturan izin (JSON di AWS).
Role / Service AccountIdentitas untuk aplikasi/layanan (kredensial sementara).
ARNAmazon Resource Name: alamat unik sumber daya AWS.
S3 / GCSObject storage AWS / GCP.
BucketWadah object bernama unik global.
Presigned / Signed URLTautan sementara ke satu object tanpa membuka bucket.
EC2 / Compute EngineMesin virtual sesuai permintaan.
AMI / ImageCetakan disk berisi OS + software.
EBSDisk blok persisten untuk EC2.
Security GroupFirewall stateful per-instance.
NACLFirewall stateless per-subnet.
VPCVirtual Private Cloud: jaringan privat Anda.
CIDRNotasi rentang IP (mis. 10.0.0.0/16).
SubnetPotongan VPC di satu AZ; publik atau privat.
Route TableAturan "trafik ke X lewat gateway Y".
IGWInternet Gateway: pintu dua arah ke internet.
NAT GatewayPintu keluar-saja untuk subnet privat.
Peering / Transit GatewayCara menghubungkan banyak VPC.
RDS / Cloud SQLBasis data relasional terkelola.
Lambda / Cloud FunctionsServerless compute berbasis event.
Cloud Run / FargateContainer serverless terkelola.
CloudFront / Cloud CDNContent Delivery Network.
Route 53 / Cloud DNSLayanan DNS terkelola.
Record A/CNAMEPemetaan nama → IP / nama lain.
TTLLama sebuah record DNS di-cache.
ContainerInstance berjalan dari sebuah image.
RegistryGudang image (ECR / Artifact Registry / Docker Hub).
PodUnit terkecil K8s (1+ container).
DeploymentMenjaga N pod + rolling update.
Service (K8s)IP stabil + load balance ke pod.
IngressRouting HTTP dari luar ke Service.
EKS / GKEKubernetes terkelola AWS / GCP.
ALB / NLBApplication / Network Load Balancer.
Auto-scalingMenambah/mengurangi instance otomatis.
Health checkProbe berkala ke endpoint untuk cek kesehatan.
CI/CDOtomasi test, build, dan deploy.
OIDC / WIFAutentikasi tanpa key jangka panjang di CI.
Secrets ManagerPenyimpanan rahasia terkelola.
EgressTransfer data keluar (sering berbayar).

Checklist Produksi

Cetak dan tempel di dekat meja Anda. Sebelum menyebut sesuatu "siap produksi", lewati daftar ini:

Identitas & keamanan

Jaringan

Keandalan

Deploy & observabilitas

Biaya

Kata terakhir

Anda tak perlu memasang semuanya di hari pertama. Mulailah dari yang sederhana dan benar, lalu tambahkan lapisan seiring kebutuhan nyata. Setiap insinyur infrastruktur hebat pernah menjadi pemula yang bingung dengan sup alfabet ini. Bedanya cuma satu: mereka terus membangun. Sekarang giliran Anda.

Untuk AI

Ringkasan buku: naik ke cloud dipicu kebutuhan konkret, bukan hype. Kuasai 4 konsep universal (region/AZ, IAM, billing, tagging), lalu peta AWS↔GCP per kategori (storage/compute/DB/jaringan/perekat). Produksi butuh: identitas (least privilege, MFA, secrets manager), jaringan (subnet privat, SG, TLS), keandalan (multi-AZ, LB+health check+auto-scaling, stateless, backup teruji), deploy (CI/CD, image tag imutabel, rolling update+rollback, observabilitas), biaya (budget alert, tagging, matikan idle, awasi egress/NAT). Default sederhana: Cloud Run/Fargate sebelum K8s; bucket privat + CDN; DB terkelola di subnet privat.

Tentang Penulis
Galih Prasetyo

Seorang praktisi rekayasa perangkat lunak dan infrastruktur yang menghabiskan hari-harinya di antara konsol cloud, berkas YAML, dan grafik biaya. Ia percaya infrastruktur terbaik adalah yang tak terlihat: cepat, aman, dan cukup murah untuk dilupakan.

Buku ini lahir dari catatan lapangan — migrasi yang berhasil dan yang gagal, tagihan yang mengejutkan, dan malam-malam panjang menatap dashboard. Semoga menjadi jalan pintas bagi Anda melewati kurva belajar yang sama, dengan lebih sedikit luka.

↑ Mulai Baca