github.com/muratcelep/terraform@v1.1.0-beta2-not-internal-4/website/intro/use-cases.html.markdown (about)

     1  ---
     2  layout: "intro"
     3  page_title: "Use Cases"
     4  sidebar_current: "use-cases"
     5  description: |-
     6    Learn common use cases for Terraform including managing Heroku apps, self-service clusters, and multi-cloud deployments.
     7  ---
     8  
     9  # Use Cases
    10  
    11  This page lists a subset of use cases for [Terraform](/intro/index.html).
    12  
    13  ## Multi-Cloud Deployment
    14  
    15  It's often attractive to spread infrastructure across multiple clouds to
    16  increase fault-tolerance. By using only a single region or cloud provider,
    17  fault tolerance is limited by the availability of that provider. Multi-cloud
    18  deployment allows for more graceful recovery of the loss of a region or entire
    19  provider.
    20  
    21  Realizing multi-cloud deployments can be very challenging as many existing
    22  tools for infrastructure management are cloud-specific. Terraform is
    23  cloud-agnostic and allows a single configuration to be used to manage multiple
    24  providers, and to even handle cross-cloud dependencies. This simplifies
    25  management and orchestration, helping operators build large-scale multi-cloud
    26  infrastructures.
    27  
    28  > **Hands-on:** Try the [Deploy Federated Multi-Cloud Kubernetes Clusters](https://learn.hashicorp.com/tutorials/terraform/multicloud-kubernetes) tutorial on HashiCorp Learn.
    29  
    30  ## Heroku App Setup
    31  
    32  Heroku is a popular PaaS for hosting web apps. Developers create an app, and then attach add-ons, such as a database, or email provider. One of the best features is the ability to elastically scale the number of dynos or workers. However, most non-trivial applications quickly need many add-ons and external services.
    33  
    34  You can use Terraform to codify the setup required for a Heroku application, ensuring that all the required add-ons are available, but it can go even further: configuring DNSimple to set a CNAME, or setting up Cloudflare as a CDN for the app. Best of all, Terraform can do all of this in under 30 seconds without using a web interface.
    35  
    36  ## Multi-Tier Applications
    37  
    38  A very common pattern is the N-tier architecture. The most common 2-tier architecture is
    39  a pool of web servers that use a database tier. Additional tiers get added for API servers,
    40  caching servers, routing meshes, etc. This pattern is used because the tiers can be scaled
    41  independently and provide a separation of concerns.
    42  
    43  Terraform is an ideal tool for building and managing these infrastructures. You can group resources in each tier together, and Terraform will automatically handle the dependencies between each tier. For example, Terraform will ensure the database tier is available before provisioning the web servers and that the load balancers are connected to the web nodes. You can then use Terraform to easily scale each tier by modifying the `count` configuration value. Because resource creation and provisioning is codified and automated, elastically scaling
    44  with load becomes trivial.
    45  
    46  ## Self-Service Clusters
    47  
    48  At a certain organizational size, it becomes very challenging for a centralized
    49  operations team to manage a large and growing infrastructure. Instead it becomes
    50  more attractive to make "self-serve" infrastructure, allowing product teams to
    51  manage their own infrastructure using tooling provided by the central operations team.
    52  
    53  You can use Terraform configuration to codify the knowledge of how to build and scale a service. You can then share these configurations throughout your organization, enabling customer teams to use Terraform to manage their services.
    54  
    55  ## Software Demos
    56  
    57  Modern software is increasingly networked and distributed. Although tools like
    58  [Vagrant](https://www.vagrantup.com/) exist to build virtualized environments
    59  for demos, it is still very challenging to demo software on real infrastructure
    60  which more closely matches production environments.
    61  
    62  Software writers can provide a Terraform configuration to create, provision and
    63  bootstrap a demo on cloud providers like AWS. This allows end users to easily demo the software on their own infrastructure, and even enables tweaking parameters like cluster size to more rigorously test tools at any scale.
    64  
    65  ## Disposable Environments
    66  
    67  It is common practice to have both a production and staging or QA environment.
    68  These environments are smaller clones of their production counterpart, but are
    69  used to test new applications before releasing in production. As the production
    70  environment grows larger and more complex, it becomes increasingly onerous to
    71  maintain an up-to-date staging environment.
    72  
    73  Using Terraform, the production environment can be codified and then shared with
    74  staging, QA or dev. These configurations can be used to rapidly spin up new
    75  environments to test in, and then be easily disposed of. Terraform can help tame
    76  the difficulty of maintaining parallel environments, and makes it practical
    77  to elastically create and destroy them.
    78  
    79  ## Software Defined Networking
    80  
    81  Software Defined Networking (SDN) is becoming increasingly prevalent in the
    82  datacenter, as it provides more control to operators and developers and
    83  allows the network to better support the applications running on top. Most SDN
    84  implementations have a control layer and infrastructure layer.
    85  
    86  You can use Terraform to codify the configuration for software defined networks.
    87  Terraform can then use this configuration to automatically set up and modify settings by interfacing with the control layer. This allows the configuration to be
    88  versioned and changes to be automated. For example, you can [use Terraform to configure AWS VPC](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc).
    89  
    90  ## Resource Schedulers
    91  
    92  In large-scale infrastructures, static assignment of applications to machines
    93  becomes increasingly challenging. To solve that problem, there are a number
    94  of schedulers like Borg, Mesos, YARN, and Kubernetes. These can be used to
    95  dynamically schedule Docker containers, Hadoop, Spark, and many other software
    96  tools.
    97  
    98  Terraform is not limited to physical providers like AWS. Resource schedulers
    99  can be treated as a provider, enabling Terraform to request resources from them.
   100  This allows Terraform to be used in layers: to setup the physical infrastructure
   101  running the schedulers as well as provisioning onto the scheduled grid.