3.6 KiB
Assignment
The Nautilus DevOps team is automating VPC creation using Terraform to manage networking efficiently. As part of this task, they need to create a VPC with specific requirements.
For this task, create an AWS VPC using Terraform with the following requirements:
The VPC name datacenter-vpc should be stored in a variable named KKE_vpc.
The VPC should have a CIDR block of 10.0.0.0/16.
Note:
The configuration values should be stored in a variables.tf file.
The Terraform script should be structured with a main.tf file referencing variables.tf.
The Terraform working directory is /home/bob/terraform.
Right-click under the EXPLORER section in VS Code and select Open in Integrated Terminal to launch the terminal.
Solution
VPC with Variables — datacenter-vpc (KKE_vpc)
This task requires a two-file Terraform structure: variables.tf holds the
configuration values, and main.tf references them. The VPC name must be stored in a
variable named exactly KKE_vpc.
variables.tf
variable "KKE_vpc" {
description = "Name of the VPC"
type = string
default = "datacenter-vpc"
}
variable "KKE_vpc_cidr" {
description = "CIDR block for the VPC"
type = string
default = "10.0.0.0/16"
}
main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 6.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_vpc" "datacenter_vpc" {
cidr_block = var.KKE_vpc_cidr
tags = {
Name = var.KKE_vpc
}
}
How to run
cd /home/bob/terraform
terraform init
terraform apply -auto-approve
How it works
Splitting config from logic
Terraform loads every .tf file in the working directory and merges them into one
configuration, so splitting declarations across files is purely organizational — there
are no imports to wire up. The convention this task asks for:
variables.tf— declares input variables (the "what": names, CIDRs, sizes).main.tf— declares resources (the "how"), referencing the variables withvar.<name>.
This separation is standard practice: it centralizes the values people tweak, keeps
resource blocks generic and reusable, and makes the config easier to parameterize
later (per-environment .tfvars, overrides, etc.).
The variables
variable "KKE_vpc"— holds the VPC name, exactly as required. Thedefaultofdatacenter-vpcmeans no value needs to be passed at apply time; Terraform uses the default.variable "KKE_vpc_cidr"— holds the CIDR. Putting it here (rather than hardcoding inmain.tf) satisfies the "configuration values should be stored in variables.tf" note. Its default is the required10.0.0.0/16.type = stringconstrains each to a string, so Terraform validates the input type at plan time.
Referencing variables in main.tf
cidr_block = var.KKE_vpc_cidr— resolves to10.0.0.0/16.tags = { Name = var.KKE_vpc }— resolves the VPC'sNametag todatacenter-vpc. A VPC has no native name field, so theNametag is what the console and graders read as its name.
The var. prefix is how Terraform interpolates a declared variable's value. Because
both variables have defaults, terraform apply runs non-interactively; without
defaults, Terraform would prompt for the values (or you'd pass -var / a .tfvars
file).
Verify
aws ec2 describe-vpcs \
--filters Name=tag:Name,Values=datacenter-vpc \
--query 'Vpcs[0].{Id:VpcId,Cidr:CidrBlock,Name:Tags[?Key==`Name`]|[0].Value}'
Expected — the VPC ID, CidrBlock: 10.0.0.0/16, and Name: datacenter-vpc.