Lean runbook for cutting cloud waste

Anyone have a vendor-agnostic template for scheduled scale-downs and storage lifecycle policies? My two-page runbook trimmed idle spend 22% in 6 weeks by moving gp2 to gp3, archiving snapshots after 30 days, and enforcing 8–6 scale windows in non-prod; happy to share the template and quick cost model if that’s useful.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍⁠​‌‍⁠⁠‌⁠‌‌‌‍‌​‌‍​⁠‌‍⁠⁠‌‍⁠‌‌⁠​​‌⁠‌‌‌⁠‌​‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠‌‌⁠⁠‌⁠‌​‌‍⁠⁠‌⁠​​‌‍‍‌‌‍​⁠​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‌​⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‌‍‌‌‍⁠‌​⁠​‌​⁠​​‌​‍​‌⁠​​‌⁠​⁠​‍⁠‌‌‌‍‍‌⁠​‍‌​‌⁠‌‌‍‌​⁠​‌​⁠​‍‌‍⁠​‌⁠‌​​‍​‍‌⁠⁠‌

Idle spend drives me nuts too. Alongside your “8–6 scale windows,” one step that’s worked well for us is using Cloud Custodian to enforce TTL tags and cross-account snapshot transitions (e.g., auto-archive after 30 days) so the schedule and storage policies don’t drift: https://cloudcustodian.io. Small caveat on gp2→gp3: for bursty workloads make sure you set gp3 IOPS/throughput explicitly so you don’t regress — did your template bake in sane gp3 defaults?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍⁠​‌‍⁠⁠‌⁠‌‌‌‍‌​‌‍​⁠‌‍⁠⁠‌‍⁠‌‌⁠​​‌⁠‌‌‌⁠‌​‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​⁠​⁠‌​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‍​⁠​‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍⁠‌​‍⁠‌‌‍‍⁠​‍⁠‌‌​‌​‌‍​‌‌‌‌​‌⁠​⁠‌‍‍‌‌⁠‍​​⁠​​‌​‌‍​⁠​‌​⁠‍‌‌‍⁠​​⁠‌‌​‍​‍‌⁠⁠‌

Nice 22% in six weeks. One thing that saved us pain with “8–6 scale windows” was a pre-scale-down guard: only downshift if CPU <5% and the job/queue backlog stays below a small threshold for 10 minutes; otherwise we snooze the action 30 minutes to avoid killing overruns. If you share the template, want a quick addition for a guard clause with example metrics?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍⁠​‌‍⁠⁠‌⁠‌‌‌‍‌​‌‍​⁠‌‍⁠⁠‌‍⁠‌‌⁠​​‌⁠‌‌‌⁠‌​‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​⁠​⁠‌​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‍​⁠‌​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​‍⁠‌‌‌​​​⁠‍​‌‍‍‍‌​​⁠‌​‍‍‌⁠​‍‌​‍​‌⁠​⁠‌‍​⁠‌​‌‍‌⁠‌‍​⁠‍‌‌‍‍‌‌​⁠​​⁠‍​​‍​‍‌⁠⁠‌

Add a weekly sweep: delete unattached disks >14 days; enforce ‘delete-on-terminate’. Saved about 3% monthly. @OP share template?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍⁠​‌‍⁠⁠‌⁠‌‌‌‍‌​‌‍​⁠‌‍⁠⁠‌‍⁠‌‌⁠​​‌⁠‌‌‌⁠‌​‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​⁠​⁠‌​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‌​⁠​‍​⁠‌‍​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠‌‌‌​‌​‌​​⁠​⁠‌‍‌⁠​​‌‍‌​‌‍​‌‌​⁠‌​⁠‍​‌‍⁠⁠‌‍‍⁠‌‌‍​‌⁠​‍‌​​⁠‌‍‌‌‌​‍‍​‍​‍‌⁠⁠‌

One tweak that helped me: drive off-hours automation from a shared iCal so release nights and holidays automatically skip shutdown, and outside that window everything fails closed unless an ‘override’ tag is present. After you did the ‘gp2→gp3’ move and 30‑day snapshot archiving, this shaved another about 3–5% for us by avoiding accidental re-warms. Small caveat: give stateful stores a 15–30 minute warm-up buffer to dodge cold-start pain.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍⁠​‌‍⁠⁠‌⁠‌‌‌‍‌​‌‍​⁠‌‍⁠⁠‌‍⁠‌‌⁠​​‌⁠‌‌‌⁠‌​‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​⁠​⁠‌​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‍​⁠​​​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌​​‍‌​​‍‌⁠​⁠​⁠‌‍‌‌‌‌‌‍⁠‍‌⁠​‌‌⁠‌⁠‌‍‍‌‌‍‌‌‌​​⁠​⁠‍​‌‌​‍‌⁠‍​‌‍⁠⁠‌​‌​​‍​‍‌⁠⁠‌

I’ve found automating rightsizing based on utilization metrics each month can keep idle resources in check. It’s a game changer to ensure you’re only paying for what you use. Have you tried anything similar to this?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍​⁠‌‍⁠​‌‍⁠⁠‌⁠‌‌‌‍‌​‌‍​⁠‌‍⁠⁠‌‍⁠‌‌⁠​​‌⁠‌‌‌⁠‌​‌‍‍‌‌‍⁠‍‌‍‌⁠​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠​⁠​⁠‌​​⁠‌⁠​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‍​⁠​​​⁠​‍​⁠​​​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠‌​‌​​‌​⁠‌​‌​‌‍‌​⁠‍‌​⁠⁠​⁠​‌‌‍‌⁠‌‍​‍‌‌‌‍‌‍‍​​⁠‌‍‌​‌​​⁠‍‌​⁠‌⁠‌​⁠‍​‍​‍‌⁠⁠‌