Skip to main content
BlogDevOps

FinOps untuk Tim Cloud Indonesia: Panduan Praktis Optimasi Biaya Cloud

Tagihan cloud perusahaan Indonesia membengkak karena instance yang kebesaran, environment dev yang terlupakan, dan volume EBS yang tidak terpasang. Panduan ini menerapkan fase Inform, Optimize, dan Operate dari FinOps Framework lewat skrip AWS CLI dan Python yang siap jalan, alert anomali biaya, serta pilihan Savings Plans, Reserved Instance, dan Spot yang cocok untuk workload di AWS Region Jakarta.

Matthews Wong

Software Engineer

Februari 20269 menit baca
FinOps untuk Tim Cloud Indonesia: Panduan Praktis Optimasi Biaya Cloud

Foto oleh Unsplash

Ringkasan Utama

Bagi tim cloud di Indonesia, FinOps memangkas pemborosan dalam tiga fase yang berulang: Inform memberi setiap resource pemilik dan tag agar tagihan bisa dijelaskan, Optimize menghapus resource yang menganggur atau kebesaran dan menutup pemakaian stabil dengan Savings Plans atau Reserved Instance, dan Operate menjaga anggaran serta alert anomali tetap hadir di kerja rekayasa sehari-hari.

Seiring perusahaan Indonesia memperbesar infrastruktur cloud mereka, pengeluaran cloud sering tumbuh lebih cepat dari pendapatan — bukan karena engineer boros, tetapi karena visibilitas biaya cloud biasanya menjadi renungan belakangan. Framework FinOps Foundation — Inform, Optimize, Operate — menyediakan disiplin terstruktur untuk menyatukan tim rekayasa, keuangan, dan produk dalam membuat keputusan pengeluaran berbasis data. Panduan ini berfokus pada pola pemborosan paling umum yang diamati dalam deployment cloud Indonesia dan menyediakan skrip yang dapat langsung diterapkan untuk pengurangan biaya segera.

Framework FinOps: Inform, Optimize, Operate

FinOps Foundation mendefinisikan FinOps sebagai kerangka operasional dan praktik budaya yang memaksimalkan nilai bisnis teknologi melalui kolaborasi tim rekayasa, keuangan, dan bisnis. Framework-nya berjalan dalam tiga fase iteratif. Inform: visibilitas biaya penuh melalui tagging, showback/chargeback, dan deteksi anomali. Optimize: menghilangkan pemborosan melalui rightsizing, diskon komitmen, kapasitas Spot, dan perubahan arsitektur. Operate: menanamkan FinOps ke kerja rekayasa sehari-hari melalui anggaran, alert, dan pipeline deployment yang sadar biaya. Banyak tim langsung melompat ke Optimize, padahal tanpa fase Inform, optimasi berjalan buta dan tidak bertahan lama.

Pemborosan Cloud Umum di Deployment Indonesia

Pola pemborosan yang paling sering muncul meliputi: instance EC2 atau Compute Engine yang ukurannya ditetapkan saat peluncuran dan tidak pernah ditinjau terhadap utilisasi aktual; environment developer dan staging yang dibiarkan menyala di malam hari, akhir pekan, dan hari libur; volume EBS yang tidak terpasang setelah instance-nya dihapus, yang tetap ditagih AWS sampai volume itu dihapus; biaya NAT Gateway, yang ditagih per jam dan per GB data yang diproses, untuk traffic ke S3 atau DynamoDB yang sebenarnya bisa lewat gateway VPC endpoint tanpa biaya tambahan, atau untuk traffic yang menyeberang Availability Zone menuju NAT Gateway di zona lain; dan biaya transfer data lintas region S3/GCS dari replikasi yang salah routing.

Menyiapkan Visibilitas Biaya Cloud dengan Strategi Tagging

Visibilitas biaya dimulai dari strategi tagging wajib. Minimal, wajibkan empat tag di setiap resource: `Environment` (prod/staging/dev), `Team` (slug tim pemilik), `Project` (nama proyek atau produk), dan `CostCenter` (kode cost center keuangan). Di AWS, tag policy AWS Organizations menyeragamkan kunci dan nilai tag tetapi tidak mengevaluasi resource yang sama sekali tidak punya tag, jadi pasangkan dengan service control policy yang menolak aksi pembuatan resource tanpa kunci aws:RequestTag yang diwajibkan; di Azure, policy bawaan Require a tag on resources menjalankan fungsi yang sama. Tandai resource yang tidak patuh setiap hari dan hentikan setelah masa tenggang, misalnya 72 jam. Untuk data tagihannya sendiri, spesifikasi FOCUS dari FinOps Foundation (versi 1.4 per 17 Oktober 2026) menyeragamkan data biaya dan pemakaian lintas provider, dan AWS Data Exports dapat mengirimkannya dalam format FOCUS 1.0.

