Dinesh ReddY’s Post

View profile for Dinesh ReddY, graphic

DevOps Engineer with 1.10 years of experience in Jenkins, Git, Docker, Kubernetes, Ansible, Terraform, and Linux, focused on cloud and automation

#Terraform for managing #MultiEnvironment infrastructure while keeping your code #DRY and organized. Scenario: You’re tasked with deploying infrastructure for three environments: dev, test, and prod. The resources (e.g., EC2 instances, S3 buckets , RDS ) are the same, but configuration values like instance type, AMI, or bucket names differ by environment. Challenge: How can you efficiently reuse the same Terraform configuration across multiple environments (dev, test, prod) without duplicating code? Solution: A solution is to use Terraform modules combined with environment-specific variable files to maintain DRY and modular infrastructure-as-code. Here’s how: Define Terraform Modules: The module will contain the core resource definitions (e.g., EC2 instances, S3 buckets and RDS) and use variables for configurable values. Create Environment-Specific .tfvars Files: Each environment (dev, test, prod) has its own .tfvars file to specify unique values, such as instance type, number of instances, etc. Call the Module in the Root Configuration: The root configuration references the module and passes in variables from the .tfvars files. Apply Configuration: Run the following to specify the environment file: bash terraform apply -var-file="dev.tfvars" This approach allows you to reuse the module for all environments while keeping configurations separate and clean. Example Script: Here’s a quick example: 1. Module Definition (modules/ec2/main.tf) variable "instance_type" {} variable "ami" {} resource "aws_instance" "example" { ami = var.ami instance_type = var.instance_type } 2. Root Configuration (main.tf) module "ec2" { source = "./modules/ec2" instance_type = var.instance_type ami = var.ami } 3. Environment-Specific Variables (e.g., dev.tfvars) instance_type = "t2.micro" ami = "ami-123456" Run terraform apply -var-file="dev.tfvars" to apply the configuration for the dev environment. #DevCommunity #InfraManagement #IAC #SysAdmin #devops #hiring

Majid Ali

Principal Devops Engineer | Solution Architect | AWS | Azure | Devops | Docker | K8s | EKS | AKS | Terraform | CICD | Jenkins | Github Actions | Helm | Kustom | Fintech

1mo

You can use terraform workspaces also..

Like
Reply
PhaniShanker Balle

Senior DevOps Engineer with Expertise in Cloud Infrastructure and Automation

1mo

Good use case of terraform modules..

Like
Reply
See more comments

To view or add a comment, sign in

Explore topics