Bird
Raised Fist0
Terraformcloud~20 mins

JSON configuration alternative in Terraform - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Terraform JSON Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Configuration
intermediate
2:00remaining
Identify the correct JSON equivalent of a Terraform resource block
Given the following Terraform HCL resource block, which JSON configuration correctly represents it?
resource "aws_s3_bucket" "example" {
  bucket = "my-bucket"
  acl    = "private"
}
A
{
  "resource": {
    "aws_s3_bucket": {
      "example": {
        "bucket": "my-bucket",
        "acl": "private"
      }
    }
  }
}
B
{
  "aws_s3_bucket": {
    "example": {
      "bucket": "my-bucket",
      "acl": "private"
    }
  }
}
C
{
  "resource": {
    "aws_s3_bucket": {
      "example": [
        {
          "bucket": "my-bucket",
          "acl": "private"
        }
      ]
    }
  }
}
D
{
  "resource": {
    "aws_s3_bucket": {
      "example": {
        "name": "my-bucket",
        "access_control": "private"
      }
    }
  }
}
Attempts:
2 left
💡 Hint
Remember that Terraform JSON uses nested objects under "resource" with resource type and name keys.
❓ service_behavior
intermediate
1:30remaining
What happens if a required attribute is missing in Terraform JSON config?
If you omit a required attribute like "bucket" in the JSON configuration for an aws_s3_bucket resource, what will Terraform do when you run apply?
ATerraform will create the resource but with empty or null values for missing attributes.
BTerraform will throw a validation error and refuse to apply the configuration.
CTerraform will apply the configuration successfully with default values for missing attributes.
DTerraform will ignore the resource block entirely and continue with other resources.
Attempts:
2 left
💡 Hint
Think about how Terraform validates required fields before creating resources.
❓ Architecture
advanced
2:30remaining
How to represent multiple resources in Terraform JSON configuration?
You want to define two aws_s3_bucket resources named "bucket1" and "bucket2" in Terraform JSON. Which JSON snippet correctly represents this?
A
{
  "resource": {
    "aws_s3_bucket": {
      "bucket1": {"bucket": "bucket-one", "acl": "private"},
      "bucket2": {"bucket": "bucket-two", "acl": "public-read"}
    }
  }
}
B
{
  "resource": [
    {"aws_s3_bucket": {"bucket1": {"bucket": "bucket-one", "acl": "private"}}},
    {"aws_s3_bucket": {"bucket2": {"bucket": "bucket-two", "acl": "public-read"}}}
  ]
}
C
{
  "resource": {
    "aws_s3_bucket": [
      {"bucket1": {"bucket": "bucket-one", "acl": "private"}},
      {"bucket2": {"bucket": "bucket-two", "acl": "public-read"}}
    ]
  }
}
D
{
  "resource": {
    "aws_s3_bucket": {
      "bucket1": {"bucket": "bucket-one", "acl": "private"}
    },
    "aws_s3_bucket": {
      "bucket2": {"bucket": "bucket-two", "acl": "public-read"}
    }
  }
}
Attempts:
2 left
💡 Hint
Remember JSON keys must be unique; multiple resources of the same type are nested under the same resource type key.
❓ security
advanced
2:00remaining
How to securely manage sensitive variables in Terraform JSON configuration?
You have a sensitive variable like a database password. Which approach is best to avoid exposing it directly in Terraform JSON configuration files?
AEncrypt the password manually and store the encrypted string in the JSON configuration.
BStore the password in a separate JSON file in the same directory and import it.
CUse environment variables or Terraform Cloud workspace variables and reference them in JSON without hardcoding.
DHardcode the password directly in the JSON configuration under a variable block.
Attempts:
2 left
💡 Hint
Think about how Terraform handles sensitive data securely without exposing it in config files.
🧠 Conceptual
expert
1:30remaining
What is the main difference between Terraform HCL and JSON configuration formats?
Which statement best describes the key difference between Terraform's HCL and JSON configuration formats?
AJSON supports dynamic expressions and functions, while HCL does not.
BJSON configuration files are only used for Terraform Cloud and not for local Terraform runs.
CHCL configurations cannot be converted to JSON format.
DHCL supports comments and more readable syntax, while JSON does not support comments and is more verbose.
Attempts:
2 left
💡 Hint
Consider readability and syntax features of both formats.

Practice

(1/5)
1. What is the main reason to use JSON configuration files in Terraform instead of the usual HCL language?
easy
A. To enable automation and integration with other tools
B. Because JSON files are easier to read for humans
C. To reduce the size of the configuration files
D. Because Terraform does not support HCL anymore

Solution

  1. Step 1: Understand Terraform configuration formats

    Terraform supports both HCL and JSON formats for configuration files.
  2. Step 2: Identify the benefit of JSON format

    JSON is often used for automation and integration with other tools because it is a widely supported data format.
  3. Final Answer:

    To enable automation and integration with other tools -> Option A
  4. Quick Check:

    JSON helps automation = C [OK]
Hint: JSON is best for automation and tool integration [OK]
Common Mistakes:
  • Thinking JSON is easier for humans to read than HCL
  • Believing Terraform no longer supports HCL
  • Assuming JSON reduces file size
