🏗️ Terraform Modules
Module struktura, Registry, reusable components
📦 Module nima?
Terraform fayllar to'plami — reusable infrastructure component. Root module — asosiy working directory. Child module — `module` block orqali chaqiriladi. Published modules: Terraform Registry (registry.terraform.io).
🏗️ Module Tuzilmasi
main.tf — asosiy resurslar. variables.tf — input variables. outputs.tf — output values. versions.tf — required_providers. README.md — documentation. Bu standart structure.
📡 Module Sources
Local path: `"./modules/vpc"`. Terraform Registry: `"hashicorp/consul/aws"`. GitHub: `"github.com/org/repo//modules/vpc"`. S3: `"s3::https://..."`. Module versioning: `version = "~> 3.0"` (Registry modules uchun).
🔄 Module Best Practices
- Bir module — bir vazifa (single responsibility)
- Input variable validation qo'shing
- Barcha outputlarni export qiling
- Semantic versioning ishlatib published qiling
- Module nested bo'lishi mumkin (module ichida module)
💡 Asosiy nuqtalar
- Module: reusable Terraform komponent
- Root module: main working directory
- module "name" { source = "..." } — module chaqirish
- variables.tf, outputs.tf, main.tf — standard structure
- Registry modules: `version` pin qiling
- Module outputi: module.NAME.output_name
📋 Kod misoli
# Module chaqirish
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 5.0"
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["us-east-1a", "us-east-1b"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
enable_nat_gateway = true
}
# Module outputidan foydalanish
resource "aws_instance" "app" {
subnet_id = module.vpc.private_subnets[0]
# ...
}
# Local module
module "database" {
source = "./modules/rds"
db_name = "myapp"
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.private_subnets
}
🎯 Imtihon maslahatlari
- Module yangi source qo'shilganda `terraform init` qayta ishga tushirish kerak — provider/module yuklab olish
- Module nesting: module ichida module chaqirish mumkin, lekin chuqur nesting complexity oshiradi
- Private module registry: Terraform Cloud/Enterprise da ichki modullarni saqlash
- Module versioning faqat Registry modules uchun; local path modules da version bo'lmaydi
- Module output `sensitive = true` bo'lsa, parent module da ham sensitive bo'ladi
⚠️ Ko'p adashadigan
- Module yangilagandan keyin `terraform init` ni unutish — yangi modul yuklanmaydi
- Root module va child module aralashtirib yuborish: root = `terraform` ishlatilgan dir, child = `module` block bilan chaqirilgan
- Module outputsiz (outputs.tf siz) module dan qiymat olishga urinish — outputs.tf da e'lon qilinmasa parent ko'ra olmaydi
🧠 Eslab qolish: "Module = Lego Block": qayta ishlatiladi, birlashtirish mumkin, standart interfeys (variables + outputs). "MOVE = Main, Outputs, Variables, Existing-data (data.tf)"
Terraform Modules bo'yicha o'zingizni sinab ko'ring
Bepul interaktiv quiz, mock imtihon va to'liq darslar — CertMaster platformasida.
Bepul boshlash →