Which changes should a solutions architect make to the application architecture to control costs and improve performance?
Create an Amazon CloudFront distribution and place the ALB behind the distribution. Store static content in Amazon S3 in an Infrequent Access storage class.
Store static content in an Amazon S3 bucket using the Intelligent Tiering storage class. Use an Amazon CloudFront distribution in front of the S3 bucket and the ALB.
Place AWS Global Accelerator in front of the ALB. Migrate the static content to Amazon EFS, and then run an AWS Lambda function to resize the images during the migration process.
Move the application code to AWS Fargate containers and swap out the EC2 instances with the Fargate containers.
Explanations:
Placing the ALB behind CloudFront would improve caching and reduce load on the EC2 instances. However, storing static content in S3 using the Infrequent Access storage class is not optimal for performance, as it could lead to retrieval costs and latency. The recommendation does not address the dynamic content or the overall application architecture for scalability.
This option optimally combines S3 for static content storage, using the Intelligent Tiering storage class to manage costs based on access patterns. CloudFront in front of S3 provides caching benefits, reducing latency and load on the application. It also improves performance and can help control costs by serving cached content efficiently.
Using AWS Global Accelerator can improve the performance of the application by optimizing the routing of traffic, but migrating static content to Amazon EFS is not cost-effective compared to S3. Additionally, using Lambda to resize images during migration does not directly solve the performance issues or control costs effectively.
Moving to AWS Fargate allows for a serverless architecture and can simplify management, but it doesn’t inherently resolve performance issues or control costs associated with dynamic content. Fargate may incur higher costs than EC2 instances for workloads with unpredictable usage patterns unless properly optimized.