CertMaster

🏗️ Advanced Patterns & Import

Dynamic blocks, moved block, import, lifecycle hooks, refactoring

Terraform Associate · TF-Associate · ⏱️ 20 min · ❓ 4 savol

🔄 Dynamic Blocks

Takrorlanuvchi nested block larni dinamik yaratish. `dynamic "ingress"` va `content` block. `for_each` bilan combine qilinadi. Masalan: security group rules listdan. Complex resource (ALB listener rules, IAM policy statements) uchun juda foydali.

📦 moved Block (Terraform 1.1+)

Resursni rename yoki module ga ko'chirganda state muammosini hal qiladi. `terraform state mv` o'rniga declarative. `moved { from = aws_instance.old to = aws_instance.new }`. Plan da ko'rsatiladi, no destroy+recreate. Module restructuring da zarur.

📥 import Block (Terraform 1.5+)

Mavjud resursni Terraform boshqaruviga olish — declarative. `import { to = aws_s3_bucket.main id = "my-bucket-name" }`. `terraform plan -generate-config-out=generated.tf` — .tf ham generatsiya qiladi. Eski: `terraform import` buyruq (hali ishlaydi).

🔧 Lifecycle Hooks

`lifecycle` block ichida: create_before_destroy — yangi resurs avval, keyin eski o'chiriladi (zero downtime). prevent_destroy — destroy dan himoya. ignore_changes — qaysi atributlar o'zgarsada Terraform e'tibor bermasin (masalan, ami). replace_triggered_by — boshqa resurs o'zgarganda recreate.
💡 Asosiy nuqtalar
📋 Kod misoli
# Dynamic blocks: security group rules
variable "ingress_rules" {
  default = [
    { port = 80,  cidr = "0.0.0.0/0" },
    { port = 443, cidr = "0.0.0.0/0" },
    { port = 22,  cidr = "10.0.0.0/8" }
  ]
}

resource "aws_security_group" "web" {
  dynamic "ingress" {
    for_each = var.ingress_rules
    content {
      from_port   = ingress.value.port
      to_port     = ingress.value.port
      protocol    = "tcp"
      cidr_blocks = [ingress.value.cidr]
    }
  }
}

# moved block: aws_instance.web -> module.compute.aws_instance.web
moved {
  from = aws_instance.web
  to   = module.compute.aws_instance.web
}

# import block (Terraform 1.5+)
import {
  to = aws_s3_bucket.existing
  id = "my-existing-bucket"
}

# lifecycle
resource "aws_instance" "web" {
  ami           = data.aws_ami.latest.id
  instance_type = "t3.micro"
  lifecycle {
    create_before_destroy = true
    prevent_destroy       = true
    ignore_changes        = [ami]
  }
}
🎯 Imtihon maslahatlari
⚠️ Ko'p adashadigan
🧠 Eslab qolish: "DMIL" = Dynamic (blocks), Moved (refactor), Import (existing), Lifecycle (hooks) — Terraform 4 advanced pattern

Advanced Patterns & Import bo'yicha o'zingizni sinab ko'ring

Bepul interaktiv quiz, mock imtihon va to'liq darslar — CertMaster platformasida.

Bepul boshlash →