Tagihan AWS klien saya naik dari $800 ke $4.200 dalam satu bulan — bukan karena traffic naik, tapi karena tidak ada yang memperhatikan egress fee ke S3.
Cloud cost adalah salah satu hal yang paling mudah diabaikan saat development tapi paling menyakitkan saat production. Artikel ini adalah breakdown biaya nyata untuk aplikasi skala Indonesia.
Benchmark Biaya — 10k MAU vs 100k MAU
| Komponen | AWS (ap-southeast-1) | GCP (asia-southeast2) | Railway + Neon |
|---|---|---|---|
| Compute (2 vCPU, 4GB RAM) | t3.medium: ~$35/bln | e2-medium: ~$33/bln | $20/bln (hobby) |
| PostgreSQL managed | RDS db.t3.micro: ~$15/bln | Cloud SQL: ~$18/bln | Neon free → $19/bln |
| Object Storage (100GB) | S3: ~$2.3/bln | GCS: ~$2/bln | R2: $0 (gratis!) |
| Egress (100GB outbound) | ~$9/bln | ~$12/bln | R2: $0 gratis |
| Redis cache (1GB) | ElastiCache: ~$13/bln | Memorystore: ~$16/bln | Upstash: $0–10/bln |
| Total 10k MAU est. | ~$74/bln | ~$81/bln | ~$39–49/bln |
AWS dan GCP mencharge untuk data yang keluar dari cloud mereka (egress). S3 ke internet: $0.09/GB. Untuk aplikasi dengan banyak file download (dokumen, gambar), ini bisa 2–3x lebih besar dari biaya storage. Cloudflare R2 tidak punya egress fee — ini kenapa saya sering recommend R2 untuk storage di Indonesia.
Cloudflare R2 — Storage Tanpa Egress Fee
R2 adalah S3-compatible object storage dari Cloudflare. API-nya identik dengan S3 — tinggal ganti endpoint dan credentials, tidak perlu ubah kode:
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'
// Ganti hanya endpoint dan credentials — kode upload sama persis
const r2 = new S3Client({
region: 'auto',
endpoint: `https://${process.env.CF_ACCOUNT_ID}.r2.cloudflarestorage.com`,
credentials: {
accessKeyId: process.env.R2_ACCESS_KEY_ID!,
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY!,
},
})
await r2.send(new PutObjectCommand({
Bucket: 'my-bucket',
Key: `uploads/${filename}`,
Body: fileBuffer,
ContentType: mimeType,
}))
// Serve via Cloudflare CDN — edge di Jakarta, zero egress fee
// https://pub-xxx.r2.dev/uploads/filename.pdf
Kapan Hybrid atau On-Premise
FinOps Basics — 5 Langkah Pertama
| Langkah | Action | Potential Saving |
|---|---|---|
| 1. Tag semua resource | Tag per environment (prod/staging/dev) dan per feature | Visibility — tahu siapa "memakan" biaya |
| 2. Matikan dev environment malam | Auto-stop EC2/GCE instance jam 20:00, start jam 08:00 | 30–50% biaya compute dev |
| 3. Audit storage lifecycle | Move object >90 hari ke cold storage (Glacier/Nearline) | 40–70% biaya storage |
| 4. Reserved instances untuk prod | Commit 1 tahun untuk instance produksi yang stabil | 30–40% vs on-demand |
| 5. Pindah storage ke R2 | Migrate S3/GCS ke Cloudflare R2 | Eliminasi egress fee |
AWS: ekosistem lebih besar, lebih banyak managed services, komunitas Indonesia lebih besar → lebih mudah hire. GCP: harga compute sedikit lebih murah, BigQuery untuk analytics sangat powerful, Vertex AI lebih terintegrasi. Untuk greenfield, saya sering rekomendasikan Railway + Cloudflare untuk MVP, baru migrate ke AWS/GCP saat butuh compliance atau managed services spesifik.
Kesimpulan
Cloud cost bukan tentang memilih provider terbaik — tapi tentang memilih tool yang tepat per komponen. Compute di Railway untuk MVP, R2 untuk storage (zero egress), Upstash untuk Redis, Neon untuk PostgreSQL. Baru migrate ke AWS/GCP saat ada kebutuhan spesifik yang tidak bisa dipenuhi solusi yang lebih simpel.
Optimasi cloud cost paling efektif bukan di pilihan instance type — tapi di eliminasi egress fee dan mematikan resource yang tidak dipakai.