1. Recap: Terraform Basics
- 
Commands:
- 
terraform apply: Creates/updates infrastructure.
- 
terraform destroy: Removes all managed resources.
- 
terraform fmt: Auto-format code for readability.
 
- 
- 
State File:
- 
terraform.tfstatetracks resource metadata.
- Backup files (terraform.tfstate.backup) allow recovery if state is corrupted.
 
- 
2. Introduction to Terraform Variables
Purpose: Avoid hardcoding values, improve reusability, and manage configurations across environments.
  
  
  Variable Declaration (variables.tf)
variable "bq_dataset_name" {
  description = "My BigQuery dataset name"
  type        = string
  default     = "demo_dataset"
}
variable "gcs_bucket_name" {
  description = "My GCS bucket name"
  type        = string
  default     = "terraform-demo-bucket"
}
variable "location" {
  description = "Project location (region/multi-region)"
  type        = string
  default     = "US"
}
variable "credentials" {
  description = "Path to service account JSON file"
  type        = string
  default     = "./keys/my-creds.json"
}
Key Notes:
- Use descriptionfor clarity.
- 
defaultprovides a fallback value (optional but recommended for testing).
- 
Types: string,number,bool,list,map, etc.
3. Using Variables in Resources
Example: Modify main.tf to reference variables.
provider "google" {
  project     = var.project
  region      = var.location
  credentials = file(var.credentials)  # Read file content
}
resource "google_storage_bucket" "demo-bucket" {
  name          = var.gcs_bucket_name
  location      = var.location
  force_destroy = true
}
resource "google_bigquery_dataset" "demo-dataset" {
  dataset_id    = var.bq_dataset_name
  location      = var.location
  delete_contents_on_destroy = true
}
Key Functions:
- 
file(var.credentials): Reads the JSON key file for authentication.
4. Workflow with Variables
- 
Initialize and Plan: 
 terraform init # Install providers terraform plan # Preview changes
- 
Apply Configuration: 
 terraform apply # Deploy resources
- 
Destroy Resources: 
 terraform destroy # Clean up
5. Handling Credentials Securely
- 
Best Practices:
- 
Never hardcode credentials in main.tf.
- Use variables.tfto reference external files (e.g.,keys/my-creds.json).
- 
Avoid committing credentials to version control (add .jsonto.gitignore).
 
- 
Never hardcode credentials in 
Troubleshooting Authentication:
- Error: No credentials loaded.
- Ensure credentialsvariable points to the correct JSON file path.
- Use export GOOGLE_APPLICATION_CREDENTIALS=./keys/my-creds.jsonas a fallback.
 
- Ensure 
6. Advanced Tips
- 
Variable Files (.tfvars):- Create dev.tfvarsorprod.tfvarsfor environment-specific values.
- Apply with terraform apply -var-file="dev.tfvars".
 
- Create 
- 
Dynamic Values:
- Use terraform.tfvarsfor local overrides (automatically loaded).
 
- Use 
- 
Validation: 
 variable "location" { validation { condition = contains(["US", "EU"], var.location) error_message = "Allowed values: US, EU." } }
7. Key Takeaways
- Reusability: Variables centralize configuration, making code adaptable.
- Security: Keep credentials external and never expose them.
- 
Scalability: Use .tfvarsand modules for complex projects.
Next Steps: Explore Terraform modules, remote state storage (e.g., GCS), and environment-specific workflows.
 
 
              
 
    
Top comments (0)