Understanding Terraform Providers and Variables

keerthikeerthi
3 min read

In Terraform, providers are plugins that act as a bridge, enabling Terraform to understand where and how resources or entire projects should be created. These providers are categorized into three types: official, partner, and community.

  1. Official Providers
    Official providers are actively maintained by HashiCorp, the creator of Terraform. They ensure robust support for major platforms and services, making them reliable and frequently updated.

  2. Partner Providers
    Partner providers are developed and maintained by third-party companies or organizations in collaboration with HashiCorp. They focus on creating and managing resources for their specific services or platforms.

  3. Community Providers
    Community providers are created and maintained by the open-source community. This means anyone, including developers like you and me, can create providers. However, these providers do not have official support or backing from HashiCorp or its partners. They rely on the community for maintenance and updates.

Understanding these provider types is essential when working with Terraform, especially when building infrastructure on platforms like Azure. Selecting the right provider ensures compatibility, support, and alignment with your project needs.

Terraform Variables

Instead of hardcoding the parameters passed to Terraform for resource creation, we can use variables. Variables enhance reusability and flexibility, making it easier to adapt Terraform configurations for different projects. This approach is particularly helpful when managing infrastructure for multiple projects.

Types of Variables
  1. Input Variables

    • Input variables allow you to pass dynamic values into your Terraform configuration.

    • They are typically defined in an input.tf file.

  2. Output Variables

    • Output variables are used to display values generated by Terraform after execution.

    • These variables are stored in an output.tf file.

Storing Values

To store values for input variables, you can use a terraform.tfvars file. The advantage of using this file is that it allows other projects to override or modify the variables by simply updating the terraform.tfvars file, without needing to change the main configuration in the input.tf file. This setup promotes modularity and simplifies collaboration across teams.

For example:

# input.tf
variable "resource_group_name" {
  description = "The name of the resource group"
  type        = string
}

# terraform.tfvars
resource_group_name = "MyResourceGroup"

# output.tf
output "resource_group_name" {
  value = var.resource_group_name
}

By structuring variables in this way, you create a scalable and reusable infrastructure-as-code configuration that can be easily adapted for future projects.

Running Terraform with Variable Files

You can use terraform apply to run the terraform.tfvars file. By default, terraform apply will search for a file named terraform.tfvars. However, if you want to use a file with a different name, such as dev.tfvars, you need to specify it explicitly when running the command:

terraform apply -var-file="dev.tfvars"

This flexibility allows you to maintain multiple environment-specific variable files and select the appropriate one during deployment.


Conditional Expressions in Terraform

Conditional expressions are used to define conditional logic for your configurations. For example, if you need a specific configuration for the development environment and a different one for production, you can use conditional expressions to assign values based on the environment. This approach is particularly useful when managing Azure environments.

Example:

variable "environment" {
  description = "The environment to deploy to"
  type        = string
}

variable "resource_sku" {
  description = "The SKU of the resource"
  type        = string
  default     = var.environment == "dev" ? "Standard_D2_v2" : "Standard_D4_v2"
}

In this example, the resource_sku variable is assigned different values depending on whether the environment is set to "dev" or another value.


Built-in Functions in Terraform

Terraform provides several built-in functions to simplify configurations, similar to functions in other programming languages. Examples include:

  1. length: Returns the length of a list or string.

     length(["a", "b", "c"]) # Returns 3
    
  2. map: Creates a map of key-value pairs.

     map("key1", "value1", "key2", "value2")
    
  3. Other utility functions like join, split, lookup, etc., are available to handle strings, lists, maps, and more.

0
Subscribe to my newsletter

Read articles from keerthi directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

keerthi
keerthi