AWS Certified Solutions Architect – Associate (SAA-C03) — Question 627
A company recently migrated its web application to the AWS Cloud. The company uses an Amazon EC2 instance to run multiple processes to host the application. The processes include an Apache web server that serves static content. The Apache web server makes requests to a PHP application that uses a local Redis server for user sessions.
The company wants to redesign the architecture to be highly available and to use AWS managed solutions.
Which solution will meet these requirements?
Answer options
- A. Use AWS Elastic Beanstalk to host the static content and the PHP application. Configure Elastic Beanstalk to deploy its EC2 instance into a public subnet. Assign a public IP address.
- B. Use AWS Lambda to host the static content and the PHP application. Use an Amazon API Gateway REST API to proxy requests to the Lambda function. Set the API Gateway CORS configuration to respond to the domain name. Configure Amazon ElastiCache for Redis to handle session information.
- C. Keep the backend code on the EC2 instance. Create an Amazon ElastiCache for Redis cluster that has Multi-AZ enabled. Configure the ElastiCache for Redis cluster in cluster mode. Copy the frontend resources to Amazon S3. Configure the backend code to reference the EC2 instance.
- D. Configure an Amazon CloudFront distribution with an Amazon S3 endpoint to an S3 bucket that is configured to host the static content. Configure an Application Load Balancer that targets an Amazon Elastic Container Service (Amazon ECS) service that runs AWS Fargate tasks for the PHP application. Configure the PHP application to use an Amazon ElastiCache for Redis cluster that runs in multiple Availability Zones.
Correct answer: D
Explanation
Option D is the correct answer because it decouples the application layers into highly available, fully managed services: static content is stored in Amazon S3 and accelerated by Amazon CloudFront, the PHP backend runs on AWS Fargate (ECS) behind an Application Load Balancer, and session state is externalized to a Multi-AZ Amazon ElastiCache for Redis cluster. Options A and C are incorrect because they continue to rely on a single EC2 instance, which represents a single point of failure. Option B is incorrect because hosting static content on AWS Lambda is inefficient compared to using S3 and CloudFront, and containerizing the PHP app is a more suitable migration path than rewriting it for Lambda.