Bird
Raised Fist0
GCPcloud~5 mins

Terraform vs Deployment Manager decision in GCP - CLI Comparison

Choose your learning style10 modes available
Introduction
When managing cloud resources on Google Cloud Platform, you need a tool to create and update your infrastructure safely and repeatedly. Terraform and Deployment Manager are two tools that help you do this, but they work differently and suit different needs.
When you want to manage infrastructure across multiple cloud providers with one tool, use Terraform.
When you prefer a Google-native tool tightly integrated with GCP services, use Deployment Manager.
When you want to use a simple YAML or Python template to define GCP resources, Deployment Manager is a good choice.
When you want a large community, many modules, and support for many providers, Terraform is better.
When you want to keep your infrastructure as code in a single language and use advanced features like state locking, Terraform is preferred.
Commands
This command initializes a Terraform working directory, downloading necessary provider plugins and preparing the environment.
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 applies the Terraform configuration to create or update resources without asking for confirmation.
Terminal
terraform apply -auto-approve
Expected OutputExpected
google_compute_instance.my-instance: Creating... google_compute_instance.my-instance: Creation complete after 30s [id=projects/my-project/zones/us-central1-a/instances/my-instance] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
→
-auto-approve - Skip interactive approval before applying changes
This command creates a deployment in GCP using Deployment Manager with the specified YAML configuration file.
Terminal
gcloud deployment-manager deployments create my-deployment --config deployment.yaml
Expected OutputExpected
Create operation operation-1234567890abcdef started... Waiting for operation to complete... Create operation operation-1234567890abcdef completed successfully.
→
--config - Specifies the configuration file for the deployment
This command shows details about the deployment to verify that resources were created as expected.
Terminal
gcloud deployment-manager deployments describe my-deployment
Expected OutputExpected
name: my-deployment id: 1234567890123456789 operation: operationType: insert status: DONE targetLink: https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instances/my-instance ...
Key Concept

If you remember nothing else from this pattern, remember: Terraform is multi-cloud and community-driven, while Deployment Manager is Google-native and simpler for GCP-only setups.

Common Mistakes
Trying to use Deployment Manager templates for non-GCP resources
Deployment Manager only supports Google Cloud resources, so it cannot manage resources outside GCP.
Use Terraform if you need to manage resources across multiple cloud providers.
Not initializing Terraform before applying configurations
Terraform needs to download providers and set up the environment; skipping init causes errors.
Always run 'terraform init' before 'terraform apply' in a new working directory.
Not specifying the correct config file with Deployment Manager
Deployment Manager requires a valid YAML or Jinja template file; missing or wrong file causes deployment failure.
Use the --config flag with the correct file path when creating or updating deployments.
Summary
Terraform works across many clouds and has a large community with reusable modules.
Deployment Manager is a Google Cloud native tool using YAML or Python templates for GCP resources.
Use 'terraform init' and 'terraform apply' to manage infrastructure with Terraform.
Use 'gcloud deployment-manager deployments create' with a config file to deploy with Deployment Manager.
Choose the tool based on your cloud environment and management needs.

Practice

(1/5)
1. Which tool is best described as Google Cloud's native infrastructure management service?
easy
A. Deployment Manager
B. Terraform
C. Ansible
D. Chef

Solution

  1. Step 1: Understand native tools in GCP

    Deployment Manager is built by Google specifically for managing GCP resources.
  2. Step 2: Compare with other tools

    Terraform is multi-cloud and not native to GCP, while Ansible and Chef are configuration management tools, not native GCP infrastructure managers.
  3. Final Answer:

    Deployment Manager -> Option A
  4. Quick Check:

    Native GCP tool = Deployment Manager [OK]
Hint: Native GCP tool means Deployment Manager [OK]
Common Mistakes:
  • Confusing Terraform as native to GCP
  • Mixing configuration tools with infrastructure tools
  • Assuming multi-cloud tools are native
2. Which syntax snippet correctly initializes a Terraform configuration for Google Cloud?
easy
A. resource "gcp_project" { name = "my-project" }
B. provider "google" { project = "my-project" region = "us-central1" }
C. deployment "my-deployment" { config: "config.yaml" }
D. service "google" { project = "my-project" }

