Bird
Raised Fist0
GCPcloud~5 mins

Variables and outputs in GCP - Commands & Configuration

Choose your learning style10 modes available
Introduction
When building cloud infrastructure, you often need to reuse values and see important results after deployment. Variables let you set values once and use them many times. Outputs show you key information about what you created.
When you want to set the region or project ID once and use it in many places in your configuration
When you need to pass a secret or password safely into your cloud setup
When you want to see the IP address of a virtual machine after it is created
When you want to reuse a network name across multiple resources without typing it repeatedly
When you want to share important information like URLs or IDs with other teams or scripts
Config File - main.tf
main.tf
variable "project_id" {
  description = "The GCP project ID"
  type        = string
  default     = "example-project"
}

variable "region" {
  description = "The GCP region to deploy resources"
  type        = string
  default     = "us-central1"
}

resource "google_compute_instance" "vm_instance" {
  name         = "example-vm"
  machine_type = "e2-medium"
  zone         = "${var.region}-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network = "default"
    access_config {}
  }
  project = var.project_id
}

output "instance_ip" {
  description = "The external IP address of the VM instance"
  value       = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

This file defines two variables: project_id and region, which set the project and location for resources.

It creates a virtual machine instance using these variables.

The output instance_ip shows the external IP address of the VM after deployment.

Commands
This command sets up Terraform in the current folder, downloading the Google provider plugin needed to manage GCP resources.
Terminal
terraform init
Expected OutputExpected
Initializing the backend... Initializing provider plugins... - Finding latest version of hashicorp/google... - Installing hashicorp/google v4.0.0... - Installed hashicorp/google v4.0.0 (signed by HashiCorp) Terraform has been successfully initialized!
This command shows what Terraform will create or change based on the configuration and variables.
Terminal
terraform plan
Expected OutputExpected
An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_compute_instance.vm_instance will be created + resource "google_compute_instance" "vm_instance" { + name = "example-vm" + machine_type = "e2-medium" + zone = "us-central1-a" + project = "example-project" ... } Plan: 1 to add, 0 to change, 0 to destroy.
This command applies the plan, creating the VM instance in GCP using the variables set earlier.
Terminal
terraform apply -auto-approve
Expected OutputExpected
google_compute_instance.vm_instance: Creating... google_compute_instance.vm_instance: Still creating... [10s elapsed] google_compute_instance.vm_instance: Creation complete after 20s [id=projects/example-project/zones/us-central1-a/instances/example-vm] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. Outputs: instance_ip = "34.68.123.45"
→
-auto-approve - Skip manual approval to apply changes immediately
This command shows the external IP address of the VM instance created, using the output defined in the configuration.
Terminal
terraform output instance_ip
Expected OutputExpected
34.68.123.45
Key Concept

If you remember nothing else from this pattern, remember: variables let you reuse values easily, and outputs let you see important results after deployment.

Common Mistakes
Not defining a variable but trying to use it in the configuration
Terraform will fail because it does not know what value to use for the missing variable.
Always declare variables with a type and default or provide values during apply.
Trying to output a resource attribute that does not exist or is misspelled
Terraform will error because it cannot find the attribute to show.
Check resource documentation and use exact attribute names in outputs.
Hardcoding values everywhere instead of using variables
Makes configuration harder to change and reuse for different environments.
Use variables for values that may change or be reused.
Summary
Define variables to set reusable values like project ID and region.
Use variables in resource definitions to avoid repeating values.
Define outputs to show important information like VM IP after deployment.
Run terraform init to prepare, terraform plan to preview, terraform apply to create, and terraform output to see results.

Practice

(1/5)
1. What is the main purpose of variables in a Google Cloud deployment configuration?
easy
A. To monitor resource usage in real-time
B. To display the final results after deployment
C. To delete resources automatically
D. To store values that can be reused throughout the configuration

Solution

  1. Step 1: Understand the role of variables

    Variables hold values like names or sizes that you want to reuse in your cloud setup.
  2. Step 2: Differentiate variables from outputs

    Outputs show results after deployment, but variables store reusable data before deployment.
  3. Final Answer:

    To store values that can be reused throughout the configuration -> Option D
  4. Quick Check:

    Variables store reusable values [OK]
Hint: Variables hold reusable data; outputs show results after deployment [OK]
Common Mistakes:
  • Confusing variables with outputs
  • Thinking variables delete resources
  • Assuming variables monitor usage
2. Which of the following is the correct syntax to declare a variable named region with default value us-central1 in a Terraform configuration for GCP?
easy
A. var region = "us-central1"
B. variable "region" { default = "us-central1" }
C. set variable region = "us-central1"
D. region := "us-central1"

Solution

  1. Step 1: Recall Terraform variable syntax

    Terraform uses the keyword 'variable' followed by the name in quotes and a block with 'default' value.
  2. Step 2: Compare options

    variable "region" { default = "us-central1" } matches Terraform syntax exactly; others use invalid or different language syntax.
  3. Final Answer:

    variable "region" { default = "us-central1" } -> Option B
  4. Quick Check:

    Terraform variable syntax uses 'variable' block [OK]
Hint: Terraform variables use 'variable' block with default inside braces [OK]
Common Mistakes:
  • Using assignment syntax from other languages
  • Missing quotes around variable name
  • Using := which is not Terraform syntax
3. Given this Terraform output block:
output "instance_ip" {
  value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

What will terraform output instance_ip show after deployment?
medium
A. The public IP address of the VM instance
B. The internal IP address of the VM instance
C. The VM instance name
D. An error because output syntax is wrong

Solution

  1. Step 1: Understand the output value path

    The path accesses the VM's network interface, then the first access config's NAT IP, which is the public IP.
  2. Step 2: Confirm output command result

    Running 'terraform output instance_ip' returns the value of that output, which is the public IP address.
  3. Final Answer:

    The public IP address of the VM instance -> Option A
  4. Quick Check:

    Output shows public IP from access_config NAT IP [OK]
Hint: Access NAT IP in output shows public IP address [OK]
Common Mistakes:
  • Confusing NAT IP with internal IP
  • Assuming output shows instance name
  • Thinking output block syntax is invalid
4. You wrote this Terraform variable block:
variable "zone" {
  default = us-central1-a
}

Why does Terraform fail to apply this configuration?
medium
A. The default value is missing quotes around the string
B. Variable name cannot be 'zone'
C. Default values are not allowed in variables
D. The block must use 'var' instead of 'variable'

Solution

  1. Step 1: Check the default value syntax

    Terraform requires string values to be in quotes. Here, us-central1-a is unquoted.
  2. Step 2: Understand Terraform variable rules

    Variable names like 'zone' are valid, default values are allowed, and 'variable' keyword is correct.
  3. Final Answer:

    The default value is missing quotes around the string -> Option A
  4. Quick Check:

    Strings need quotes in Terraform variables [OK]
Hint: Always quote string default values in Terraform variables [OK]
Common Mistakes:
  • Forgetting quotes around string values
  • Thinking variable names are restricted
  • Using 'var' instead of 'variable' keyword
5. You want to create a Terraform output that shows the URL of a deployed Cloud Storage bucket using a variable bucket_name. Which output block correctly uses the variable to build the URL?
hard
A. output "bucket_url" { value = "https://storage.googleapis.com/var.bucket_name" }
B. output "bucket_url" { value = https://storage.googleapis.com/${bucket_name} }
C. output "bucket_url" { value = "https://storage.googleapis.com/${var.bucket_name}" }
D. output "bucket_url" { value = "https://storage.googleapis.com/bucket_name" }

Solution

  1. Step 1: Understand variable interpolation syntax

    Terraform uses ${var.variable_name} inside strings to insert variable values.
  2. Step 2: Check each option for correct syntax

    output "bucket_url" { value = "https://storage.googleapis.com/${var.bucket_name}" } correctly uses "${var.bucket_name}" inside quotes. Others either miss quotes or use wrong syntax.
  3. Final Answer:

    output "bucket_url" { value = "https://storage.googleapis.com/${var.bucket_name}" } -> Option C
  4. Quick Check:

    Use ${var.name} for variable interpolation in outputs [OK]
Hint: Use ${var.name} inside quotes for variable interpolation [OK]
Common Mistakes:
  • Missing quotes around the URL string
  • Not using 'var.' prefix for variables
  • Using variable name without interpolation syntax
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard