The APAC Cloud Cost Visibility Gap
APAC engineering teams running Kubernetes workloads on AWS, Google Cloud, or Azure face a consistent financial operations challenge: cloud bills arrive at the end of the month with thousands of line items at the resource level, but APAC engineering decisions — which services to run, how to size them, which infrastructure to add — are made weeks earlier in Terraform pull requests and Kubernetes YAML files.
The gap between APAC engineering decisions and their financial consequences produces three chronic problems:
APAC infrastructure cost surprises: An APAC engineer upgrades a database instance in a Terraform PR — a reasonable technical decision — without knowing it adds $800/month to the APAC cloud bill.
Unknown per-service APAC Kubernetes cost: APAC cloud bills show EC2/GKE node costs, not which APAC services running on those nodes consume how much. APAC teams can't optimize what they can't measure at the service level.
APAC FinOps without APAC engineering leverage: APAC finance teams see the aggregate APAC cloud spend; APAC engineering teams make the decisions that drive it. Without shared cost visibility, APAC optimization conversations lack specific APAC action items.
Three tools address different stages of the APAC cloud cost lifecycle:
Infracost — shift-left cost estimation: surfaces APAC cost impact of Terraform changes in pull requests, before they're applied.
OpenCost — real-time Kubernetes cost allocation: attributes running APAC cloud spend to namespaces, deployments, and teams.
Kubecost — multi-cluster FinOps: adds rightsizing recommendations, multi-cluster aggregation, and budget governance on top of OpenCost.
Infracost: APAC Cloud Cost Shift Left
The APAC Terraform PR without Infracost
Without Infracost — APAC Terraform PR:
Engineer: "Upgrading APAC payment RDS from db.t3.medium to db.r6g.xlarge
for better performance. Reviewed and LGTM."
APAC Reviewer: "Looks good, merging."
30 days later — APAC cloud bill:
APAC payment RDS: $847/month (was $85/month with db.t3.medium)
→ $762/month APAC cost increase undetected at review time
With Infracost — APAC Terraform PR (automated PR comment):
Infracost Cloud Cost Estimate:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Project: apac-payments-infrastructure
Name Monthly Qty Unit Price Monthly
─────────────────────────────────────────────────────────────────────────
aws_db_instance.apac_payment_rds
├─ Database instance (modified) 730 hours $1.152 $840.96
└─ Storage (modified) 20 GB $0.115 $2.30
─────────────────────────────────────────────────────────────────────────
TOTAL MONTHLY COST +$762.04
APAC cost diff: +$762/month vs current
Infracost GitHub Actions setup
# .github/workflows/infracost.yml — APAC PR cost estimation
name: APAC Infracost Cloud Cost Estimate
on:
pull_request:
paths:
- 'terraform/**'
jobs:
infracost:
name: APAC Infracost
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
- name: Setup Infracost
uses: infracost/actions/setup@v3
with:
api-key: ${{ secrets.INFRACOST_API_KEY }}
# Generate APAC Terraform plan (required for accurate cost diff)
- name: APAC Terraform plan
run: |
cd terraform/apac-infrastructure
terraform init -backend-config="bucket=apac-terraform-state"
terraform plan -out=apac-tfplan.json
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# Generate APAC Infracost cost estimate from plan
- name: APAC Infracost diff
run: |
infracost diff \
--path terraform/apac-infrastructure \
--terraform-plan-flags="-out=apac-tfplan.json" \
--format=json \
--out-file=/tmp/apac-infracost.json
# Post APAC cost diff as PR comment
- name: Post APAC Infracost comment
run: |
infracost comment github \
--path=/tmp/apac-infracost.json \
--repo=$GITHUB_REPOSITORY \
--github-token=${{ secrets.GITHUB_TOKEN }} \
--pull-request=${{ github.event.pull_request.number }} \
--behavior=update
Infracost budget policies (Infracost Cloud)
# infracost.yml — APAC budget policy: block PRs exceeding threshold
version: 0.1
policies:
- name: apac-cost-budget
description: "Block APAC PRs adding more than $500/month of infrastructure"
type: percentage_threshold
percentage_threshold: 25 # Alert if APAC cost increases >25%
actions:
- type: block # Block merge if APAC threshold exceeded
comment_markdown: |
## APAC Cost Budget Policy Failed
This APAC Terraform change increases monthly costs by {{ .PercentageChange }}%
({{ .CostDiff }}), exceeding the APAC 25% threshold.
Approval required from APAC FinOps team before merging.
OpenCost: CNCF Kubernetes Cost Allocation
Installing OpenCost in APAC clusters
# Install OpenCost in APAC cluster (Helm)
helm repo add opencost https://opencost.github.io/opencost-helm-chart
helm repo update
helm install opencost opencost/opencost \
--namespace opencost \
--create-namespace \
--set opencost.exporter.cloudProviderApiKey="APAC_AWS_PRICING_API_KEY" \
--set opencost.prometheus.internal.serviceName=kube-prometheus-stack-prometheus \
--set opencost.prometheus.internal.namespaceName=monitoring
# Verify APAC OpenCost is running
kubectl get pods -n opencost
# NAME READY STATUS RESTARTS
# opencost-7d9b8c4f5-xkn2p 2/2 Running 0
Querying APAC cost allocation
# Port-forward APAC OpenCost API
kubectl port-forward -n opencost svc/opencost 9090:9090
# APAC namespace cost allocation for the past 7 days
curl "http://localhost:9090/allocation?window=7d&aggregate=namespace" | \
python3 -c "
import sys, json
data = json.load(sys.stdin)
for ns, cost in data['data'][0].items():
print(f'{ns}: \${cost[\"totalCost\"]:.2f}/7d (CPU: \${cost[\"cpuCost\"]:.2f}, RAM: \${cost[\"ramCost\"]:.2f})')
"
# Output:
# apac-payments: $1,240.30/7d (CPU: $890.20, RAM: $350.10)
# apac-kyc: $380.50/7d (CPU: $280.00, RAM: $100.50)
# apac-notification: $145.20/7d (CPU: $95.00, RAM: $50.20)
# monitoring: $280.40/7d (CPU: $180.00, RAM: $100.40)
OpenCost Prometheus metrics for APAC Grafana dashboards
# prometheus-opencost-scrape.yaml — scrape APAC OpenCost metrics
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: opencost
namespace: opencost
spec:
selector:
matchLabels:
app.kubernetes.io/name: opencost
endpoints:
- port: http
interval: 1m
path: /metrics
APAC OpenCost Prometheus metrics available for Grafana:
opencost_node_total_hourly_cost — APAC node cost per hour
opencost_pod_namespace_cpu_cost — CPU cost by APAC namespace
opencost_pod_namespace_memory_cost — RAM cost by APAC namespace
opencost_namespace_cost_total — Total APAC namespace cost (monthly)
opencost_deployment_cost_total — Cost by APAC deployment
Kubecost: Multi-Cluster APAC FinOps
Where Kubecost extends OpenCost
OpenCost provides:
✓ Real-time APAC namespace/deployment cost allocation
✓ Prometheus metric export for APAC Grafana
✓ AWS/GCP/Azure node pricing integration
✗ Savings recommendations (rightsizing, idle resources)
✗ Multi-cluster APAC cost aggregation
✗ Budget governance and APAC team RBAC cost views
Kubecost adds (commercial):
+ Rightsizing recommendations for APAC over-provisioned workloads
+ Multi-cluster APAC cost federation (50+ APAC clusters in one view)
+ APAC namespace budget alerts and anomaly detection
+ RBAC-scoped APAC cost visibility per team
+ Actual APAC cloud bill reconciliation
Kubecost savings recommendations
APAC Kubernetes Cluster Cost Report — Kubecost Savings Opportunities
Rightsizing Recommendations:
Service Current Request Actual Usage Savings/Month
apac-kyc-service (CPU) 4.0 cores 0.3 cores $187/month
apac-fraud-api (Memory) 8 Gi 1.2 Gi $95/month
apac-notification (CPU) 2.0 cores 0.1 cores $140/month
Total rightsizing savings: $422/month
Idle Resources:
apac-ml-worker (0 requests for 14 days) $280/month
apac-legacy-crm-db (8 connections/day avg) $145/month
Total idle resource savings: $425/month
Reserved Instance Opportunities:
3 m5.xlarge APAC nodes running 100% for 6+ months
→ 1-year reserved: $680/month savings vs on-demand
Total APAC cluster savings opportunity: $1,527/month
APAC Cloud Cost Tool Selection
APAC Cost Problem → Tool → Why
APAC Terraform cost surprise → Infracost PR comments surface APAC cost
(unexpected infrastructure spend) → impact before merge and apply
APAC developers unaware of cost → Infracost Shift-left: APAC engineers see
impact of their Terraform changes → cost in the PR, at decision time
APAC "which service costs what?" → OpenCost CNCF free allocation — namespace
(single APAC cluster) → and deployment APAC cost breakdown
APAC multi-cluster cost visibility → Kubecost Federated view aggregates APAC
(5-50 APAC Kubernetes clusters) → costs across all APAC clusters
APAC over-provisioned workloads → Kubecost Rightsizing recommendations
(CPU/memory request >> actual use) → identify APAC waste automatically
APAC FinOps without commercial tools → OpenCost CNCF open-source; Prometheus
(budget for open-source only) → metrics to APAC Grafana free
APAC team budget governance → Kubecost Namespace budget alerts and RBAC
(multi-team APAC Kubernetes clusters) → APAC team-scoped cost views
Related APAC Platform Engineering Resources
For the Terraform infrastructure that Infracost estimates costs for, see the APAC infrastructure-as-code guide covering Terraform, Pulumi, and OpenTofu.
For the Kubernetes platform that OpenCost and Kubecost monitor costs on, see the APAC Kubernetes platform engineering essentials guide covering vCluster, External Secrets, and ExternalDNS.
For the observability stack that stores OpenCost Prometheus metrics for APAC Grafana dashboards, see the APAC AIOps guide covering Dynatrace, PagerDuty, and Datadog.
Beyond this insight
Cross-reference our practice depth.
If this article matches your stage of thinking, the underlying capabilities ship across all six pillars, ten verticals, and nine Asian markets.