High availability vs Fault Tolerance in AWS
Both High availability and Fault Tolerance seems same however still there is some difference between them.
High availability
Lets say you have an application that has to run across minimum of 2 EC2 instances with an SLA of 99.9% which allows a downtime of 43.83 minutes per month then we can architect our infrastructure as above. So if an instance fails, we still have plenty of resources available or if an entire availability zone fails then we still have the minimum of 2 EC2 instances up and running to maintain the required SLA. If another failure occur at a same time in another AZ then SLA will be impacted.
Fault Tolerance
Lets say in above infrastructure if an entire region fails then the instances will always be available in another region, this means that the infrastructure will be fault tolerant to region level failure. This results into uptime percentage (%) increase. Now we can maintain operations if an entire region fails. This offers far better uptime availability then previous High Availability infrastructure we discussed. But this solution comes indeed with an increased cost.
Conclusion
From above two solutions, we can conclude that Fault tolerant systems are intrinsically highly available but as we have seen, it is not necessary for a Highly available solution to be Fault Tolerant. However this depends on the business impact you have when components begin to fail.