Aktifkan AWS Cost Anomaly Detection di setiap akun AWS, pantau dashboard anomali biaya di Google Cloud Billing, dan tetap pasang budget alert sebagai lapis cadangan. AWS menjalankan deteksi anomali sekitar tiga kali sehari atas data Cost Explorer yang bisa tertunda hingga 24 jam, jadi alert biasanya datang dalam sekitar satu hari setelah pengeluaran terjadi, bukan dalam hitungan menit. Ambang alert AWS bisa berupa nilai absolut atau persentase dari total dampak anomali; mulailah dengan ambang persentase lalu perketat setelah Anda tahu volume alert yang normal.

Menemukan dan Mengeliminasi Pemborosan Cloud

Eliminasi pemborosan cloud paling efektif ketika diotomatisasi — review biaya manual paling cepat terjadi per kuartal, tetapi pemborosan terakumulasi setiap hari. Skrip di bawah mendemonstrasikan cara menemukan volume EBS yang tidak terpasang (sumber pemborosan senyap yang abadi) dan mendeteksi anomali biaya week-over-week menggunakan API Cost Explorer AWS. Pola serupa berlaku untuk GCP (menggunakan gcloud compute disks list --filter='-users:*') dan Azure (menggunakan az disk list --query "[?diskState=='Unattached']").

Skrip AWS CLI dan Python untuk Analisis Biaya

Skrip berikut mencakup dua tugas otomatisasi FinOps yang paling berdampak: menampilkan semua volume EBS yang tidak terpasang di Region Jakarta (ap-southeast-3, Region opt-in yang harus diaktifkan dulu di akun) beserta estimasi biaya dari tarif yang Anda salin dari halaman harga EBS, dan mendeteksi perubahan biaya week-over-week per layanan AWS dari data harian Cost Explorer. Jadwalkan skrip ini setiap hari melalui AWS Lambda atau cron job dan kirim alert ke channel Slack atau PagerDuty ketika ambang batas terlampaui.

# Find all unattached EBS volumes in ap-southeast-3 (Jakarta, an opt-in Region)
aws ec2 describe-volumes \
  --region ap-southeast-3 \
  --filters Name=status,Values=available \
  --query 'Volumes[*].{ID:VolumeId,Size:Size,Type:VolumeType,Created:CreateTime}' \
  --output table

# Estimate monthly waste: set GB_MONTH_USD to the gp3 per-GB-month rate for
# Asia Pacific (Jakarta) on the Amazon EBS pricing page (other types differ)
GB_MONTH_USD=0.00
aws ec2 describe-volumes \
  --region ap-southeast-3 \
  --filters Name=status,Values=available \
  --query 'sum(Volumes[*].Size)' \
  --output text | awk -v rate="$GB_MONTH_USD" '{printf "Unattached EBS waste: $%.2f/month\n", $1 * rate}'

# -------------------------------------------------------
# Python: AWS Cost Anomaly Detection via Cost Explorer API
# -------------------------------------------------------
import boto3
from collections import defaultdict
from datetime import datetime, timedelta, timezone

ce = boto3.client('ce', region_name='us-east-1')  # Cost Explorer API endpoint

