บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน
สร้างบล็อกการตั้งค่าซ้อนกันที่ทำซ้ำได้โดยอัตโนมัติด้วยบล็อกไดนามิก ลดการคัดลอกและวางสำหรับสิ่งต่าง ๆ เช่นกฎกลุ่มความปลอดภัย
บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน เป็นบทเรียน Terraform Infrastructure as Code ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Terraform Infrastructure as Code และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Terraform Infrastructure as Code มีบทเรียนทั้งหมด 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 - ชุดข้อมูลว่างทำให้บล็อกเป็นตัวเลือกได้
- ใช้อย่างพอเหมาะเพื่อให้การตั้งค่าอ่านง่าย
เรียนรู้ Terraform Infrastructure as Code ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 12
- บทเรียน
- 48
คำถามที่พบบ่อย
บทเรียน “บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Terraform Infrastructure as Code ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Terraform Infrastructure as Code มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน”
สร้างบล็อกการตั้งค่าซ้อนกันที่ทำซ้ำได้โดยอัตโนมัติด้วยบล็อกไดนามิก ลดการคัดลอกและวางสำหรับสิ่งต่าง ๆ เช่นกฎกลุ่มความปลอดภัย คุณปฏิบัติ Terraform Infrastructure as Code ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Terraform Infrastructure as Code หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Terraform Infrastructure as Code บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Terraform Infrastructure as Code นี้ได้ไหม
ได้ บทเรียน Terraform Infrastructure as Code ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การใช้ลูปกับ `for_each` และ `count`
- ฟังก์ชันในตัวของ Terraform
- นิพจน์เงื่อนไขและ Splat
- บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน