>Why do you get a surprise bill?
You get a surprise bill because of surprise usage of services billed based on usage.
If you ask anyone how much water or electricity they use per month, the first thing they're going to do is look at last month's usage.
Estimating what you need ahead of time is a hard problem.
In fairness, AWS doesn't give you a lot of tools to help you measure and predict how many "units" you'll use outside of running your thing and measuring. On the other hand, running your thing and measuring is the defacto way to figure out how much of something you'll use.
Finally, there are AWS services like EC2 and RDS you can run at a fixed cost to help you stay within budget. Traffic/bandwidth is the only thing that comes to mind that you're pretty much required to use without a way to fix the cost (although you can get pretty close with bandwidth limits on EC2 interfaces)