Which action will allow the team to quickly meet these objectives?
Create two Amazon Lightsail virtual private servers for Node.js; one for test and one for production. Build the Node.js application using existing processes and upload it to the new Lightsail test server using the AWS CLI. Test the application, and if it passes all tests, upload it to the production server. During the trial, monitor the production server usage, and if needed, increase performance by upgrading the instance type.
Develop an AWS CloudFormation template to create an Application Load Balancer and two Amazon EC2 instances with Amazon EBS (SSD) volumes in an Auto Scaling group with rolling updates enabled. Use AWS CodeBuild to build and test the Node.js application and store it in an Amazon S3 bucket. Use user-data scripts to install the application and the MySQL database on each EC2 instance. Update the stack to deploy new application versions.
Configure AWS Elastic Beanstalk to automatically build the application using AWS CodeBuild and to deploy it to a test environment that is configured to support auto scaling. Create a second Elastic Beanstalk environment for production. Use Amazon RDS to store data. When new versions of the applications have passed all tests, use Elastic Beanstalk ‘swap cname’ to promote the test environment to production.
Modify the application to use Amazon DynamoDB instead of a local MySQL database. Use AWS OpsWorks to create a stack for the application with a DynamoDB layer, an Application Load Balancer layer, and an Amazon EC2 instance layer. Use a Chef recipe to build the application and a Chef recipe to deploy the application to the EC2 instance layer. Use custom health checks to run unit tests on each instance with rollback on failure.
Explanations:
While creating two Amazon Lightsail servers for testing and production can provide a basic environment for deployment, it lacks the automated build, test, and deployment processes required for daily updates without downtime. Lightsail does not offer auto-scaling capabilities or integrated CI/CD tools necessary for handling unpredictable concurrent users effectively.
This option proposes using AWS CloudFormation with EC2 instances in an Auto Scaling group and a Load Balancer. However, it involves significant manual steps for building and deploying the application, and does not provide a seamless process for rolling updates or daily deployments without downtime. Moreover, the testing and deployment process may be more complex than necessary for frequent updates.
Configuring AWS Elastic Beanstalk allows for automated building and deployment of the application, supporting auto-scaling to manage unpredictable user loads. It provides a streamlined CI/CD workflow with integrated monitoring and allows for easy swapping of environments for deployment. Using Amazon RDS for the database enhances reliability and scalability.
Although this option suggests modifying the application to use DynamoDB and setting up AWS OpsWorks for deployment, it involves more complexity with Chef recipes for deployment and custom health checks. This approach does not simplify the CI/CD process for daily updates and lacks the seamless environment swapping offered by Elastic Beanstalk, making it less suitable for rapid iteration during the trial period.