If you use OpsWorks you can have time-based instances. We use this in our staging environment so it is only online when we're at work.
We used to overestimate how large instances we needed. Our servers usually run just fine on micro-instances.
We self host JIRA, Jenkins, our own backoffice and other stuff on a small instance. The memory is not enough out of the box so we use swap space instead which is fine for our own services.
Hosting static websites on S3 + CloudFront is really cheap.
Hope some of this applies to your situation.
EDIT: Guess I'm not a heavy AWS user :) Hope someone replies with more relevant comments.
Have 2 ASG's in my kubernetes cluster
1 is for dedicated (or RI) instances that run more of stateful apps. The ones I don't want to move around a lot
The other ASG is for spot instances. I use a lambda job to replace a instance spun up with a spot instance. Those will stay up as long as it stays below the bid price. I've saved companies around 50-60% min of their ec2 bill this way.
I think an open source baseline would demonstrate you could do the customization, but with that kind of savings you have the opportunity to do this full time as a consultant, open source or not!
- Reserved Instance recommendations & purchasing - typically 12 month partial upfront
- CPU, Mem, Disk stats pushed up for EC2 & EBS to identify wastage & generate rightsizing recommendations
- Reports generated that go to management of "Optimization Opportunities" in $ for all areas that report to them (this one has the greatest effect in getting things actioned)
- Regular reports also go direct to application owners of potential optimisations on EC2, EBS, config, unused ELB, old snapshots, etc.
We also have a tool that starts and stops instances for people based on a schedule tag, which saves us a LOT of money. We report on people not using it for dev / test / uat.
My top 3:
- Buy reserved EC2/RDS/Elasticache capacity - this can be done even with no upfront payment, but you save more with up-front payment. This will save you roughly 30-60%. - Use spot instances. - For S3, use Reduced Redundancy storage where appropriate.
2 - If you have to run something large, make sure it can be paused and resumed later.
3 - Run that job on the cheapest Spot/OnDemand instance you need.
4 - If the price is right on the other side of the spot/demand side, provision a new machine, checkpoint the job, and restart.