Pragmatic evolution of Cloud Native Application Infrastructure - Part 1 Popular Wars
Tags: aws, devops, terraform, cloudformation
Published: 2020-09-12 11:05:21

Infrastructure as code(IAC) is more popular now than ever. [Terraform](https://www.terraform.io/) and [AWS CloudFormation](https://aws.amazon.com/cloudformation/) are popular IAAC tools that helps model, provision and manage infrastructure in an automated and secure manner.

Being the most popular tools, they are often compared against each other. In fact there is no shortage of blogs and videos on the internet that do exactly the same.

If we assume that Google Trends accurately captures the popularity, we can attempt to understand how popular these tools individually are and probably if one is better than the other in terms of popularity.

[Terraform, AWS Cloudformation Popularity: Link to Google Trends](https://trends.google.com/trends/explore/TIMESERIES/1599894000?hl=en-US&tz=-600&date=today+5-y&q=Terraform,AWS+Cloudformation,Cloudformation&sni=3) 

![TerraformVSCloudformation](https://dev-to-uploads.s3.amazonaws.com/i/qoahpgr9jnrkk49g8oop.png)

By looking at the data available in Google Trends it is clear that Terraform is much more popular than AWS CloudFormation across the globe in the IAC space.

> *But why is Terraform much more popular?* 

Before we understand that let's try and explore the application infrastructure landscape.

Often times when people talk about cloud native application infrastructure, it is not just the underlying cloud infrastructure that they talk about, but also about the third party tooling that is so critical through out the application lifecycle like CI/CD systems, observability, logging & analytics infrastructure etc. 

Traditionally, the approaches for provisioning and managing these application stacks have relied upon point-and-click interfaces or manual operator configuration or ad-hoc scripts. However these approaches could lead to undesirable complexity and are prone to human error. 

> *Is there a better way for managing this?* 

What if we can decompose this complex system into modular components, apply best practices like reviews & versioning at various composition levels and automate the execution.

What if we can provision all of this as code?

We can do all of that good stuff with Terraform. It  
- has simple json like declarative language (expressions, loops for more power)
- makes builds reproducible by storing remote state
- allows collaboration through locking for remote backends
- allows us to plan the changes by surfacing the delta and promoting visibility into what’s going to happen
- has a great community backing it up 

May be this is why Terraform is much more popular than any other IAC tool available today. But what about AWS CloudFormation? Does the popularity of terraform means that AWS CloudFormation is becoming irrelevant?

Definitely not! Let's use data from Google Trends again and understand why it's not.

[Terraform vs AWS Cloudformation Against or Together?: Link to Google Trends](https://trends.google.com/trends/explore?date=today%205-y&q=terraform%20vs%20cloudformation,terraform%20cloudformation)

![TerraformAndCloudformation](https://dev-to-uploads.s3.amazonaws.com/i/fgvbd25x2k2bi6xenxjz.png)
 
As silly as this analysis might sound, the underlying idea is pretty sound. People are interested in putting Terraform and CloudFormation together and that's really interesting.

What if we stop limiting us to a specific technology and focus on the application workflow?

> Will Terraform let us stay pragmatic by providing mechanisms to extend it and exclude it when it makes sense?

Yes it does!

In the part 2 & part 3 of this blog I'll describe two real life scenarios where I was forced to choose one technology over another and how I was able to use them together by staying pragmatic about evolving application infrastructure in a simple, safe and secured manner.