def detect_cost_anomalies(threshold_pct: float = 20.0):
    """Flag services whose cost rose > threshold_pct: last 7 days vs the 7 before."""
    end    = datetime.now(timezone.utc).date()  # End is exclusive: up to yesterday
    start  = end - timedelta(days=14)
    cutoff = str(end - timedelta(days=7))

    # Granularity accepts DAILY, MONTHLY or HOURLY (there is no WEEKLY),
    # so sum 14 daily rows into two 7-day windows, following pagination.
    prev_week, curr_week = defaultdict(float), defaultdict(float)
    kwargs = dict(
        TimePeriod={'Start': str(start), 'End': str(end)},
        Granularity='DAILY',
        Metrics=['BlendedCost'],
        GroupBy=[{'Type': 'DIMENSION', 'Key': 'SERVICE'}]
    )
    while True:
        resp = ce.get_cost_and_usage(**kwargs)
        for day in resp['ResultsByTime']:
            week = curr_week if day['TimePeriod']['Start'] >= cutoff else prev_week
            for g in day['Groups']:
                week[g['Keys'][0]] += float(g['Metrics']['BlendedCost']['Amount'])
        if 'NextPageToken' not in resp:
            break
        kwargs['NextPageToken'] = resp['NextPageToken']

    anomalies = []
    for svc, curr in curr_week.items():
        prev = prev_week.get(svc, 0)
        if prev > 0 and curr > 0:
            pct_change = ((curr - prev) / prev) * 100
            if pct_change > threshold_pct:
                anomalies.append({
                    'service': svc,
                    'prev_week_usd': round(prev, 2),
                    'curr_week_usd': round(curr, 2),
                    'increase_pct':  round(pct_change, 1)
                })
    return sorted(anomalies, key=lambda x: x['increase_pct'], reverse=True)

for a in detect_cost_anomalies(threshold_pct=25):
    print(f"[ALERT] {a['service']}: +{a['increase_pct']}%  "
          f"(${a['prev_week_usd']} → ${a['curr_week_usd']})")

Rightsizing Instance EC2 dan GCE

AWS Compute Optimizer secara default menganalisis metrik utilisasi CloudWatch selama 14 hari (hingga 93 hari dengan fitur berbayar enhanced infrastructure metrics), sedangkan rekomendasi machine type Google Cloud memakai data Cloud Monitoring 8 hari terakhir. Contoh langkah rightsizing yang umum: menurunkan m5.2xlarge yang dipilih saat peluncuran ke m5.large atau m5.xlarge setelah data utilisasi mendukungnya; memindahkan database dari r5.2xlarge ke r5.large setelah load testing membuktikan kebutuhan memori yang lebih rendah; dan mengganti instance storage-optimized i3 dengan instance general-purpose yang lebih kecil di atas volume EBS gp3 bila workload tidak membutuhkan storage NVMe lokal.

Reserved Instances, Spot, dan Commitment Discount

Diskon berbasis komitmen adalah optimasi FinOps dengan imbal hasil tertinggi untuk workload yang stabil. Menurut halaman harga AWS per 17 Oktober 2026, Standard Reserved Instance dan EC2 Instance Savings Plans memberi potongan hingga 72% dari harga On-Demand, sedangkan Compute Savings Plans hingga 66% tetapi berlaku lintas keluarga instance, ukuran, sistem operasi, tenancy, dan Region, serta mencakup Fargate dan Lambda. AWS kini merekomendasikan Savings Plans dibanding Reserved Instance untuk EC2. Untuk workload batch non-kritis, instance Spot berjalan dengan potongan hingga 90% tetapi bisa diambil kembali dengan pemberitahuan interupsi dua menit, sehingga butuh arsitektur yang fault-tolerant.

Arsitektur Instance Spot untuk Workload Batch Indonesia

Pemrosesan data malam, ETL, dan training ML di perusahaan fintech dan e-commerce Indonesia adalah kandidat yang baik untuk instance Spot. Pada EC2 Auto Scaling group dengan mixed instances policy, atur OnDemandBaseCapacity untuk kapasitas yang harus selalu berjalan, lalu gunakan OnDemandPercentageAboveBaseCapacity untuk membagi sisanya, misalnya 70% On-Demand dan 30% Spot. Pantau interupsi lewat event EC2 Spot Instance Interruption Warning di EventBridge atau dengan memeriksa path IMDS latest/meta-data/spot/instance-action setiap 5 detik (AWS mempertahankan spot/termination-time hanya untuk kompatibilitas lama), lalu lakukan checkpoint pekerjaan sebelum instance berhenti.

Jangan Pernah Mematikan Database Produksi untuk Menghemat Biaya

Kesalahan pemangkasan biaya yang umum namun merusak adalah menghentikan atau menghapus instance RDS, Cloud SQL, atau PostgreSQL produksi di luar jam kerja. Menghapus instance berisiko kehilangan data, dan bahkan stop yang bersih pun me-reset connection pool dan membuat cache dingin, sehingga pengguna pagi hari merasakan layanan yang lambat. Kurangi biaya database secara berkelanjutan: gunakan Aurora Serverless v2 untuk workload variabel, tambahkan read replica untuk mengalihkan traffic baca dari primary, pakai connection pooling PgBouncer untuk mengurangi overhead koneksi, dan tutup baseline yang stabil dengan komitmen, baik Reserved Instance maupun Database Savings Plans yang lebih baru, yang menurut AWS memberi potongan hingga 35% untuk layanan termasuk Aurora dan RDS (per 17 Oktober 2026).

