The challenge in many technology organizations is “the last mile” of the software systems life-cycle. This last mile is often burdened by manual processes and other constraints that make it challenging to deliver software to users on a regular basis.
Advent needed a way to get fully provisioned environments (with deployments) quickly rather than waiting days or weeks through burdensome manual and error-prone processes. As a result of the manual processes, engineers would often retain environments for days, weeks, or more because of environment scarcity.
Working with Advent, Stelligent created a self-service system in which engineers can automatically launch and deploy software to their AWS environments — at the click of a button. This fully automated system was built using several AWS services along with Jenkins (a Continuous Integration server), Chef, Ruby, Cucumber, and Powershell. The AWS resources included, but were not limited to, the use of:
The application stack included Windows 2012, .NET/C#, and SQL Server. The entire infrastructure was committed as code to Advent’s version-control repository.
Jenkins was used to run the self-service components that Stelligent implemented enabling developers to enter a few required parameters and click a single button to launch a new environment and deployment.
Ruby was the chosen language for implementing the orchestration layer and for general-purpose scripting.
Amazon SimpleDB was used for storing configuration values. Key-value properties were stored in SimpleDB and retrieved through multiple stages of the pipeline. For example, IP addresses were stored in an encrypted format in SimpleDB and then retrieved at later stages of the pipeline.
Chef along with AWS CloudFormation was used for scripting the environments. CloudFormation was used to define the AWS resource configuration and Chef was used to define the EC2 instance internal configuration (i.e., operating system configuration, server installation and configuration, etc.). For example, in CloudFormation the size and type of the EC2 instance may be specified and then Chef scripts are executed to install components such as Internet Information Server (IIS) onto the EC2 instances. The combination of CloudFormation and Chef proved to be very effective for fully automating the infrastructure.
After the environments were configured with Chef and CloudFormation, Jenkins ran Cucumber scripts to verify the environments were configured correctly — including checks such as determining if IIS was installed and configured properly.
Advent executive Shayne Clausson said, “Stelligent quickly integrated with our development and operations teams at Advent. With their combined expertise in Continuous Delivery and AWS, we were able to stand up the infrastructure in much less time.” Clausson added, “With this fully automated approach, we can be more adaptive and responsive with our customers.”
The Cloud Delivery solution resulted in several benefits for Advent:
- Developer focus on value-adding features over running manual processes
- Higher levels of security using VPC and encryption
- Reduced cost and idle resources through elasticity
Each of these benefits is described in greater detail below.
As part of the deployment pipeline configured with the Continuous Integration server, developers are able to launch their own environments at the click of a button rather than waiting for others to manually create an environment, while providing the required governance. This enables developers to test and fix their code at an accelerated pace since they are no longer burdened by any internal resource constraints. By getting environments on demand, developers focus on value-added features for their users rather than fiddling with manual processes.
AWS helps Advent maintain a high level of security by using services such as IAM users and roles, EC2 security groups, and VPC. IAM lets Advent define who has access to which AWS resources and which actions they can perform with these resources. EC2 security groups restrict port access and can limit access down to a specific IP address. Lastly, VPC provides Advent the capability of defining a virtual private network so that they can keep their AWS resources behind their firewall and inaccessible to the outside world.
Advent’s architecture required support for scaling infrastructure resources up and down based on demand. With AWS’s Auto Scaling feature, Advent was able to manage the EC2 instance demand in their fleets. What’s more, if their instances became defective or inaccessible, autoscaling simply replaced them with new, working instances. The autoscaling configuration was defined in the CloudFormation scripts.
Clausson summarized that “…any authorized project user can get access to an environment when requested rather than spending time back and forth with request tickets, emails, etc. This reduces what would often become a multi-week process to an hour or two.” Clausson added, “Because the infrastructure that Stelligent developed was fully documented and versioned, we’re able to maintain and extend the infrastructure going forward.”