How would you design a highly available, fault-tolerant multi-tier web application on AWS using Infrastructure as Code (IaC)?