Menyematkan FinOps ke dalam Alur Kerja Rekayasa

FinOps berhasil ketika kesadaran biaya tertanam dalam keputusan rekayasa — bukan didelegasikan ke tim terpisah yang meninjau biaya bulanan. Taktik penyematan praktis mencakup: menambahkan estimasi biaya bulanan ke deskripsi PR infrastruktur (menggunakan Infracost untuk Terraform), mewajibkan review rightsizing sebagai bagian dari architecture review untuk layanan baru apa pun, menampilkan dashboard biaya real-time di channel Slack tim rekayasa, dan menyertakan metrik efisiensi biaya (biaya per request API, biaya per pengguna aktif) dalam OKR tim rekayasa kuartalan.

S3 Intelligent-Tiering untuk Data Lake Indonesia

Banyak tim data menyimpan semua objek di S3 Standard terlepas dari seberapa sering objek itu dibaca. S3 Intelligent-Tiering memindahkan objek ke tier Infrequent Access setelah 30 hari berturut-turut tanpa akses dan ke Archive Instant Access setelah 90 hari, sementara tier opsional Archive Access dan Deep Archive Access menampung objek yang tidak disentuh selama 90 dan 180 hari atau lebih. Tidak ada biaya retrieval, tetapi ada biaya bulanan kecil untuk monitoring dan otomatisasi per objek, dan objek di bawah 128 KB tidak pernah dipindahkan tier-nya. AWS menyebut penghematan hingga 40% untuk tier Infrequent Access dan hingga 68% untuk Archive Instant Access (per 17 Oktober 2026), tanpa perubahan aplikasi.

Optimasi Biaya Jaringan dan Transfer Data

Biaya transfer data sering menjadi item paling mengejutkan dalam tagihan cloud, khususnya untuk arsitektur yang dirancang untuk satu Region AWS tetapi kini mencakup beberapa Region atau banyak berkomunikasi antar Availability Zone. Gunakan gateway VPC endpoint untuk S3 dan DynamoDB, yang tidak dikenai biaya tambahan, agar traffic tersebut tidak lewat NAT Gateway, dan tempatkan layanan yang sering berkomunikasi di Availability Zone yang sama dengan resource yang dipanggilnya, atau beri setiap zona NAT Gateway sendiri. Replikasi antar zona untuk deployment RDS Multi-AZ tidak dikenai biaya, jadi fokuskan upaya pada traffic aplikasi. Untuk traffic internet keluar, CloudFront mengurangi fetch ke origin; Origin Shield tidak tersedia di Region Jakarta, jadi pilih Region Origin Shield dengan latensi terendah ke origin Anda.

Jadwalkan environment non-produksi (dev, staging, QA) agar otomatis berhenti pukul 20:00 WIB dan menyala pukul 08:00 WIB pada hari kerja menggunakan Instance Scheduler on AWS atau fungsi Lambda kecil yang dipicu EventBridge. Berjalan hanya 12 jam sehari selama 5 hari kerja berarti 60 dari 168 jam dalam seminggu, sehingga instance yang dihentikan ditagih sekitar 64% lebih sedikit jam instance tanpa upaya manual. Volume EBS yang terpasang tetap ditagih selama instance berhenti.

Mengukur Kematangan FinOps dan ROI

FinOps Foundation menilai kematangan per capability dengan tingkat Crawl, Walk, atau Run, dan mengingatkan bahwa mencapai Run di semua capability bukanlah tujuannya; nilai bisnis yang menentukan seberapa jauh setiap capability perlu dimatangkan. Tiga ukuran praktis menunjukkan kemajuan: visibilitas biaya (berapa persen pengeluaran cloud yang di-tag dan dapat diatribusikan ke tim atau produk), tingkat optimasi (berapa persen rekomendasi pemborosan yang ditindaklanjuti dalam 30 hari), dan unit economics (biaya per unit bisnis, misalnya biaya per transaksi, per GB tersimpan, atau per pengguna aktif bulanan). Besar penghematan tiap perusahaan bergantung pada titik awalnya, jadi ukur ketiga angka ini terhadap baseline Anda sendiri, bukan terhadap angka industri yang dikutip.

