Ravindra BagaleCourses & study guides मराठी

Chapter 35: Terraform Modules Writing Using Registry and Versioning

Chala mitrano, aaj modules. Ekach code akra veli copy karaycha nahi. Module mhanje function sarkha folder: input dya, resource banto, output parat milta. Aapan swata module lihu, registry varcha module vaparu, aani version tag lavu mhanje kunachi team todnar nahi.

What you will learn in this chapter

  • When a folder should become a module
  • Write a module with inputs, resources and outputs
  • Call local and registry modules and wire outputs to inputs
  • Pin and upgrade module versions with tags

Concepts in this chapter

  1. 35.1Why modules — stop copying folders
  2. 35.2Write a module — inputs, resources, outputs
  3. 35.3Use a module — local path and registry
  4. 35.4Version your own modules

The chapter recap is at the end of the last concept page.

Practice Tasks

About this scenario

Suppose we are on the DevOps team at Zomato, the food delivery company, working from Gurugram. Aman Gupta leads the team, and we look after the order tracking app. Costs are counted in INR. In the tasks below we do real DevOps jobs on this project using what this lesson teaches. Zomato is a real company, but this project, the people, servers, IP addresses and numbers are made up for practice.

0 / 12

Easy Provider block

Why: The provider tells Terraform which cloud and region to talk to.

What to do: Write a provider "aws" block with region = "ap-south-1".

How:
  1. Write the block type (resource, variable, output, module...) and its labels in quotes.
  2. Open { and write each argument as name = value.
  3. Put text values in double quotes; numbers and true/false without quotes.
  4. Close every block with } and click Check answer.

Easy Output a value

Why: Outputs hand values to scripts and other modules.

What to do: Write output "web_ip" with value = aws_instance.web.public_ip.

How:
  1. Write the block type (resource, variable, output, module...) and its labels in quotes.
  2. Open { and write each argument as name = value.
  3. Put text values in double quotes; numbers and true/false without quotes.
  4. Close every block with } and click Check answer.

Easy S3 bucket resource

Why: Buckets in code are reviewed and never forgotten.

What to do: Write a resource aws_s3_bucket named logs with bucket = "zomato-logs" and tags { Team = "devops" }.

How:
  1. Write the block type (resource, variable, output, module...) and its labels in quotes.
  2. Open { and write each argument as name = value.
  3. Put text values in double quotes; numbers and true/false without quotes.
  4. Close every block with } and click Check answer.

Easy Read an output

Why: Scripts read outputs like the load balancer address.

What to do: Print only the raw value of the output lb_dns.

How:
  1. Read the task and pick the tool it needs (git, docker, kubectl, terraform, ansible...).
  2. Write the tool name, then the sub-command (the action word).
  3. Add the flags the task needs, each followed by its value.
  4. Add names, files or paths at the end, then click Check answer.

Easy Name the practice

Why: IaC is the base of repeatable cloud setups.

What to do: Zomato describes its servers, networks and databases in text files kept in Git and creates them with a tool. What is this called (three-letter short form)?

How:
  1. Write down the facts or numbers the task gives you.
  2. Work it out step by step.
  3. Type only the final answer (one word or number) in the box.
  4. Click Check answer.

Medium Pin the provider version

Why: Pinning stops a new provider release from breaking your plan.

What to do: Write a terraform block with required_providers aws = { source = "hashicorp/aws", version = "~> 5.0" }.

How:
  1. Write the block type (resource, variable, output, module...) and its labels in quotes.
  2. Open { and write each argument as name = value.
  3. Put text values in double quotes; numbers and true/false without quotes.
  4. Close every block with } and click Check answer.

Medium EC2 instance using a variable

Why: Referencing var.* avoids hard-coding sizes.

What to do: Write resource aws_instance "web" with ami = "ami-0abcdef1234567890", instance_type = var.instance_type and tags Name = "order-tracking".

How:
  1. Write the block type (resource, variable, output, module...) and its labels in quotes.
  2. Open { and write each argument as name = value.
  3. Put text values in double quotes; numbers and true/false without quotes.
  4. Close every block with } and click Check answer.

Medium Apply the saved plan

Why: No surprise changes: only the reviewed plan runs.

What to do: Apply the saved plan file zomato.tfplan.

How:
  1. Read the task and pick the tool it needs (git, docker, kubectl, terraform, ansible...).
  2. Write the tool name, then the sub-command (the action word).
  3. Add the flags the task needs, each followed by its value.
  4. Add names, files or paths at the end, then click Check answer.

Hard Call a module

Why: Modules package a tested pattern, like a VPC, for reuse.

What to do: Write module "vpc" with source = "terraform-aws-modules/vpc/aws", version = "5.8.1", name = "zomato-vpc" and cidr = "10.0.0.0/16".

How:
  1. Write the block type (resource, variable, output, module...) and its labels in quotes.
  2. Open { and write each argument as name = value.
  3. Put text values in double quotes; numbers and true/false without quotes.
  4. Close every block with } and click Check answer.

Hard Remote state in S3

Why: Shared remote state with locking stops two people breaking each other.

What to do: Write a terraform block with backend "s3": bucket = "zomato-tfstate", key = "prod/terraform.tfstate", region = "ap-south-1", dynamodb_table = "tf-lock".

How:
  1. Write the block type (resource, variable, output, module...) and its labels in quotes.
  2. Open { and write each argument as name = value.
  3. Put text values in double quotes; numbers and true/false without quotes.
  4. Close every block with } and click Check answer.

Hard Create several copies with count

Why: count builds N identical resources from one block.

What to do: Write resource aws_instance "worker" with count = 5, ami = "ami-0abcdef1234567890", instance_type = "t3.small" and tags Name = "worker-${count.index}".

How:
  1. Write the block type (resource, variable, output, module...) and its labels in quotes.
  2. Open { and write each argument as name = value.
  3. Put text values in double quotes; numbers and true/false without quotes.
  4. Close every block with } and click Check answer.

Hard Security group for HTTPS

Why: Opening only 443 keeps the attack surface small.

What to do: Write resource aws_security_group "web" with name = "web-sg" and one ingress block: from_port = 443, to_port = 443, protocol = "tcp", cidr_blocks = ["0.0.0.0/0"].

How:
  1. Write the block type (resource, variable, output, module...) and its labels in quotes.
  2. Open { and write each argument as name = value.
  3. Put text values in double quotes; numbers and true/false without quotes.
  4. Close every block with } and click Check answer.

Ravi Sir's Cards: 11 revision, interview and comparison cards for this chapter · मराठी cards