Day 2:Unlocking the Power of Terraform Variables

A Deep Dive into Data Types and Expressions for Infrastructure as Code

ยท

4 min read

Day 2:Unlocking the Power of Terraform Variables

Terraform allows us to use these data types when defining and working with variables.

Let's go through how to use each data type when handling variables in Terraform:

String Variables

  • To define a string variable in variable.tf file.

  • You can then reference this variable in your resources in main.tf file.

Number Variables

  • To define the number variable in variables.tf file.

  • To reference this variable in your resource in main.tf file.

  • Output

Boolean Variables

  • In Terraform, you can use Boolean variables to control the behavior of your infrastructure code.

  • Define boolean variables with the bool type in varaibles.tf file.

  • Reference the variable in your resource in main.tf file.

  • Output

List Variables

  • The list variables in variables.tf file.

  • The reference of this variable in main.tf file.

null_resource in Terraform is not a real resource that creates something like a virtual machine or a database. It's used for executing operations or scripts outside of Terraform's core resource management.

The triggers block is indeed used to specify conditions that, when changed, cause Terraform to recreate or update a resource. This is helpful when you want to force a resource to change based on external factors.

provisioner in Terraform are used for tasks like executing commands, running scripts, or initializing resources after they're created.

local-exec is one type of provisioner that instructs Terraform to execute commands locally on the machine where you run Terraform.

  • To define outputs in output.tf file.

  • Result

Map Variables

  • In Terraform, a map is a data structure that allows you to store and manage a collection of key-value pairs.

  • To define the variable in variables.tf file.

  • To reference the variable in resource configuration in main.tf file.

  • Output


What are expressions in Terraform?

In Terraform, expressions are used to compute and manipulate values. They are a fundamental part of writing dynamic and reusable infrastructure code.

There are two main types of expressions:

  1. Attribute References

These are used to retrieve information from resources or data sources. can be compared to reading information from existing objects.

aws_instance.example.id
  1. Functions

Terraform provides a set of built-in functions that allow you to perform various operations on values. These functions help you manipulate and transform data.

Example: Suppose you want to create a unique name for an S3 bucket based on the current timestamp. You can use the timestamp() function like this:

"mybucket-${timestamp()}"

Here's a more comprehensive example where we create an AWS S3 bucket with a unique name:

resource "aws_s3_bucket" "example" {
  # Using the timestamp() function to generate a unique bucket name
  bucket = "mybucket-${timestamp()}"

  # Other bucket configurations...
}

Arguments Vs Attributes

Arguments:

  • Input Values: Arguments are values that you provide when declaring a resource in your Terraform configuration. They are used to customize the behavior of a resource.

  • Defined by You: You specify arguments in your Terraform code to configure a resource. These are essentially parameters that you pass to the resource block.

  • Example: Suppose you want to create an AWS EC2 instance, You would provide arguments like instance_type, ami, and subnet_id in the resource block:

      resource "aws_instance" "example" {
        ami           = "ami-0c55b159cbfafe1f0"
        instance_type = "t2.micro"
        subnet_id     = "subnet-0123456789abcdef0"
      }
    

Attributes:

  • Output Values: Attributes are values that you can retrieve from a resource after it has been created. They represent information about the resources that Terraform can provide to you.

  • Provided by Terraform: Attributes are not defined by you; instead, they are exposed by Terraform based on the resource's actual state. You can use them in other parts of your configuration.

  • Example: After creating the EC2 instance in the example above, you can access attributes like public_ip To get the public IP address of the instance:

      output "instance_public_ip" {
        value = aws_instance.example.public_ip
      }
    

In summary, arguments are the values you provide to configure resources, while attributes are the values you can retrieve from resources after they are created to use elsewhere in your Terraform configuration.

Conclusion

By understanding the various data types and expressions at your disposal, you're equipping yourself with the tools to create robust and dynamic infrastructure as code. Every step you take brings you closer to becoming a DevOps expert, and with each line of Terraform, you're shaping the future of your digital landscape.

Keep pushing the boundaries, keep experimenting, and keep building, because the path to excellence is paved with curiosity and continuous learning.

Happy Terraforming!๐ŸŒ

ย