Which option meets these requirements?
Prepackage the software into an AMI and then use Auto Scaling to deploy the production fleet. For software changes, update the AMI and allow Auto Scaling to automatically push the new AMI to production.
Use AWS CodeDeploy to push the prepackaged AMI to production. For software changes, reconfigure CodeDeploy with new AMI identification to push the new AMI to the production fleet.
Use AWS Elastic Beanstalk to host the production application. For software changes, upload the new application version to Elastic Beanstalk to push this to the production fleet using a blue/green deployment method.
Deploy the base AMI through Auto Scaling and bootstrap the software using user data. For software changes, SSH to each of the instances and replace the software with the new version.
Explanations:
While prepackaging software into an AMI and using Auto Scaling can deploy new instances quickly, it is not the most efficient approach for frequent updates. Each software change would require creating a new AMI, which can be time-consuming and disruptive, particularly for an application that updates multiple times a day.
Using AWS CodeDeploy to push an AMI is not the best practice, as CodeDeploy is designed for deploying application code rather than AMIs. The process of reconfiguring CodeDeploy with new AMI identifiers for each update can also lead to increased complexity and downtime, especially with frequent updates.
AWS Elastic Beanstalk is specifically designed for deploying and managing applications easily. By using a blue/green deployment method, the team can minimize downtime during updates. This approach allows for seamless application updates and rollback capabilities, making it ideal for an environment with multiple updates per day.
Bootstrapping software using user data can lead to inconsistencies and delays in deployment. SSH-ing into instances for software updates is not scalable and can cause service disruption. This method does not provide the automation and management capabilities needed for a production environment with frequent updates.