Membangun Budaya FinOps di Tim Teknologi Indonesia

Budaya rekayasa Indonesia sering memperlakukan biaya cloud sebagai masalah keuangan daripada tanggung jawab rekayasa. Memecahkan pola ini memerlukan: (1) membuat biaya terlihat di tingkat tim (bukan hanya tingkat perusahaan) melalui dashboard showback; (2) merayakan kemenangan penghematan biaya di channel yang sama dengan peluncuran fitur; (3) menyertakan review FinOps singkat dalam standup rekayasa mingguan; dan (4) memastikan engineer memahami dampak bisnis dari pengeluaran cloud — untuk startup yang membakar $20.000/bulan untuk cloud, pengurangan 30% secara langsung memperpanjang runway.

Istilah kunci dalam artikel ini meliputi FinOps, Reserved Instance, Rightsizing, and Spot Instance.

Artikel Terkait

FAQ

Pertanyaan Umum

Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.

Mengapa post ini menyarankan menyelesaikan fase Inform sebelum langsung ke Optimize?

Tanpa visibilitas biaya lewat tagging dan deteksi anomali, optimasi berjalan buta: tim tidak tahu resource mana yang mendorong pengeluaran atau apakah upaya penghematan benar-benar berhasil. Framework FinOps Foundation memperlakukan Inform, Optimize, dan Operate sebagai fase iteratif, jadi visibilitas datang lebih dulu dan ditinjau ulang di setiap siklus. Set tag wajib (Environment, Team, Project, CostCenter) adalah titik awal yang praktis.

Apa saja sumber pemborosan cloud paling umum di deployment Indonesia?

Post ini menyebut lima: instance yang ukurannya ditetapkan saat peluncuran dan tidak pernah ditinjau, environment dev dan staging yang dibiarkan menyala di malam hari dan akhir pekan, volume EBS tidak terpasang yang tetap ditagih AWS sampai dihapus, biaya NAT Gateway untuk traffic yang bisa dihindari dengan gateway VPC endpoint atau NAT Gateway di zona yang sama, dan transfer lintas region dari replikasi yang salah routing. Masing-masing bisa ditemukan dengan skrip atau recommender dari provider cloud.

Seberapa besar penghematan yang bisa didapat dari penjadwalan shutdown environment non-produksi?

Menjalankan environment dev hanya pukul 08:00 sampai 20:00 WIB pada hari kerja memakai 60 dari 168 jam dalam seminggu, sehingga instance yang dihentikan ditagih sekitar 64% lebih sedikit jam instance. Volume EBS yang terpasang tetap ditagih selama instance berhenti, jadi penghematan untuk environment secara keseluruhan sedikit lebih rendah. Instance Scheduler on AWS atau fungsi Lambda yang dipicu EventBridge dapat mengotomatiskannya.

Diskon berbasis komitmen apa yang direkomendasikan dalam post ini, dan berapa besar penghematannya?

Menurut halaman harga AWS per 17 Oktober 2026, Standard Reserved Instance dan EC2 Instance Savings Plans memberi potongan hingga 72% dari On-Demand, dan Compute Savings Plans hingga 66% dengan fleksibilitas lintas keluarga instance, Region, Fargate, dan Lambda. AWS merekomendasikan Savings Plans dibanding Reserved Instance untuk EC2. Instance Spot berjalan dengan potongan hingga 90% tetapi bisa diambil kembali dengan pemberitahuan dua menit, sehingga hanya cocok untuk pekerjaan yang fault-tolerant.

Mengapa post ini memperingatkan agar tidak mematikan database produksi demi menghemat biaya?

Menghapus database produksi berisiko kehilangan data, dan bahkan stop yang bersih pun me-reset connection pool serta membuat cache dingin, sehingga pengguna pagi hari mendapat layanan yang lambat. Post ini merekomendasikan alternatif berkelanjutan: Aurora Serverless v2 untuk workload variabel, read replica, connection pooling PgBouncer, dan komitmen untuk baseline yang stabil. Komitmen itu bisa berupa Reserved Instance atau Database Savings Plans, yang menurut AWS memberi potongan hingga 35% untuk layanan termasuk Aurora dan RDS.