I want to show you an example of a well structured application stack. Take a look at this diagram. First of all, we have Amazon Route 53, which is a DNS traffic rerouting service, and that will distribute the load, distribute the traffic, either to CloudFront, which is a counter delivery service, or typically static content, and that traffic would be shared be an S3 Bucket, or in the case where it's an API endpoint, we need to reroute that traffic to an elastic load balancer.
Now what an elastic load balance would allow us to do, allow us to create multiple web servers and they would handle the load evenly. This would enable us to create more resilient infrastructure because those web services could be deployed in multiple availability zones.
For example, in that orange dotted line on the top, that's one availability zone and the bottom you see another. You can use Elastic Beanstalk to deploy your application which is platform as a service, or you can create your own instituting senses, you could leverage ElastiCache. ElastiCache uses Redis or Memcache, they are highly efficient, have very fast services, typically you would use it for caching, for sessions, they're persistent, but they're still super, super fast.
And then you can use normal databases by leveraging RDS, you can create a master-slave replication, and you can replicate them in different availability zones as well. Here is a typical well structured stack. It has a lot of resources. That's why you don't want to create it manually, because maybe you can do it manually once, maybe two times, but what if you need to replicate it in 10 regions?
And then if something in one fails, one resource fails, you want to recreate the entire stack again and again. This is, creating manually is not the best thing to do, that's why you need to learn automation, and that's exactly what we'll be doing next.