Solution

  1. Step 1: Identify Terraform provider syntax

    Terraform uses the keyword 'provider' with the provider name and configuration inside curly braces.
  2. Step 2: Check other options

    resource "gcp_project" { name = "my-project" } uses incorrect resource type, C is Deployment Manager style, D uses invalid keyword 'service'.
  3. Final Answer:

    provider "google" { project = "my-project" region = "us-central1" } -> Option B
  4. Quick Check:

    Terraform provider block = provider "google" { project = "my-project" region = "us-central1" } [OK]
Hint: Terraform uses 'provider' block for cloud setup [OK]
Common Mistakes:
  • Confusing Deployment Manager syntax with Terraform
  • Using wrong keywords like 'service' instead of 'provider'
  • Incorrect resource types for Terraform
3. Given this Terraform snippet:
resource "google_compute_instance" "vm" {
name = "test-vm"
machine_type = "e2-medium"
zone = "us-central1-a"
boot_disk {
initialize_params {
image = "debian-cloud/debian-10"
}
}
network_interface {
network = "default"
}
}

What will happen when you run terraform apply?
medium
A. A new VM instance named 'test-vm' will be created in us-central1-a zone.
B. Terraform will throw a syntax error due to missing provider block.
C. The VM will be created but without a boot disk.
D. Terraform will delete all existing instances in the default network.

Solution

  1. Step 1: Analyze resource block

    The resource defines a Google Compute VM named 'test-vm' with specified machine type, zone, boot disk image, and network interface.
  2. Step 2: Understand Terraform apply behavior

    Terraform will create the VM as described if the provider is configured elsewhere; missing provider block causes error only if not configured.
  3. Final Answer:

    A new VM instance named 'test-vm' will be created in us-central1-a zone. -> Option A
  4. Quick Check:

    Terraform creates resources as defined [OK]
Hint: Terraform creates resources exactly as defined [OK]
Common Mistakes:
  • Assuming missing provider block always causes error
  • Thinking boot disk is optional and missing
  • Believing Terraform deletes unrelated resources
4. You wrote a Deployment Manager config but get an error: Invalid resource type. What is the most likely cause?
medium
A. Missing project ID in the config file
B. Not enabling the Compute Engine API
C. Incorrect indentation in YAML file
D. Using a Terraform resource type in Deployment Manager config

Solution

  1. Step 1: Understand resource types in Deployment Manager

    Deployment Manager requires resource types specific to GCP and its own syntax, not Terraform resource types.
  2. Step 2: Identify error cause

    Using Terraform resource types in Deployment Manager config causes 'Invalid resource type' error.
  3. Final Answer:

    Using a Terraform resource type in Deployment Manager config -> Option D
  4. Quick Check:

    Resource types must match tool syntax [OK]
Hint: Use correct resource types per tool [OK]
Common Mistakes:
  • Confusing Terraform and Deployment Manager resource types
  • Ignoring API enablement errors
  • Assuming YAML indentation causes resource type errors
5. Your team needs to manage infrastructure across multiple clouds with a single tool and prefers simple, readable syntax. Which tool should you choose?
hard
A. Deployment Manager because it is native to GCP
B. Use Deployment Manager with custom scripts for multi-cloud
C. Terraform because it supports multiple clouds and has simple syntax
D. Manual scripting with gcloud CLI for flexibility

Solution

  1. Step 1: Analyze multi-cloud support

    Deployment Manager only supports GCP, so it cannot manage multiple clouds.
  2. Step 2: Consider syntax and team preference

    Terraform supports multiple clouds and uses simple, readable syntax, fitting team needs.
  3. Step 3: Evaluate other options

    Manual scripting is error-prone and less maintainable; Deployment Manager with scripts is complex and limited to GCP.
  4. Final Answer:

    Terraform because it supports multiple clouds and has simple syntax -> Option C
  5. Quick Check:

    Multi-cloud + simple syntax = Terraform [OK]
Hint: Multi-cloud needs point to Terraform [OK]
Common Mistakes:
  • Choosing Deployment Manager for multi-cloud
  • Thinking manual scripts are simpler
  • Assuming Deployment Manager can be extended easily for other clouds
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