Infrastructure automation (aka provisioning) is a big deal for cloud-native applications and environments.

Automating the provisioning and decommissioning of infrastructure allows you to scale up and down on-the-fly while reaping the cost benefits of on-demand computing.

By integrating this process into your deployment pipelines across all environments, you can effectively scale end-to-end automation and gain cost benefits for all dev and engineering teams.

For example, only spin up a dev, QA, and staging environment when a new build or version exists or needs testing. You can also use them for rapid blue/green deployments when you need to replicate production.

Over the past year, we’ve consistently heard from customers that AWS CloudFormation and HashiCorp Terraform are the new standards; as a result, integration with Harness Continuous Delivery Platform is a “no brainer.”

What is AWS CloudFormation?

AWS CloudFormation provides a common language for you to describe and provision all the infrastructure resources in your cloud environment.

CloudFormation allows you to use a simple text file to model and provision, in an automated and secure manner, all the resources needed for your applications across all regions and accounts. This file serves as a single source of truth for your cloud environment.

What is HashiCorp Terraform?

HashiCorp Terraform enables you to safely and predictably create, change, and improve infrastructure. It is an open-source tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.

Terraform is like AWS CloudFormation, but is multi-cloud–meaning it’s a common language for defining infrastructure across AWS, Azure, GCP, and so on.

Introducing Harness “Infra Provisioners”

To accommodate CloudFormation and Terraform scripts/templates we introduced a new concept called “Infrastructure Provisioner” into our deployment pipeline model:
Infrastructure Provisioners - Harness Continuous Delivery Product Shot
Infrastructure provisioners can be added to any deployment Workflow so that infrastructure (cloud clusters) can be provisioned and decommissioned (if needed) as part of the deployment process.

The idea is that you can easily reuse, manage, debug, and orchestrate CloudFormation and Terraform scripts/templates across your deployment workflows and pipelines. Your infrastructure stays in sync with what’s happening at the application level.

Creating an Infrastructure Provisioner

Goto: Setup > Your App > Infrastructure Provisioners
Click “+ add Infrastructure Provisioner” and select either “Terraform” or “CloudFormation.”
Infrastructure Provisioners - Harness Continuous Delivery - Product Shot
Next, add the body of your script/template, or simply reference it via the source type drop-down:
Cloudformation Provisioner - Harness Continuous Delivery - Product Shot
You can automatically parse input variables from scripts/templates by pushing the “populate from template” control, or you can manually create them using the “+Add” control.

Next, you need to map each infrastructure provisioner to one or more services (artifacts). Click “Add Service Mapping” and select the required service, deployment type, and cloud account. You can then specify appropriate cluster config, either as literals or variables using the $ prefix; this basically allows you to pass parameters from CF/Terraform into Harness workflows & environments.
Service Mapping - Harness Continuous Delivery - Product Shot
Your infrastructure provisioner set up is now complete:
Infrastructure Provisioner - Harness Continuous Delivery - Product Shot

Adding Infra Provisioners to Deployment Workflows

Once your infrastructure provisioners are defined, you can now add and reference them in any deployment Workflow.
For example, below is a simple canary deployment workflow with 3 phases.
We can easily add/reference our CloudFormation or Terraform scripts/templates by adding a “Pre-deployment step” to our workflow:
Pre-Deployment Steps - Harness Continuous Delivery - Product Shot
This control presents us with the following dialogue where we can add our CF/TF infra provisioner to the workflow:
Provisioners - Harness Continuous Delivery - Product Shot
Now you can instantiate your CF/TF script/template using the relevant cloud provider details in addition to script/template variables, that can either be static with literals or dynamic with parameters.
Cloud Formation - Harness Continuous Delivery - Product Shot
Once added, your workflow will look like this showing that your infra provisioner will be executed prior to deployment phase:
Canary Deploy - Harness Continuous Delivery - Product Shot
You can also add CF/TF as a “post-deployment step” if you want to use them to de-commission infrastructure as well.

Debugging CloudFormation & Terraform Deployments

Now, when you execute a Pipeline or deployment Workflow, you’ll see all the CloudFormation and Terraform console output in the context of the deployment. This is useful for debugging and managing any infrastructure provisioning issues:
Harness Deployment - Harness Continuous Delivery - Product Shot
We’ve tried to make it as simple and painless as possible for customers to integrate CloudFormation and Terraform into their deployment pipelines!
Here’s a two-minute video showing how easy it is:

Integrate Cloudformation and Terraform using Harness CD

You can get started with a free trial of the Harness software delivery platform.
Cheers,
Steve.
@BurtonSays