terraform-one-tool

Every major public cloud has its own way to automate infrastructure.

Azure has ARM and Bicep.

AWS has CloudFormation.

Google Cloud has Infrastructure Manager.

Oracle Cloud Infrastructure has Resource Manager.

If you intend to specialize permanently in one cloud, learning that provider’s native tooling makes sense. But infrastructure careers rarely stay neatly inside one vendor’s ecosystem.

Today you may be building Azure.

Tomorrow you may inherit AWS.

The next project may involve Google Cloud, VMware, Cloudflare, a Palo Alto firewall, GitHub, and an on-premises environment at the same time.

That changes the calculation.

If you are going to invest serious time learning one Infrastructure-as-Code platform, Terraform is probably the most transferable skill you can choose.

Four Clouds, Four Native Approaches

The major providers all offer infrastructure automation:

Provider Native IaC
Azure ARM / Bicep
AWS CloudFormation
Google Cloud Infrastructure Manager
OCI Resource Manager

At first glance, learning the native technology for whichever cloud you are using seems like the obvious approach.

If you work in Azure, learn Bicep.

If you work in AWS, learn CloudFormation.

The problem appears when your next project uses another cloud.

Your CloudFormation knowledge does not help you very much when you move to Azure. Bicep does not deploy AWS infrastructure. An ARM template isn’t going to build a VPC in Google Cloud.

You have to learn another automation system.

Terraform changes that equation.

Terraform Gives You a Common Language

Terraform uses HashiCorp Configuration Language, normally called HCL.

A basic Terraform configuration follows the same general structure regardless of which cloud is underneath it.

You define providers.

You define resources.

You use variables.

You reference outputs.

You organize reusable infrastructure into modules.

You run:

terraform init
terraform plan
terraform apply

That workflow doesn’t fundamentally change because you moved from Azure to AWS.

The resources certainly change.

An Azure virtual network might look something like:

resource "azurerm_virtual_network" "network" {
  name                = "production"
  address_space       = ["10.0.0.0/16"]
  location            = "eastus"
  resource_group_name = azurerm_resource_group.main.name
}

AWS uses a different provider and a different resource:

resource "aws_vpc" "network" {
  cidr_block = "10.0.0.0/16"
}

Google Cloud is different again:

resource "google_compute_network" "network" {
  name = "production"
}

Those are obviously not interchangeable.

But notice what did not change.

resource "provider_resource_type" "local_name" {
    argument = value
}

You are still writing Terraform.

The language is familiar. The workflow is familiar. Variables work the same way. Outputs work the same way. Modules work the same way. Dependencies work the same way. State works the same way.

You are learning a new provider rather than learning an entirely new Infrastructure-as-Code system.

That is a major difference.

It Is More Than Just Syntax

Saying Terraform lets you use the same syntax everywhere actually understates its advantage.

The most valuable transferable knowledge isn’t remembering where the braces go.

It is understanding the Terraform model.

Once you become proficient with Terraform, you understand concepts such as:

  • providers
  • resources
  • data sources
  • variables
  • outputs
  • locals
  • modules
  • state
  • remote backends
  • dependencies
  • lifecycle management
  • importing existing resources
  • planning changes before applying them
  • reusable infrastructure patterns

Those concepts follow you from cloud to cloud.

You still have to understand the cloud itself.

Terraform cannot save you from learning the difference between an Azure VNet, an AWS VPC, a Google Cloud VPC, and an OCI VCN.

Nor should it.

Terraform abstracts the automation mechanism, not the architecture.

That distinction is important.

Terraform Does Not Make Cloud Knowledge Transferable

There is sometimes a tendency to think that using Terraform makes multi-cloud infrastructure easy.

It doesn’t.

An AWS engineer cannot become an Azure engineer merely by changing:

provider "aws" {
}

to:

provider "azurerm" {
}

The underlying platforms remain different.

Identity is different.

Networking is different.

Load balancing is different.

Storage is different.

