Which solution will meet these requirements with the LEAST operational overhead?
Launch Amazon EC2 instances in multiple Availability Zones. Deploy Tomcat and PostgreSQL to all the instances by using Amazon Elastic File System (Amazon EFS) mount points. Use AWS Step Functions to deploy additional EC2 instances to scale for increased traffic.
Provision Amazon Elastic Kubernetes Service (Amazon EKS) in an Auto Scaling group across multiple AWS Regions. Deploy Tomcat and PostgreSQL in the container images. Use a Network Load Balancer to scale for increased traffic.
Refactor the Java application into Python-based containers. Use AWS Lambda functions for the application logic. Store application data in Amazon DynamoDB global tables. Use AWS Storage Gateway and Lambda concurrency to scale for increased traffic.
Use AWS Elastic Beanstalk to deploy the Tomcat servers with auto scaling in multiple Availability Zones. Store application data in an Amazon RDS for PostgreSQL database. Deploy Amazon CloudFront and an Application Load Balancer to scale for increased traffic.
Explanations:
While launching EC2 instances in multiple Availability Zones and using EFS for shared storage could work, this approach requires significant operational overhead to manage EC2 instances and scaling manually. Using AWS Step Functions for scaling is not ideal in this scenario as it adds complexity instead of simplifying operations.
Provisioning Amazon EKS with containers adds unnecessary complexity, especially since the company does not have access to the source code and cannot refactor the application into containers. EKS is better suited for microservices-based architectures, not monolithic applications like the one described.
Refactoring the application into Python-based containers and using AWS Lambda is not feasible as the company does not have access to the source code. Additionally, DynamoDB is not an appropriate database for this application, which relies on PostgreSQL. This solution introduces unnecessary complexity and does not align with the current application stack.
AWS Elastic Beanstalk offers a fully managed environment to deploy Java applications (including Tomcat). It supports auto scaling across multiple Availability Zones, automatically scaling based on traffic. Amazon RDS for PostgreSQL provides a fully managed database with automatic scaling. CloudFront and an Application Load Balancer further optimize traffic management, making this the least operationally intensive solution.