Terraform Input Variables with Validation Rules
Step-01: Introduction¶
- Learn some Terraform Functions
- length()
- substr()
- contains()
- lower()
- regex()
- can()
- Implement Custom Validation Rules in Variables
Step-02: Learn Terraform Length Function¶
- The
terraform consolecommand provides an interactive console for evaluating expressions. - Terraform Console
- Terraform Length Function
Step-03: Learn Terraform SubString Function¶
Step-04: Learn Terraform contains() Function¶
Step-05: Learn Terraform lower() and upper() Function¶
Step-06: Create Resource Group Variable with Validation Rules¶
- Understand and implement custom validation rules in variables
- condition: Defines the expression used to evaluate the Input Variable value. Must return either
true for valid, orfalse for invalid value. - error_message: Defines the error message displayed by Terraform when the condition expression returns false for an invalid value. Must be ended with period or question mark
- c2-variables.tf
# 4. Resource Group Location variable "resoure_group_location" { description = "Resource Group Location" type = string default = "eastus" validation { condition = var.resoure_group_location == "eastus" || var.resoure_group_location == "eastus2" #condition = contains(["eastus", "eastus2"], lower(var.resoure_group_location)) error_message = "We only allow Resources to be created in eastus or eastus2 Locations." } }
Step-07: Run Terraform commands¶
# Initialize Terraform
terraform init
# Validate Terraform configuration files
terraform validate
# Format Terraform configuration files
terraform fmt
# Review the terraform plan
terraform plan
# Observation
1. When `resoure_group_location = "eastus"`, terraform plan should pass
2. When `resoure_group_location = "eastus2"`, terraform plan should pass
3. When `resoure_group_location = "westus"`, terraform plan should fail with error message as validation rule failed.
# Uncomment validation rule with contains() function and comment previous one
condition = contains(["eastus", "eastus2"], lower(var.resoure_group_location))
# Review the terraform plan
terraform plan
# Observation
1. When `resoure_group_location = "eastus"`, terraform plan should pass
2. When `resoure_group_location = "eastus2"`, terraform plan should pass
3. When `resoure_group_location = "westus"`, terraform plan should fail with error message as validation rule failed.
Step-08: Learn Terraform regex() and can() Function¶
- Terraform regex Function
- Terraform can Function
# Go to Terraform Console terraform console # Test regex() function Template: regex(pattern, string) ### TRUE CASES regex("india$", "westindia") regex("india$", "southindia") can(regex("india$", "westindia")) can(regex("india$", "southindia")) ### FAILURE CASES regex("india$", "eastus") can(regex("india$", "eastus"))
Step-09: Update Resource Group Location Variable with can() and regex() function related Validation Rule¶
- Update Resource Group Location Variable with can() and regex() function related Validation Rule
# 4. Resource Group Location variable "resoure_group_location" { description = "Resource Group Location" type = string default = "eastus" validation { #condition = var.resoure_group_location == "eastus" || var.resoure_group_location == "eastus2" #condition = contains(["eastus", "eastus2"], lower(var.resoure_group_location)) #error_message = "We only allow Resources to be created in eastus or eastus2 Locations." condition = can(regex("india$", var.resoure_group_location)) error_message = "We only allow Resources to be created in westindia and southindia locations." } }
Step-10: Run Terraform commands¶
# Validate Terraform configuration files
terraform validate
# Review the terraform plan
terraform plan
# Observation
1. When `resoure_group_location = "westinida"`, terraform plan should pass
2. When `resoure_group_location = "southindia"`, terraform plan should pass
3. When `resoure_group_location = "eastus2"`, terraform plan should fail with error message as validation rule failed.
Step-11: Clean-Up¶
# Delete Files
rm -rf .terraform*
# Roll back to state as below for Students seamless demo before git check-in
# Change-1: c1-variables.tf
# 4. Resource Group Location
variable "resoure_group_location" {
description = "Resource Group Location"
type = string
default = "eastus"
validation {
condition = var.resoure_group_location == "eastus" || var.resoure_group_location == "eastus2"
#condition = contains(["eastus", "eastus2"], lower(var.resoure_group_location))
error_message = "We only allow Resources to be created in eastus or eastus2 Locations."
#condition = can(regex("india$", var.resoure_group_location))
#error_message = "We only allow Resources to be created in westindia and southindia locations."
}
}
# Change-2: terraform.tfvars
resoure_group_location = "eastus"
#resoure_group_location = "westus2"
#resoure_group_location = "westindia"
#resoure_group_location = "eastus2"
References¶
🎉 New Course
Ultimate DevOps Real-World Project Implementation on AWS
$15.99
$84.99
81% OFF
MARCH2026
Enroll Now on Udemy →
🎉 Offer