High availability is different.

Permissions are different.

Naming is different.

Managed services are different.

Terraform gives you a common tool for manipulating those systems, but you still need to understand what you are manipulating.

That is actually one of Terraform’s strengths.

It standardizes just enough.

The Workflow Becomes Muscle Memory

Once you have spent enough time with Terraform, the process becomes predictable.

Write the configuration.

Initialize the providers.

Validate it.

Generate a plan.

Review what Terraform intends to create, modify, or destroy.

Apply the changes.

Store the configuration in Git.

Maintain state.

That process can remain nearly identical whether you are deploying infrastructure into Azure, AWS, GCP, or OCI.

Compare that with learning multiple native platforms.

An engineer working across all four clouds could potentially need substantial familiarity with:

Azure ARM/Bicep
AWS CloudFormation
Google Cloud tooling
OCI tooling

Or that engineer could become deeply familiar with:

Terraform

and then learn the Terraform provider for each environment.

The second skill set has considerably more portability.

But “Multi-Cloud” Is Only Half the Argument

Calling Terraform a multi-cloud tool sells it short.

Most real infrastructure environments are not simply collections of public-cloud resources.

A modern environment might include:

Azure
Palo Alto Networks firewalls
Cloudflare DNS
GitHub repositories
VMware clusters
Kubernetes
Datadog monitoring
Okta identity
on-premises network infrastructure

That is where Terraform becomes much more interesting.

The provider model is not limited to cloud providers.

A Terraform provider is essentially an interface between Terraform and another platform’s API.

That means Terraform can potentially become the automation layer across the infrastructure stack.

Instead of thinking:

Terraform lets me use the same tool in Azure and AWS.

A better way to think about it is:

Terraform gives me one automation framework for infrastructure regardless of who manufactured or hosts it.

That is a much more powerful proposition.

One Project Can Cross Vendor Boundaries

Consider what happens when a company builds a new application environment in Azure.

The job may involve creating:

  • an Azure virtual network
  • subnets
  • virtual machines
  • storage
  • a Palo Alto firewall configuration
  • public DNS records
  • GitHub repositories
  • monitoring
  • identity integrations

Azure Bicep is excellent at managing Azure.

But the project doesn’t end at Azure.

Terraform providers can allow the same overall automation system to reach beyond the Azure boundary.

Conceptually, a single project might include:

provider "azurerm" {
}

provider "panos" {
}

provider "cloudflare" {
}

provider "github" {
}

Now the infrastructure definition isn’t merely describing the cloud environment.

It is describing much more of the complete system.

Terraform can create the network.

Terraform can configure supporting infrastructure.

Terraform can create DNS records.

Terraform can configure external platforms.

Terraform can create repositories used to support the deployment.

The value is no longer simply avoiding Bicep when you move to AWS.

The value is avoiding a separate automation technology for every infrastructure platform you touch.

This Is What Infrastructure Engineers Actually Work With

The idea that infrastructure engineers work with a single public cloud is increasingly artificial.

Real environments cross boundaries.

You may have Azure hosting an application.

A Palo Alto firewall controls the traffic.

Cloudflare provides public DNS.

GitHub stores the configuration.

VMware still hosts internal workloads.

A SaaS monitoring platform watches everything.

An identity provider controls administrative access.

Some hardware still lives in a datacenter.

Some may even sit in a branch office.

From the perspective of the infrastructure engineer, all of those systems are part of the environment.

Vendor-specific automation tools tend to stop at the vendor boundary.

Terraform does not have the same conceptual limitation.

That makes Terraform’s portability far more valuable than simply saying:

It works with all four clouds.

Its real advantage is:

It can follow the infrastructure engineer across the entire infrastructure stack.

Providers Make Terraform Extensible

Terraform’s architecture is what makes this possible.

Terraform itself doesn’t need to understand how every platform in existence works.

Providers do that.

There are Terraform providers for major platforms including:

