Skip to main content

Using Terraform Variables

Introduction

Terraform variables are a central source from which values can be imported. In this way terraform variables are helpful in creating and managing centrally controlled reusable values.

Let’s see how we can use the terraform variables to write clean code and avoid repetition using reusability.

We are creating an AWS security group to demonstrate the variable's usage.

resource "aws_security_group" "sg" {
name = "demo-security-group"
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["116.30.45.50/32"]
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["116.30.45.50/32"]
}
ingress {
from_port = 53
to_port = 53
protocol = "tcp"
cidr_blocks = ["116.30.45.50/32"]
}
}

Take a not at cidr_blocks we are repeating the value “116.30.45.50/32” 3 times.

There are a couple of problems here.

  • We are violating the DRY principle.
  • Tomorrow if we want to change the value we need to update it in three places, we might forget to change it at some places in the real production codebase where we might have 20–25 repetitions.
  • The code is not clean.

To address these problems we can use Terraform Variables.

Let’s create another file variables.tf with the following content.

variable "vpn_id" {
default = "116.30.45.50/32"
}

We have created a variable called vpn_id and provided the default value.

Now we can change our security_group resource group code to use this variable.

resource "aws_security_group" "sg" {
name = "demo-security-group"
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = [var.vpn_id]
}
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = [var.vpn_id]
}
ingress {
from_port = 53
to_port = 53
protocol = "tcp"
cidr_blocks = [var.vpn_id]
}
}

As you can see now instead of hardcoded IP it’s using the value from the variable.

Conclusion

  • By using the variables we have avoided static repetition.
  • The code is now much cleaner and adheres to the DRY principle.
  • Changing the CIDR value is much easier now, thus increasing code maintainability.

In the subsequent, article we will explore more of terraform.

Thanks for reading. If you have some feedback, please provide your response or reach out to me on Twitter or Github.

Happy Coding!!!

Comments

Popular posts from this blog

Track stock market information right in your Terminal.

     Introduction: As a developer, I love working with the terminal. The plain, simple, and in my opinion the best way to interact with the computer (also it makes you look geeky). I spent most of my time in the terminal. By now you must have guessed I am a huge fan of the terminal and terminal-based applications. Recently I developed an interest in stock markets and started tracking the stock markets. Since I love working with the terminal I decided to build a terminal oriented application that can help me to track the stock market. Inspir e d by  wttr.in  I build  terminal-stocks  which can provide the stock's current prices, historical prices, and global market summary. How to use terminal-stocks terminal-stocks  is available and can be used without installation. Get the current price of the stock. curl terminal-stocks.dev/ITC.NS Current price of stocks You need to provide the ticker of the stock and terminal-stocks will give you the price information of the stock.  terminal-st

Setting up Nginx as a reverse proxy for Node.js App

Okay.. but what is a reverse proxy? A reverse proxy is a web server that centralizes internal services and provides unified interfaces to the public. Requests from clients are forwarded to a server that can fulfill it before the reverse proxy returns the server’s response to the client. Nginx is a popular choice to use as a reverse proxy for your node.js application. Got it. Now let’s set up Nginx Let’s say your nodejs server is running locally on localhost:3000. We will set up Nginx to get the request and forward the request to our nodejs server. Ins t alling Nginx on ubuntu sudo apt-get update sudo apt-get install nginx Configure Nginx Disable the default, virtual host unlink /etc/nginx/sites-enabled/default 2. Create a configuration file cd /etc/nginx/sites-available sudo nano reverse-proxy.conf 3. Put the following content in the file server { listen 80; listen [::]:80; access_log /var/log/nginx/reverse-access.log; error_log /var/log/nginx/reverse-e

PrivateGPT: A Step-by-Step Guide to Installation and Use

In this blog post, we will explore the ins and outs of PrivateGPT, from installation steps to its versatile use cases and best practices for unleashing its full potential. What is PrivateGPT? PrivateGPT is a cutting-edge program that utilizes a pre-trained GPT (Generative Pre-trained Transformer) model to generate high-quality and customizable text. Built on OpenAI's GPT architecture, PrivateGPT introduces additional privacy measures by enabling you to use your own hardware and data. This ensures that your content creation process remains secure and private. Installation Steps Before we dive into the powerful features of PrivateGPT, let's go through the quick installation process. PrivateGPT is a command line tool that requires familiarity with terminal commands. Let's get started: 1. Clone the Repository: Begin by cloning the PrivateGPT repository from GitHub using the following command: ``` git clone https://github.com/imartinez/privateGPT.git ``` 2.Navigate to the Direc