Multiple AWS services can be involved in deployment, depending on the technology used and the degree of operational control you want to have.
The following subsections will walk you through the various solutions available with regard to controlling the deployment stage of the software lifecycle.
Let’s start with AWS OpsWorks. OpsWorks is an application configuration management service that comes in three flavors: AWS OpsWorks for Chef Automate, AWS OpsWorks for Puppet Enterprise, and AWS OpsWorks Stacks. The first two OpsWorks flavors provide either a Chef Automate or Puppet Enterprise environment, managing the underlying infrastructure to run Chef Automate or Puppet Enterprise resources on your behalf, including patching, updating, and backing up the servers. For those of you who do not require the premium features of Chef Automate or Puppet Enterprise, OpsWorks Stacks offers a simplified application configuration management system that helps to simplify the configuration management of the AWS resources supporting your workload, including infrastructure such as servers, load balancers, databases, and so on. Both OpsWorks for Chef Automate and OpsWorks Stacks let you leverage Chef recipes. The former manages a fully fledged Chef server on your behalf and provides the premium features of Chef Automate. The latter does not deliver a Chef server environment but performs some of the work of a Chef server on your behalf.
OpsWorks Stacks is the legacy OpsWorks solution. It lets you define your workload in terms of stacks. A stack is meant to represent a group of resources that serve a common purpose and can group various types of resources. For instance, a stack could represent a web application, including the load balancers, the application servers, and the database server. You could also define multiple stacks for the same web application: one stack corresponding to the integration environment, another one for the user acceptance environment, and a separate stack for the production environment. Stacks are, in turn, composed of layers. A stack contains at least one layer. A layer represents a type of component within a stack. Therefore, coming back to the web application example, you could have one layer for the load balancers, one layer for the application servers, and one layer for the database server. OpsWorks Stacks can contain layers of compute resources running on AWS, such as Amazon Elastic Container Service (ECS) clusters and Amazon Elastic Compute Cloud (EC2) instances, Linux, or Windows. It can also handle layers with compute resources running outside of AWS, provided that they use one of the Linux distributions OpsWorks Stacks supports. OpsWorks Stacks has, however, some constraints. For instance, at the time of writing, it does not support the most recent Linux or Windows Server releases, which might be okay if you deal with legacy systems but less so if you prefer to build your workload on the most recent operating systems’ releases. Essentially, nowadays, it is preferable to work with the more recent flavors of OpsWorks, using either Chef Automate or Puppet Enterprise depending on what your preferred configuration management tool is. Both services allow you to configure, deploy, and manage the lifecycle of your software solutions. Both of them offer a starter kit so that you can take your workload for a test drive using a set of sample (Chef) recipes or (Puppet) modules.
But the OpsWorks family is only one of several options for deploying software on AWS.