
ByAdnan AkramIT Infrastructure & DevOps Engineer
You can usually reduce AWS costs without touching reliability. Cloud bills rarely explode in one go. They creep: a test server nobody turned off, logs kept forever, a network setting that charges for every gigabyte.
For a small company it can become one of the biggest monthly bills, and a surprising share pays for nothing. This AWS cost optimisation checklist covers the recent pricing changes that caught many teams out, then the steps that save most for least effort.
Cost alerts and bill reviews are part of our cloud infrastructure service, but this checklist is work you can start yourself.
AWS pricing changes in 2024 and 2025 you may have missed
Every public IPv4 address now costs money
Since 1 February 2024, AWS charges $0.005 per hour for every public IPv4 address, attached or idle: about $3.60 per address per month.
Small on its own, but load balancers, NAT gateways and servers can each hold several, and forgotten Elastic IPs add up.
What to do: list your public IPv4 addresses (the VPC console's Public IP insights helps), release unused ones, and move servers that don't need one behind a load balancer or into private subnets.
Lambda now bills for cold starts (the INIT phase)
From 1 August 2025, AWS standardised billing for the Lambda INIT phase: the time a new instance of your function spends starting up. It used to be free for the most common setup (ZIP-packaged functions on managed runtimes). Now it's billed like normal execution time.
What to do: keep deployment packages small, move heavy setup out of the start-up path where you can, and check whether functions with heavy frameworks or many dependencies now cost noticeably more.
The Free Tier changed for new accounts
Accounts created on or after 15 July 2025 get a credit-based free plan (up to $200 in credits, lasting up to six months) instead of the old 12-month free tier. On a new project, plan for when the credits run out, and budget for hosting alongside what the MVP itself costs to build.
Step 1: get visibility into your AWS costs (one afternoon)
You can't cut what you can't see.
- Open Cost Explorer and group costs by service, then by usage type. Most bills are dominated by three to five lines.
- Set an AWS Budget with email alerts at, say, 80% and 100% of expected monthly spend.
- Turn on Cost Anomaly Detection so a spike (a runaway job, a leaked key from a compromised developer machine) emails you the same day.
- Tag resources by project and environment (
production,staging,dev) so you can see what each one costs.
Step 2: delete what you're paying for and not using
Pure waste is the fastest saving:
- Unattached EBS volumes left behind after servers were deleted.
- Old snapshots and AMIs nobody will ever restore.
- Idle load balancers, NAT gateways and Elastic IPs from old experiments.
- Stopped instances holding large disks (you still pay for storage).
- Development and staging environments running 24/7. Running them only in working hours (about 50 of the week's 168 hours) cuts their compute cost by roughly two-thirds.
Step 3: right-size EC2, Lambda and EBS
Servers are often bigger than they need to be, because guessing high at launch feels safer.
- Use AWS Compute Optimizer (free) to find over-provisioned EC2 instances, Lambda functions and EBS volumes.
- Shrink development databases, or stop them when unused.
- Switch gp2 EBS volumes to gp3: AWS prices gp3 up to 20% lower per GB, and you can set performance separately from size.
Step 4: use cheaper compute (Graviton and Spot)
- Graviton (ARM) processors. Graviton instances generally cost less than comparable x86 instances, and Lambda functions on arm64 are priced around 20% lower per GB-second. Node.js, Python, Java and Go workloads usually run on ARM with little or no change: test, then switch.
- Spot Instances for work that can be interrupted, such as batch jobs, CI runners and data processing. AWS advertises up to 90% off on-demand prices.
- Fargate or Lambda for spiky workloads, so you don't pay for idle capacity.
Step 5: buy Savings Plans, but only for your baseline
Once usage is stable, Savings Plans trade a one- or three-year commitment for a lower rate:
Plan | Maximum discount | Covers |
|---|---|---|
Compute Savings Plans | up to 66% | EC2, Fargate and Lambda, any region or instance family |
EC2 Instance Savings Plans | up to 72% | EC2 only, one instance family in one region |
Commit only to usage you're sure of for the whole term: your steady production baseline, never your peaks. Compute Savings Plans are safer for a growing startup, because they follow you if you change instance types or move to containers.
Step 6: cut storage and data transfer costs
These are the silent line items:
- S3 lifecycle rules: move old objects to cheaper storage classes automatically, or use S3 Intelligent-Tiering where access is unpredictable.
- CloudWatch Logs retention: by default logs are kept forever. Set retention (say 30 or 90 days) on every log group.
- NAT gateway traffic: NAT gateways charge per hour and per gigabyte processed. Traffic from private subnets to S3 or DynamoDB doesn't need to go through them: gateway VPC endpoints for those two services are free.
- Data transfer out: serve static files and images through CloudFront, and compress responses.
Step 7: make cost reviews a habit
- A monthly 30-minute review of Cost Explorer.
- A rule that every new resource gets tags.
- Budgets and anomaly alerts that someone actually reads.
- Infrastructure as code (Terraform or CloudFormation), so environments are torn down and recreated instead of lingering.
What not to cut when you reduce AWS costs
Saving money shouldn't create risk. Be careful with:
- Backups: keep them, test restores, and trim only retention you're sure you don't need.
- Multi-AZ for production databases: it costs more because it protects you from an outage.
- Monitoring and security logging: reduce retention, don't switch them off.
Frequently asked questions
What is the quickest way to reduce an AWS bill?
Find the three to five lines that dominate the bill in Cost Explorer. Then delete pure waste (unattached EBS volumes, old snapshots, idle load balancers) and run development environments only in working hours.
Does AWS charge for public IPv4 addresses?
Yes. Since 1 February 2024, every public IPv4 address costs $0.005 per hour, attached or idle: about $3.60 a month each. Release unused addresses and keep servers in private subnets where they don't need one.
Are Savings Plans worth it for a startup?
Yes, once usage is stable and you commit only to your steady baseline. Compute Savings Plans (up to 66% off) are the safer choice: they follow you across instance types, Fargate and Lambda.
The bottom line
Reducing AWS costs rarely means taking risks: delete what's unused, right-size what's oversized, use Graviton or Spot where they fit, and commit only to your steady baseline.
Start with visibility. It usually shows you exactly where to begin.
Want a second pair of eyes on your bill? Book a free consultation with our DevOps and cloud team and we'll go through it with you.
Sources
- AWS News Blog, "New – AWS Public IPv4 Address Charge + Public IP Insights": https://aws.amazon.com/blogs/aws/new-aws-public-ipv4-address-charge-public-ip-insights/
- AWS Compute Blog, "AWS Lambda standardizes billing for INIT Phase": https://aws.amazon.com/blogs/compute/aws-lambda-standardizes-billing-for-init-phase/
- AWS News Blog, AWS Free Tier update (July 2025): https://aws.amazon.com/blogs/aws/aws-free-tier-update-new-customers-can-get-started-and-explore-aws-with-up-to-200-in-credits/
- AWS Savings Plans pricing: https://aws.amazon.com/savingsplans/compute-pricing/
- AWS Lambda pricing (x86 and Arm): https://aws.amazon.com/lambda/pricing/
- Amazon EBS volume types (gp3): https://aws.amazon.com/ebs/volume-types/
- Amazon EC2 Spot Instances: https://aws.amazon.com/ec2/spot/
- AWS Compute Optimizer: https://aws.amazon.com/compute-optimizer/

