0Pricing
DevOps Bootcamp · บทเรียน

บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน

สร้างบล็อกการตั้งค่าซ้อนกันที่ทำซ้ำได้โดยอัตโนมัติด้วยบล็อกไดนามิก ลดการคัดลอกและวางสำหรับสิ่งต่าง ๆ เช่นกฎกลุ่มความปลอดภัย

บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

ปัญหาการทำซ้ำ

ทรัพยากรบางชนิดมีบล็อกซ้อนกันที่ทำซ้ำหลายชุด เช่น กฎ ingress หลายรายการในกลุ่มความปลอดภัย การเขียนแต่ละรายการด้วยตนเองใช้ข้อความมากและรักษาหลัก DRY ได้ยาก บล็อกแบบไดนามิกจะสร้างบล็อกเหล่านี้จากชุดข้อมูล

เริ่มจากบล็อกคงที่

นี่คือเวอร์ชันที่เขียนด้วยตนเอง: บล็อก ingress สามบล็อกที่เกือบเหมือนกัน ลองนึกภาพว่าต้องดูแลบล็อกแบบนี้เป็นสิบรายการ

resource "aws_security_group" "web" {
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  ingress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

องค์ประกอบของบล็อกแบบไดนามิก

บล็อก dynamic มีป้ายกำกับที่ตรงกับชื่อบล็อกซ้อนกัน ชุดข้อมูล for_each และบล็อก content ที่อธิบายอินสแตนซ์แต่ละรายการที่สร้างขึ้น

dynamic "ingress" {
  for_each = var.rules
  content {
    from_port   = ingress.value.port
    to_port     = ingress.value.port
    protocol    = "tcp"
    cidr_blocks = ingress.value.cidrs
  }
}

ออบเจกต์ตัววนซ้ำ

ภายใน content ให้อ้างอิงสมาชิกปัจจุบันผ่านออบเจกต์ที่ตั้งชื่อตามป้ายกำกับของบล็อก ออบเจกต์นี้เปิดให้ใช้ .value (สมาชิก) และ .key (คีย์ของแผนที่หรือลำดับดัชนีของรายการ)

การกำหนดตัวแปรข้อมูลนำเข้า

ขับเคลื่อนบล็อกแบบไดนามิกด้วยตัวแปรที่ระบุชนิด รายการออบเจกต์ช่วยให้แต่ละกฎมีคำอธิบายกำกับตนเอง

variable "rules" {
  type = list(object({
    port  = number
    cidrs = list(string)
  }))
}

การประกอบทั้งหมดเข้าด้วยกัน

ตอนนี้ทรัพยากรยังคงกระชับ ไม่ว่าคุณจะส่งกฎเข้ามากี่รายการ

resource "aws_security_group" "web" {
  name = "web-sg"
  dynamic "ingress" {
    for_each = var.rules
    content {
      from_port   = ingress.value.port
      to_port     = ingress.value.port
      protocol    = "tcp"
      cidr_blocks = ingress.value.cidrs
    }
  }
}

การเปลี่ยนชื่อตัววนซ้ำ

อาร์กิวเมนต์ iterator ช่วยให้คุณเปลี่ยนชื่อตัวแปรการวนซ้ำได้ ซึ่งมีประโยชน์เมื่อซ้อนบล็อกแบบไดนามิกเพื่อหลีกเลี่ยงความสับสน

dynamic "ingress" {
  for_each = var.rules
  iterator = rule
  content {
    from_port = rule.value.port
    to_port   = rule.value.port
  }
}

การข้ามบล็อกตามเงื่อนไข

ส่งชุดข้อมูลว่างเพื่อสร้างบล็อกจำนวนศูนย์รายการ การใช้นิพจน์เงื่อนไขสามส่วนกับ for_each ทำให้บล็อกเป็นตัวเลือกได้

dynamic "logging" {
  for_each = var.enable_logging ? [1] : []
  content {
    target_bucket = var.log_bucket
  }
}

บล็อกแบบไดนามิกซ้อนกัน

บล็อกแบบไดนามิกสามารถซ้อนกันได้ ใช้ตัววนซ้ำที่แตกต่างกัน เพื่อให้บล็อกด้านในอ้างอิงได้ทั้งสองระดับโดยไม่กำกวม

dynamic "setting" {
  for_each = var.settings
  iterator = s
  content {
    namespace = s.value.namespace
    name      = s.value.name
    value     = s.value.value
  }
}

เมื่อใดไม่ควรใช้บล็อกแบบไดนามิก

บล็อกแบบไดนามิกเพิ่มการอ้างอิงทางอ้อมและอาจทำให้อ่านยาก หากมีบล็อกคงที่เพียงหนึ่งหรือสองบล็อก ให้เขียนระบุไว้ตรง ๆ ควรใช้บล็อกแบบไดนามิกเมื่อจำนวนบล็อกขึ้นอยู่กับข้อมูล

การตรวจสอบผลลัพธ์

เรียกใช้แผนเพื่อยืนยันว่าบล็อกที่สร้างขึ้นตรงตามที่คาดไว้ Terraform จะขยายสมาชิกทุกตัวในชุดข้อมูลให้เป็นบล็อกซ้อนกันที่เป็นรูปธรรม

terraform plan

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความรู้เกี่ยวกับบล็อกแบบไดนามิก

ทบทวน: การตั้งค่าแบบซ้อนที่ไม่ทำซ้ำ

บล็อกแบบไดนามิกช่วยให้คุณสร้างการตั้งค่าแบบซ้อนจากข้อมูลได้:

  • for_each ขับเคลื่อนการวนซ้ำ ส่วน content กำหนดแต่ละบล็อก
  • ตัววนซ้ำเปิดให้ใช้ .value และ .key
  • ชุดข้อมูลว่างทำให้บล็อกเป็นตัวเลือกได้
  • ใช้อย่างพอเหมาะเพื่อให้การตั้งค่าอ่านง่าย

คำถามที่พบบ่อย

บทเรียน “บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน”

สร้างบล็อกการตั้งค่าซ้อนกันที่ทำซ้ำได้โดยอัตโนมัติด้วยบล็อกไดนามิก ลดการคัดลอกและวางสำหรับสิ่งต่าง ๆ เช่นกฎกลุ่มความปลอดภัย คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม

ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การใช้ลูปกับ `for_each` และ `count`
  2. ฟังก์ชันในตัวของ Terraform
  3. นิพจน์เงื่อนไขและ Splat
  4. บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน
← กลับไปที่ DevOps Bootcamp