39 lines
2.0 KiB
Markdown
39 lines
2.0 KiB
Markdown
|
---
|
||
|
layout: "intro"
|
||
|
page_title: "Terraform vs. CloudFormation, Heat, etc."
|
||
|
sidebar_current: "vs-other-cloudformation"
|
||
|
---
|
||
|
|
||
|
# Terraform vs. CloudFormation, Heat, etc.
|
||
|
|
||
|
Tools like CloudFormation, Heat, etc allow the details of an infrastructure
|
||
|
to be codified into a configuration file. The configuration files allow
|
||
|
the infrastructure to be elastically created, modified and destroyed. Terraform
|
||
|
is inspired by the problems they solve.
|
||
|
|
||
|
Terraform similarly uses configuration files to detail the infrastructure
|
||
|
setup, but it goes further, by being both cloud agnostic and enabling
|
||
|
multiple providers and services to be combined and composed. For example,
|
||
|
Terraform can be used to orchestrate an AWS and OpenStack cluster simultaneously,
|
||
|
while enabling 3rd party services like CloudFlare and DNSimple to be integrated
|
||
|
to provide CDN and DNS services. This enables Terraform to represent and
|
||
|
manage the entire infrastructure and it's supporting services, instead of
|
||
|
only the subset that exists within a single provider. It provides a single
|
||
|
unified syntax, instead of requiring operators to use independent and
|
||
|
non-interoperable tools for each platform and service.
|
||
|
|
||
|
Terraform also seperates the planning phase from the execution phase,
|
||
|
by using the concept of an execution plan. By running `terraform plan`,
|
||
|
the current state is refreshed and the configuration is consulted to
|
||
|
generate an action plan. The plan includes all actions to be taken:
|
||
|
which resources will be created, destroyed or modified. It can be
|
||
|
inspected by operators to ensure it is exactly what is expected. Using
|
||
|
`terraform graph`, the plan can be visualized to show dependent ordering.
|
||
|
Once the plan is captured, the execution phase can be limited to only
|
||
|
the actions in the plan. Other tools combine the planning and execution
|
||
|
phases, meaning operators are forced to mentally reason about the effects
|
||
|
of a change, which quickly becomes intractable in large infrastructures.
|
||
|
Terraform lets operators apply changes with confidence, as they know exactly
|
||
|
what will happen before running.
|
||
|
|