Managing cloud cost is much easier if you target it from the beginning.
Having worked in this space, the things that work are mostly centred on making it easier to attribute the source of costs, proactively exploring your bill on multiple dimensions, thinking about the problem early in the lifecycle, and looking for opportunities to delete or turn off unused resources.
The more successful practices that will deliver quickly:
* tagging everything to able to understand who owns what and it is used for
* separating workloads into different accounts (might be easier than tagging and crudely achieves the same objective: attribution)
* turning off unused instances at night in dev environments
* automating the removal of incorrectly tagged resources in non prod environments
* automating image and snapshot cleanup
* avoiding right sizing (it’s trickier than you think and the effort is better spent rearchitecting for more cloud native usage based resource types like serverless)
* exploring your bill and slicing it by service type, account, department and other dimensions you’ve tagged, paying attention to size and trends
* paying attention to network paths (AWS is notorious for expensive outbound and it’s worth understanding how it works and how to architect around it)
* use templates to deploy resources (Terraform/CloudFormation/ARM) instead of console so they’re easier to tear down
* set retention limits on other expensive storage resources (hello CloudWatch Logs)
* being careful with high level services that leverage others under the hood, especially when they’re immature (eg Control Tower + constantly tearing down resources will blow out AWS Config charges)
* using cost alarms
* explore using spot instances, reserved instances or savings plans for EC2 instances