Moving to the cloud swaps a server you bought once for a bill that arrives every month and changes with every decision your team or supplier makes. For many South Australian councils, agencies, not-for-profits and small businesses, the first sign of trouble is an invoice that is higher than the budget, with nobody quite sure why. This guide explains, in plain words, how to keep cloud spending visible, predictable and justified: where the money usually goes, the guardrails that stop surprises, the savings that are safe to take, how to budget for an annual plan, and what to write into a tender or contract. It covers AWS and Microsoft Azure, and the same ideas apply to Google Cloud. It is practical guidance, not financial advice.
Why cloud bills surprise people
Cloud pricing is not hidden, but it is spread across hundreds of small meters. The surprises usually come from the same few habits:
- Nobody owns the bill. ICT approves the account, finance pays the invoice, and the teams creating resources never see what they cost.
- Things are switched on and never switched off. Test servers, proof-of-concept environments and old snapshots keep running long after the project ends.
- Sizes are guessed once. A server sized for launch-day nerves keeps that size for years, even when it is mostly idle.
- Some charges are invisible in design. Data transfer out of the cloud, traffic between zones, NAT gateways, public IP addresses and log ingestion rarely appear on the architecture diagram, but they appear on the bill.
- Usage-priced services grow quietly. AI and large language model (LLM) services, logging and serverless functions are cheap per call and expensive at scale, especially when a bug or a bot drives traffic up overnight.
- There is no alert. The first time anyone looks is when the monthly invoice arrives, weeks after the spending happened.
Where the money usually goes
A first cost review almost always looks in the same places. This table is a checklist, not a promise of savings; what you find depends on how your environment was built.
| Cost area | What to look for | Typical fix |
|---|---|---|
| Compute | Virtual machines and databases with low average CPU and memory; development and test running around the clock. | Rightsize, schedule non-production off overnight and at weekends, move suitable workloads to serverless or containers. |
| Storage | Unattached disks, old snapshots and backups beyond the retention you actually need; everything in the most expensive storage tier. | Delete orphans, set lifecycle rules to move old data to cheaper tiers, align retention with your records and backup policy. |
| Networking | Data transfer out to the internet, cross-zone and cross-region traffic, NAT gateway processing, idle public IP addresses. | Use a CDN for public content, keep chatty services in the same zone where resilience allows, use private endpoints, release unused addresses. |
| Logging and monitoring | Verbose debug logs in production, long retention in hot storage, duplicate logs sent to several tools. | Set log levels and retention per environment, archive older logs to cheaper storage, keep what security and records rules require. |
| Licences | Windows Server and SQL Server licences paid twice, or premium editions where standard would do. | Check whether existing licences can be brought to the cloud (for example Azure Hybrid Benefit), and review editions. |
| AI and LLM usage | Large models used for simple tasks, long prompts resent on every call, no per-day limit. | Choose the smallest model that passes your evaluation, cache repeated answers, set daily caps and alerts. |
| Commitments | Steady workloads paid at on-demand rates for years; or commitments bought for workloads that later changed. | Commit only for the stable baseline, after rightsizing, and review coverage quarterly. |
Step 1: make spending visible
The FinOps Foundation describes cloud financial management as three repeating phases: inform, optimise and operate. Inform comes first, because you cannot manage a bill you cannot explain.
- Separate accounts or subscriptions for production, non-production and each major system. This is the single most useful structure for both security and cost, and it is part of a good multi-account landing zone.
- Tag everything with a small, enforced set of tags: system, environment, owner, cost centre and, for councils, the business unit or service area. Use policy to block untagged resources rather than chasing them later.
- Give each owner a view of their own costs. AWS Cost Explorer and Azure Cost Management can filter by tag and account. A monthly one-page report per system, sent to the business owner as well as ICT, changes behaviour faster than any tool.
- Track a unit cost where you can: cost per customer request, per online payment, per active user or per document processed. A rising bill with a falling unit cost is growth; a rising unit cost is a problem.
Step 2: guardrails that stop surprises
Guardrails catch mistakes in hours instead of at month end. Set them up before the first workload goes live:
- Budgets with alerts for each account or subscription, alerting at, say, 50, 80 and 100 percent of the monthly figure, sent to the system owner and ICT rather than one person’s inbox. AWS Budgets and Azure Cost Management budgets both support this.
- Anomaly detection. AWS Cost Anomaly Detection and Azure cost anomaly alerts flag unusual daily spend, such as a runaway function or a misconfigured backup, before it compounds.
- Daily caps on usage-priced services. For AI assistants, chatbots and public APIs, set rate limits and a daily spending cap in the application itself, so a bot or a loop cannot run up a large bill overnight. Our guide to guardrails for LLM applications and AI agents covers spend limits alongside the security controls.
- Policy on what can be created. Restrict regions to the Australian regions you have approved, restrict very large or specialist instance types to those who need them, and require tags. This supports data residency and cost control at the same time.
- Automatic expiry for experiments. Sandboxes and proof-of-concept accounts get an end date and a small budget, and are cleaned up when either runs out.
Step 3: safe savings to take first
Start with savings that reduce waste without reducing resilience or security:
- Schedule non-production. A test environment that only needs to run 12 hours a day on weekdays runs for 60 of the 168 hours in a week, so turning it off the rest of the time cuts its running hours by roughly 64 percent. Instance Scheduler on AWS and Start/Stop VMs v2 on Azure can automate this.
- Clean up orphans. Unattached disks, old snapshots and images, unused load balancers and idle public IP addresses. AWS now charges for every public IPv4 address, in use or not.
- Rightsize with evidence. Use at least two to four weeks of utilisation data, and tools such as AWS Compute Optimizer or Azure Advisor, then resize one step at a time and watch performance.
- Tier and expire storage. Lifecycle rules move older objects to infrequent-access or archive tiers and delete what your retention schedule says you no longer need. Check the relevant State Records disposal schedule before deleting council or agency records.
- Tune logging. Keep detailed logs where security and incident response need them, reduce noise elsewhere, and move older logs to cheaper storage.
- Use the right hosting pattern. A public website served as static files through a CDN costs far less to run, and is harder to attack, than a website on always-on servers. Our static website on AWS architecture shows the pattern.
Commitment discounts without regret
AWS Savings Plans and Reserved Instances, and Azure reservations and savings plans, give lower rates in exchange for a one- or three-year commitment. They are worth using, but only in the right order:
- Rightsize and schedule first. Committing to waste locks it in.
- Commit to the steady baseline only. Cover the usage that runs every hour of every day, and leave peaks, projects and anything due to change on demand.
- Prefer flexible options such as compute savings plans when your architecture may change during the term.
- Line commitments up with contracts and budgets. A three-year commitment for a system with a two-year contract, or a replacement already planned, is a risk, not a saving.
- Review coverage and utilisation every quarter, and name who is allowed to approve new commitments.
Cost control without cutting corners
Some savings are false economies for public sector and regulated work. Do not take them without a deliberate, documented decision:
- Moving workloads or backups to cheaper overseas regions. Australian regions often cost more than some overseas regions, but residency is usually a requirement, not a preference. See Australian data residency for SA Government ICT.
- Cutting backups, restore tests or disaster recovery. Match these to the agreed recovery time and recovery point, and test them. See backup and disaster recovery for SA Government ICT.
- Turning off security logging that you need to detect and investigate incidents, or that the Essential Eight and your security policy expect.
- Collapsing to a single zone for a system the public relies on, just to save on cross-zone charges.
Budgeting for a council annual business plan
Councils and agencies plan on annual cycles, and cloud bills move monthly. A few habits close the gap:
- Forecast from usage drivers, not last year’s invoice: expected users, transactions, storage growth and planned projects, with an allowance for price changes.
- Budget cloud as operating expenditure and agree with finance how project, run and commitment costs are treated, before the first invoice arrives.
- Check the billing currency. If any service or marketplace product is billed in US dollars, exchange-rate movements will affect your budget.
- Show costs back to service areas using tags, even if you never charge them internally. Visibility alone improves decisions.
- Report a simple monthly pack to the executive or audit committee: spend against budget, forecast to year end, top changes and actions taken.
Writing cost control into a tender or contract
If cost management is not in the scope, it will not be in the price. In a request for tender, panel RFQ or statement of work for a cloud system or managed service, ask for:
- A running-cost estimate with its assumptions (users, transactions, storage, data transfer, environments), not only the build price.
- An account and tagging structure that lets you see cost by system, environment and service area.
- Budgets, alerts and anomaly detection configured from day one, with named recipients on your side.
- A monthly cost report with recommendations, and a quarterly optimisation review in any managed service.
- Clear ownership of the cloud accounts and billing relationship, so you keep control of the environment and the data if the supplier changes. Our guide to provider due diligence and exit planning covers this in more depth.
- Usage caps and alerts for AI and other usage-priced services, with who may raise them.
- Infrastructure as code, so environments can be rebuilt, scaled down or removed cleanly.
The small business version
A small business with a website, an online shop or one cloud application does not need a FinOps team, but it does need the basics:
- Turn on a monthly budget alert on day one, sent to two people.
- Make sure the cloud account is in your business’s name, with your own administrator login and multi-factor authentication, even if a supplier manages it.
- Ask your supplier for a one-page list of what is running, what each part costs per month and what it is for.
- Delete anything nobody can explain, after checking it is not a backup.
- Set a daily cap on any AI or messaging service connected to your website.
A 90-day plan
- Weeks 1 to 2: see the bill. Confirm who owns each account, turn on budgets and anomaly alerts, export a cost breakdown by service and account, and list every system and owner.
- Weeks 3 to 6: structure and tag. Agree the tag set, apply it, enforce it with policy, and send the first monthly report to each system owner.
- Weeks 7 to 10: take the safe savings. Schedule non-production, remove orphaned resources, set storage lifecycle and log retention rules, and rightsize the clearest cases.
- Weeks 11 to 12: commit and operate. Buy commitments for the stable baseline only, set a quarterly review, and add running-cost and cost-reporting clauses to your contract templates.
Questions to ask your supplier or IT team
- Who owns our cloud accounts and billing, and can we see the bill directly?
- What alerts will tell us if spending jumps, and who receives them?
- What does each system cost per month, and what is the cost per user or transaction?
- Which environments run outside business hours, and why?
- What commitments have we bought, when do they end, and how well are they used?
- Which cost savings would reduce our resilience, security or data residency, and have we ruled them out?
- What limits stop an AI service or public API from running up a large bill overnight?
Talk to an Adelaide team
If your cloud bill is hard to explain or keeps growing, talk to us about cloud cost control or call 0402 401 584. We can start with a short, fixed-price cost review of your AWS or Azure environment that produces a prioritised list of safe savings, budgets and alerts, and a tagging and reporting structure your team can keep running. Learn more about our DevOps and cloud engineering and managed IT and cyber security services.
