April 21, 2020
AWS CloudFormation is a foundational AWS service that allows the management of AWS resources via JSON or YAML templates.
As an AWS Advanced Consulting Partner focusing on Infrastructure as Code, Ordinary Experts has a deep understanding and experience with writing, managing, and optimizing CloudFormation based infrastructures.
We understand CloudFormation, and we also understand how to manage large and complicated infrastructures using CloudFormation and related tools. We recommend always storing your infrastructure code in a source control repository like git.
Additionally, we recommend using a branching and release strategy that makes sense for your team to manage your infrastructure code as well as your application code. We normally use git flow, but many systems work.
Case Study - Complete Recycling
For Complete Recycling, we used CloudFormation with Terraform to model the architecture components.
While many consider CloudFormation and Terraform to be “competing” technologies, we frequently use them together. Terraform can model a CloudFormation stack just like any other AWS resource. So we can write our infrastructure in CloudFormation, and then manage the parameters and deployment in Terraform. This is the method we use for Complete Recycling to manage all their environments automatically on AWS.
We built an AMI pipeline using Packer - this let us build a hardened base AMI upon which we deploy the application code.
For deploying changes to the running infrastructure, there are two workflows:
- Application Deployments
- Infrastructure Changes
For normal application deployments, the automation uses CodeDeploy to update the application code and run any post-update hooks necessary. When changing intrastructure related code, when releasing a new AMI for example, we use the CloudFormation UpdatePolicy attribute to roll out a new version of our application without downtime.
Drupal 8 on AWS Marketplace via CDK
The Ordinary Experts Drupal 8 Pattern is an open-source AWS CloudFormation template powered by the Cloud Development Kit (CDK) that offers an easy-to-install AWS infrastructure solution for quickly deploying a Drupal 8 project, using both AWS and Drupal best practices. The template makes it easy to spin up a production-ready, full-feature infrastructure ready to host scalable Drupal 8 app in the AWS cloud.
Drupal is a free and open-source web content management framework written in PHP, providing powerful tools to meet a broad range of web application needs. This template provides a base Drupal 8 application or can be provided with an existing Drupal project.
The AWS stack uses Amazon Elastic Compute Cloud (Amazon EC2), Amazon Virtual Public Cloud (Amazon VPC), Amazon Aurora Serverless, Amazon Elastic File System (Amazon EFS), Amazon Simple Storage System (Amazon S3), AWS CodePipeline, AWS CodeDeploy, Amazon Secrets Manager, Amazon ElastiCache, and Amazon CloudFront.
We generate the CloudFormation templates based on the CDK python code, and we also leverage Taskcat to test this pattern during every pull request and before every release.
Static Website on S3 with CloudFront, CICD, SSL via CloudFormation as a Terraform module
This Terraform module uses CloudFormation templates to provision a fully-functional static website on AWS S3. It provisions a CloudFront distribution, sets up SSL, and also provisions a CICD pipeline with CodePipeline and CodeBuild to deploy the site from a CodeCommit repository.
VPC via CloudFormation as a Terraform module
This is a Terraform module which provisions a VPC. In this module we use a CloudFormation template to provision all the AWS resources and wrap that CloudFormation template in Terraform to enable other Terraform users to easily import it as a module.
Contact us to discuss how we can leverage the power of AWS CloudFormation for your infrastructure!