Review cloud cost risk as a blast-radius and guardrail problem, not as "use a smaller server."
Cloud bills usually explode through side channels: logs, NAT, egress, snapshots, autoscaling,
external IPs, container images, metrics cardinality, database storage growth, object lifecycle,
Marketplace products, LLM APIs, and forgotten temporary resources. This skill makes the agent check
whether a change has budget signals, hard or automated stops where safe, spend attribution, quotas,
lifecycle cleanup, and service-specific caps before the bill becomes the first alarm.
-
Build the cost surface ledger.
List every cost-bearing resource or data path touched by the change. Include compute, GPU,
serverless, Kubernetes nodes, databases, block storage, object storage, snapshots, container
registries, NAT, egress, load balancers, public IPs, CDN, logs, metrics, traces, Marketplace,
AI/LLM APIs, and third-party SaaS calls. Mark unknown surfaces as missing evidence.
-
Build scenario bills before optimizing line items.
Translate representative user outcomes into every billable request, byte, copy, log, retry,
replica, seat, and minimum charge. Run at least normal, growth, incident, and decline scenarios;
remove free-tier credits in a separate view and expose plan cliffs, mandatory enterprise features,
heavy-user tails, and costs that grow faster than useful outcomes.
-
Separate alerts from stops.
Budget alerts are signals, not circuit breakers. Check whether actual and forecast thresholds
exist at multiple levels such as 25, 50, 75, 90, and 100 percent, and whether non-production
environments have safe automated actions such as scale-to-zero, disable, pause, or owner paging.
Report when production needs manual approval instead of automatic destruction.
-
Reject imaginary provider spending limits.
Do not assume a general cloud account stops charging at the budget. Verify whether the platform
has a real hard spending limit for the exact subscription or account type. If it does not, require
quotas, caps, alerts, and safe automation instead of treating budgets as a hard stop.
-
Split billing blast radius.
Keep development, staging, production, experiments, customer-specific environments, and review
apps in separate accounts, projects, subscriptions, namespaces, or quota domains where possible.
A cost incident is worse when nobody can attribute or stop the offending slice.
-
Treat quotas as card limits.
Review service quotas for GPU, high-cost VMs, NAT, public IPs, load balancers, serverless
concurrency, container nodes, database storage, and expensive managed services. Prefer low
defaults and explicit increases over wide-open quotas that turn a bug into a bill.
-
Enforce required tags before creation.
Require a small controlled taxonomy such as owner, env, service, cost_center,
expires_at, and data_class when those concepts exist locally. Check case sensitivity and
allowed values. Report if cost allocation tags or labels must be activated before they are useful
in billing reports.
-
Give temporary resources an expiration.
Review review apps, test databases, temporary buckets, experimental GPUs, batch clusters, and
one-off environments for expires_at, owner, cleanup scope, and daily cleanup evidence. A manual
"remember to delete" note is not a guardrail.
-
Shut down the whole non-production stack.
Night and weekend scheduling should cover databases, NAT, load balancers, search clusters, Redis,
logging pipelines, dev Kubernetes node groups, disks, and public IPs, not only VMs. Report hidden
always-on services that keep charging after compute is stopped.
-
Cap autoscaling and concurrency.
Autoscaling is a spend multiplier. Check maximum instance counts, serverless concurrency,
queue-worker limits, batch parallelism, retry concurrency, and deployment surge settings. Missing
maximums are cost-risk findings even when autoscaling is useful.
-
Bound Kubernetes namespaces.
Require ResourceQuota and LimitRange or an equivalent policy when Kubernetes workloads can
create pods, jobs, PVCs, or high resource requests. Review CPU and memory requests because
inflated requests can trigger autoscaler node growth even when real usage is low.
-
Remove avoidable NAT tolls.
Check whether private workloads call cloud-native object storage, NoSQL, container registries,
or provider APIs through NAT when a private endpoint, gateway endpoint, or private API access
path exists. NAT hourly, processed-byte, and external IP charges should be explicit.
-
Account for data transfer.
Same-cloud traffic is not automatically free. Review internet egress, CDN origin traffic,
cross-AZ traffic, cross-region traffic, database-to-app placement, cache placement, and large
API responses. High-traffic services need deliberate AZ and cache decisions.
-
Audit public IPv4 and idle addresses.
Treat public IPv4 addresses, Elastic IPs, static external IPs, and load-balancer addresses as
billable inventory. Require an owner, purpose, and cleanup path for idle or detached addresses.
-
Use CDN and caches as cost controls.
Review cacheable assets, downloads, public API responses, image transforms, and CDN keys.
Cache hit rate, origin egress, purge behavior, and personalized-response safety should be known
before claiming CDN savings.
-
Control log ingest before retention.
Log volume can charge before storage retention matters. Split hot operational logs from audit or
forensic logs where the provider supports classes or buckets. Review log level, duplicate stack
traces, flow logs, NAT logs, load-balancer logs, Kubernetes audit logs, sampling, and retention.
-
Protect metric cardinality.
Reject unbounded labels such as raw user id, request id, email, raw URL path, tenant id without
budgeted bounds, SQL text, or arbitrary error messages. Metrics are for grouping; logs are for
lookup. Track billable metric growth where the telemetry backend exposes it.
-
Lifecycle object storage deliberately.
Add lifecycle rules for TTL, old versions, multipart uploads, storage class transitions, and
delete markers. Check minimum storage duration and small-object minimum billable size before
moving tiny or short-lived objects to colder classes.
-
Review block storage and snapshots.
Check volume type, provisioned IOPS, provisioned throughput, unattached disks, snapshot
retention, archive policy, and snapshot reference behavior. Snapshots are backup evidence and a
cost landfill unless retention and restore ownership are explicit.
-
Treat database storage growth as sticky.
Database autoscaling, logs, imports, temp tables, indexes, and replicas can grow storage that is
expensive or impossible to shrink in place. Require growth alarms, import runbooks, cleanup
paths, and restore or rebuild notes for large storage spikes.
-
Clean container registries.
CI can push images on every commit. Require lifecycle policies for untagged images, old tags,
branch preview images, cache layers, SBOMs, and build artifacts. Keep rollback images intentionally
retained and garbage-collect the rest.
-
Buy commitments last and only against the floor.
Savings Plans, Reserved Instances, committed use discounts, and long-term reservations should
follow idle cleanup, scheduling, rightsizing, storage cleanup, NAT reduction, and log reduction.
Sort time-bucketed usage and reserve only the conservative load that survives low-demand periods.
Calculate billing_efficiency = useful_work_time / billed_time and break-even utilization before
applying the advertised discount. Keep burst and uncertain demand variable, and price unused
commitment, cash lock-up, region or resource-shape restrictions, transferability, cancellation,
and demand decline. Report commitment risk when the floor is not proven stable.
-
Use spot or preemptible only for retryable work.
Cheap interruptible capacity fits queues, batch, CI, image processing, and analytics that can
retry safely. Do not treat it as safe for single databases, single Redis instances, singleton
search nodes, or stateful components without replication and recovery.
-
Monitor Marketplace, LLM, and SaaS costs separately.
Provider anomaly tools may not cover every third-party charge. AI models, vector search,
external APIs, observability vendors, security scanners, and Marketplace products need product
limits, usage attribution, owner alerts, and kill switches when they can spend independently of
compute.
-
Build a cost stop runbook.
Name the cheapest safe stop for each environment: scale service to zero, pause workers, disable
feature flag, lower concurrency, block provider calls, close public ingress, stop batch schedule,
delete temporary resources, or page an owner. Separate non-production automation from production
manual approval.
Prefer the narrowest configured mustflow command intent that covers the changed surface:
Do not infer live cloud billing checks, provider CLI calls, production shutdowns, dashboard queries,
or destructive cleanup outside the command contract. Report those as manual-only or missing.