Containers

How GPO achieved infrastructure provisioning efficiency from weeks to minutes using AWS Proton

This post was co-written by Joshua Major, VP of Engineering, GPO, and Jesse Varnado, Director of Engineering, GPO.

Introduction

AWS Proton is a managed service for platform engineers to increase the pace of innovation by defining, vending, and maintaining infrastructure templates for self-service deployments. With AWS Proton, customers can standardize centralized templates to meet security, cost, and compliance goals. AWS Proton helps platform engineers scale their impact with a self-service model, which results in higher velocity for the development and deployment process throughout an application lifecycle.

Customer challenges

Like any other enterprise content provider, managing over a million pages of content across dozens of tailored websites brought application delivery to the forefront of GPO‘s technical challenges. Configuration change requests continually inspired a need for more process documentation and ongoing effort from multiple roles.

At GPO, the IT team provisioned new environments for each new customer that they onboard. This involved a hand-off process from field teams to the cloud teams, which required back-and-forth communication to get everything set up. The entire effort used to take days, along with a significant number of operational efforts. In addition to this, GPO had to repeat this hand-off process for every new customer they onboarded, which was not scalable.

A fully integrated application delivery pipeline seemed to require either managing an additional web application stack or losing out on the benefits of existing provisioning framework in the AWS Cloud developed using The AWS Cloud Development Kit. (AWS CDK), which is an open-source software development framework to define your cloud application resources using familiar programming languages.

GPO had to manage configuration options in multiple places: Command Line Interface (CLI)/CDK applications, the AWS Management Console, and the application’s repository. GPO’s primary roadblock was related to infrastructure configuration management. Every code commits to an Infrastructure as Code (IAC) repository that resulted in an AWS CodeBuild job followed by inconsistent client infrastructure. As business demand increased, multiple commits from multiple sources to the IAC code repository resulted in build failures and resource quota exhaustion.

In addition, every supported configuration option had to have documentation on each level of the stack it affected and a process to deploy it. Also, multiple roles handled manual updates to coordinate, deploy, and verify configuration-specific changes. Some changes were as simple as a few console clicks, while others involved configuration commits and manual deployments.

AWS Proton is a fully managed delivery service for deploying container and serverless applications with increased efficiency, consistency, and control. GPO discovered that AWS Proton enabled them to build a self-service portal for their field teams to deploy customer environments with the click of a button. Let’s dive into the implementation details of how GPO was able to achieve this.

Solution overview

In this implementation, we wanted to provide a push-button mechanism to provide an infrastructure platform as a service for GPO’s customers.

GPO Solution infrasturture platform architecture overview.

  • Step 1: AWS CDK app generates configurations to create a custom-resource
  • Step 2: Application Stage – AWS Proton bootstrapping
  • Step 3: AWS Proton call AWS CodeBuild
  • Step 4: AWS CDK application provisions customer environment

To accomplish this, we created an AWS CDK application that passes parameters required to provide infrastructure to the AWS Proton template. In AWS Proton, platform engineering teams use AWS Proton to create a “stack” presented as a reusable version-controlled template.

AWS Proton then takes the platform configuration from the AWS CDK application and generates AWS CloudFormation custom-resource definitions required to provision the target architecture for the client. These custom resources enable you to write custom provisioning logic in templates that AWS CloudFormation runs any time you create, update (i.e., when you changed the custom resource), or delete stacks.

This template again gets uploaded to AWS Proton to kick start a new AWS CodeBuild for AWS CDK application to provision AWS infrastructure for the customers.

Each client gets provisioned infrastructure for one service and one service-instance along with the development stage and production environment for each service. In this architecture, AWS CloudFormation is called twice to provision the target architecture: first by the AWS Proton and second by the AWS CDK application.

With this modular architecture built on top of AWS Proton, the GPO team could deploy 30+ sites in a single day, which is a 200% improvement on operational efficiency compared to managing configuration options in multiple places.

Conclusion

In this post, we presented a solution that helps you to provision environments, and then service and manage configurations using AWS Proton. In this post, we showed you how to maintain each client using their own repository and use AWS CDK’s self-mutating pipeline to provision infrastructure to onboard clients in an efficient and scalable manner.

About GPO

GPO is a content technology company that uses data to create scaled content for multi-location and e-commerce brands. Consumers can cut through the digital clutter and find the products and services they need with the help of the GPO platform. GPO solves today’s content problems: too little time, too few resources, too many complexities, and too small of a digital presence. Simply too many hurdles for brands get in front of customers. The GPO Platform scales content for brands to make sure their products and services are discovered in every digital channel, and by every customer. By leveraging a brand’s structured data set, the GPO Platform can create content that shows up exactly where customers are looking — in product descriptions, paid search landing pages, the Map Pack, blogs, store location pages, smartphone apps, and beyond. The destinations are limitless. GPO has created scaled content for brands since 2007 and works with global industry leaders across the automotive, restaurant, hospitality, and retail sectors.

AWS Proton is now generally available, and you can use it in the following AWS Regions: US East (N. Virginia), US East (Ohio), US West (Oregon), Europe (Ireland), and Asia Pacific (Tokyo). It’s free of charge, as you only pay for the underlying services and resources. Check out the technical documentation.

You can get started using the AWS Management Console here.

Headshot for Joshua Major

Joshua Major, VP of Engineering, GPO

Joshua Major is the VP of Engineering at GPO, a content technology company. With over 15 years of professional development experience, Josh regularly works with practitioners and product stakeholders to architect tools and systems that focus on scaling productivity and delivering value. Josh is an avid maker in his free time and enjoys the overlapping challenges of software, electrical, and mechanical engineering.

Headshot for Jesse Varnado

Jesse Varnado, Director of Engineering, GPO

Jesse Varnado is the Director of Engineering at GPO. He has more than 15 years of experience creating compelling user experiences and tools. Jesse leads technical and organizational initiatives at GPO to deliver scalable content solutions for enterprise brands. Jesse spends his free time taking his family hiking, camping, and overlanding.

Pratip Bagchi

Pratip Bagchi

Pratip Bagchi is a Sr. Solutions Architect with Amazon Web Services. He specializes in application modernization. He works with enterprise customers and partners to modernize their legacy applications, workloads and helps them to build reliable, secured and maintainable enterprise architecture on the AWS platform. Pratip spends his free-time in running, camping and gardening.

Adam Keller

Adam Keller

Adam is a Senior Developer Advocate @ AWS working on all things related to IaC, DevOps, and modernization. Reach out to him on twitter @realadamjkeller.