2. Which of the following is the correct way to start a Terraform JSON configuration file?
easy
A. { "resource": { "aws_instance": { "example": { "ami": "ami-123456", "instance_type": "t2.micro" } } } }
B. { resource: { aws_instance: { example: { ami: "ami-123456", instance_type: "t2.micro" } } } }
C. { "resource": [ { "aws_instance": { "example": { "ami": "ami-123456", "instance_type": "t2.micro" } } } ] }
D. [ "resource": { "aws_instance": { "example": { "ami": "ami-123456", "instance_type": "t2.micro" } } } ]

Solution

  1. Step 1: Check JSON syntax rules

    JSON keys and strings must be in double quotes, and objects use curly braces {}.
  2. Step 2: Identify correct Terraform JSON structure

    Terraform expects "resource" as a key with nested objects, not arrays or unquoted keys.
  3. Final Answer:

    { "resource": { "aws_instance": { "example": { "ami": "ami-123456", "instance_type": "t2.micro" } } } } -> Option A
  4. Quick Check:

    Proper JSON syntax with quoted keys = A [OK]
Hint: Always use double quotes for keys and strings in JSON [OK]
Common Mistakes:
  • Using unquoted keys in JSON
  • Using arrays instead of objects for resources
  • Mixing JSON and HCL syntax
3. Given this Terraform JSON snippet:
{
  "variable": {
    "region": {
      "default": "us-west-2"
    }
  },
  "provider": {
    "aws": {
      "region": "${var.region}"
    }
  }
}

What will happen when you run terraform apply?
medium
A. Terraform will deploy resources in the us-west-2 region
B. Terraform will throw an error because variable interpolation is not supported in JSON
C. Terraform will ignore the provider region and use the default AWS region
D. Terraform will deploy resources but with an empty region value

Solution

  1. Step 1: Understand variable interpolation in Terraform JSON

    Terraform JSON does not support interpolation syntax like "${var.region}" inside JSON files.
  2. Step 2: Identify the error cause

    Using interpolation in JSON causes Terraform to fail parsing or applying the configuration.
  3. Final Answer:

    Terraform will throw an error because variable interpolation is not supported in JSON -> Option B
  4. Quick Check:

    Interpolation not allowed in JSON = A [OK]
Hint: No interpolation syntax allowed in Terraform JSON files [OK]
Common Mistakes:
  • Assuming interpolation works same as HCL
  • Thinking Terraform ignores invalid region values
  • Believing Terraform defaults region silently
4. You have this JSON Terraform config snippet:
{
  "resource": {
    "aws_instance": {
      "ami": "ami-123456",
      "instance_type": "t2.micro",
      "tags": {
        "Name": "ExampleInstance"
      }
    }
  }
}

When running terraform apply, you get a syntax error. What is the most likely cause?
medium
A. The JSON keys are not properly quoted
B. The "tags" block should be an array, not an object
C. The JSON file is missing a root-level "terraform" key
D. The JSON file uses incorrect nesting for resource blocks

Solution

  1. Step 1: Review Terraform JSON resource structure

    Terraform expects resource blocks nested as: resource type -> resource name -> attributes.
  2. Step 2: Check the nesting in the snippet

    The snippet places attributes directly under the resource type "aws_instance" without the required instance name (e.g., "example") as an intermediate object key.
  3. Final Answer:

    The JSON file uses incorrect nesting for resource blocks -> Option D
  4. Quick Check:

    Resource nesting must follow Terraform JSON schema = B [OK]
Hint: Check resource nesting carefully in JSON configs [OK]
Common Mistakes:
  • Confusing JSON object vs array for tags
  • Expecting a "terraform" root key in JSON
  • Not quoting JSON keys properly
5. You want to convert this HCL Terraform config to JSON:
resource "aws_s3_bucket" "bucket" {
  bucket = "my-bucket"
  acl    = "private"
  tags = {
    Environment = "Dev"
    Team        = "Cloud"
  }
}

Which JSON configuration correctly represents this resource?
hard
A. { "resource": { "aws_s3_bucket": { "bucket": "my-bucket", "acl": "private", "tags": { "Environment": "Dev", "Team": "Cloud" } } } }
B. { "resource": [ { "aws_s3_bucket": { "bucket": { "bucket": "my-bucket", "acl": "private", "tags": { "Environment": "Dev", "Team": "Cloud" } } } } ] }
C. { "resource": { "aws_s3_bucket": { "bucket": { "bucket": "my-bucket", "acl": "private", "tags": { "Environment": "Dev", "Team": "Cloud" } } } } }
D. { "resources": { "aws_s3_bucket": { "bucket": { "bucket": "my-bucket", "acl": "private", "tags": { "Environment": "Dev", "Team": "Cloud" } } } } }

Solution

  1. Step 1: Understand Terraform JSON resource format

    Terraform JSON uses "resource" (singular) as the root key with nested resource type and name.
  2. Step 2: Compare options for correct keys and structure

    { "resource": { "aws_s3_bucket": { "bucket": { "bucket": "my-bucket", "acl": "private", "tags": { "Environment": "Dev", "Team": "Cloud" } } } } } correctly uses "resource" with nested "aws_s3_bucket" and resource name "bucket" with attributes.
  3. Final Answer:

    { "resource": { "aws_s3_bucket": { "bucket": { "bucket": "my-bucket", "acl": "private", "tags": { "Environment": "Dev", "Team": "Cloud" } } } } } -> Option C
  4. Quick Check:

    Correct root key and nesting = D [OK]
Hint: Use singular "resource" key with nested type and name [OK]
Common Mistakes:
  • Using "resources" instead of "resource"
  • Using arrays instead of objects for resources
  • Incorrect nesting of resource name and attributes