mirror of https://github.com/hashicorp/terraform
parent
f9f61268e9
commit
cc6e7f12e8
@ -0,0 +1,22 @@
|
||||
---
|
||||
layout: "intro"
|
||||
page_title: "Terraform vs. Boto, Fog, etc."
|
||||
sidebar_current: "vs-other-boto"
|
||||
---
|
||||
|
||||
# Terraform vs. Boto, Fog, etc.
|
||||
|
||||
Libraries like Boto, Fog, etc. are used to provide native access
|
||||
clients to cloud providers and services by using their APIs. Some
|
||||
libraries are focused on specific clouds, while others attempt
|
||||
to bridge them all and mask the semantic differences. Using a client
|
||||
library only provides low-level access to APIs, requiring application
|
||||
developers to build their own tooling to build and manage their infrastructure.
|
||||
|
||||
Terraform is not intended to give low-level programmatic access to
|
||||
providers, but instead provides a high level syntax for describing
|
||||
how cloud resources and services should be created, provisioned, and
|
||||
combined. It acts as a feature rich and flexible tool, using a
|
||||
a plugin-based model to support providers and provisioners, giving
|
||||
it the ability to support almost any service that exposes APIs.
|
||||
|
||||
@ -0,0 +1,38 @@
|
||||
---
|
||||
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.
|
||||
|
||||
Loading…
Reference in new issue