Azure
AWS
Google Cloud
OCI
Cloudflare
GitHub
Kubernetes
VMware
Palo Alto Networks
Cisco
Datadog
Grafana
Okta
Snowflake

and many more.

Each provider exposes its platform’s resources and data sources through Terraform.

The exact arguments change.

The resource names change.

The capabilities change.

But you remain inside the same basic Terraform operating model.

That makes knowledge of Terraform unusually durable.

When you encounter a new platform, the first question becomes:

Is there a Terraform provider for it?

Very often, the answer is yes.

The Cloud Providers Have Effectively Acknowledged This

Terraform isn’t merely a third-party tool reluctantly tolerated by the major cloud providers.

The providers themselves publish Terraform documentation, examples, integrations, and guidance.

Google Cloud’s Infrastructure Manager works with Terraform configurations.

OCI Resource Manager is built around Terraform.

Microsoft provides extensive documentation for managing Azure through Terraform.

AWS provides extensive Terraform guidance and integration support.

That is significant.

Even providers that have invested heavily in proprietary IaC technologies recognize that customers want Terraform.

There is a simple reason.

Customers do not live entirely inside the boundaries cloud vendors would prefer.

Native Tools Still Have Their Place

None of this means CloudFormation or Bicep are bad technologies.

There are legitimate reasons to use native tooling.

A company operating exclusively in AWS may prefer CloudFormation because it is tightly integrated with AWS.

A Microsoft-heavy organization may standardize on Bicep.

Native technologies can sometimes expose new platform capabilities sooner or integrate more naturally with provider-specific services.

If your job requires one of those technologies, learn it.

There is also value in understanding how your primary cloud’s native deployment system works even if Terraform is your preferred tool.

But that is different from deciding which Infrastructure-as-Code technology provides the highest return on your learning time.

For someone building a broadly applicable infrastructure skill set, Terraform has an important advantage:

the knowledge follows you.

Learn Terraform, Then Learn the Providers

The better learning strategy is not to memorize thousands of Terraform resources.

Learn Terraform itself first.

Understand:

providers
resources
data sources
variables
locals
outputs
modules
state
dependencies
for_each
count
conditionals
functions
lifecycle
import
plan
apply
destroy

Then learn how your target platform maps its infrastructure into those constructs.

Start with Azure.

Then move to AWS.

The second cloud will be dramatically easier because you are no longer learning Infrastructure as Code and AWS simultaneously.

You already understand Terraform.

You are simply learning things like:

azurerm_virtual_network

versus:

aws_vpc

versus:

google_compute_network

versus:

oci_core_vcn

Different resources.

Same mental model.

Then take the next step.

Learn how Terraform interacts with something that isn’t a public cloud at all.

Configure a firewall.

Create a DNS record.

Manage a GitHub repository.

Deploy something into VMware.

That is when the portability advantage becomes obvious.

The Skill That Survives the Next Job

Technology careers rarely stay inside one vendor ecosystem forever.

The Azure environment you manage today may become an AWS environment at your next company.

Your company may acquire another business.

Management may adopt a multi-cloud strategy.

A customer may require a different provider.

You may inherit VMware.

You may replace one firewall vendor with another.

You may move DNS providers.

You may adopt Kubernetes.

Vendor-specific knowledge always has value.

But portable knowledge has more leverage.

If you spend a year becoming excellent at CloudFormation, you become much better at automating AWS.

If you spend a year becoming excellent at Bicep, you become much better at automating Azure.

If you spend a year becoming excellent at Terraform, you develop an automation skill that can potentially follow you through Azure, AWS, Google Cloud, OCI, VMware, firewalls, DNS, identity systems, SaaS platforms, and whatever comes next.

You will still need to understand each platform.

Terraform does not eliminate that requirement.

What it eliminates is the need to throw away your automation framework every time the vendor changes.

That is the real advantage.

And that is why, if you are going to learn one Infrastructure-as-Code tool, Terraform is the one to learn.