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

การใช้ลูปกับ `for_each` และ `count`

เรียนรู้การจัดเตรียมทรัพยากรหรือโมดูลหลายอินสแตนซ์โดยใช้ `count` และ `for_each` เพื่อจัดการคอลเลกชันและแผนผังข้อมูลอย่างมีประสิทธิภาพ

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

บทนำสู่การวนซ้ำ

เมื่อจัดการโครงสร้างพื้นฐานด้วย Terraform คุณมักจำเป็นต้องสร้างทรัพยากรที่คล้ายกันหลายรายการ ลองนึกภาพว่าต้องสร้างเว็บเซิร์ฟเวอร์ 10 เครื่องหรืออินสแตนซ์ฐานข้อมูล 5 รายการ การเขียนบล็อกโค้ดเดิมซ้ำ ๆ จะทั้งน่าเบื่อและมีโอกาสเกิดข้อผิดพลาด

บทเรียนนี้จะแนะนำความสามารถอันทรงพลังของ Terraform สองอย่าง ได้แก่ count และ for_each ซึ่งช่วยให้คุณจัดเตรียมทรัพยากรหลายรายการได้อย่างมีประสิทธิภาพ พร้อมรักษาการกำหนดค่าให้กระชับและขยายได้

เหตุใดจึงใช้ `count` และ `for_each`

การใช้การวนซ้ำอย่าง count และ for_each มีประโยชน์อย่างมาก:

  • ลดการทำซ้ำ: เขียนโค้ดโครงสร้างพื้นฐานเพียงครั้งเดียวแล้วนำกลับมาใช้ใหม่
  • อ่านง่ายขึ้น: การกำหนดค่าของคุณจะสะอาดและเข้าใจได้ง่ายขึ้น
  • รองรับการขยาย: ปรับจำนวนทรัพยากรได้ง่ายโดยเปลี่ยนค่าเดียวหรือชุดข้อมูลเดียว
  • สอดคล้องกัน: ทำให้มั่นใจว่าทรัพยากรที่คล้ายกันทั้งหมดได้รับการกำหนดค่าเหมือนกัน

`count` สำหรับการทำซ้ำอย่างง่าย

อาร์กิวเมนต์เมทาของ count เหมาะอย่างยิ่งเมื่อคุณต้องสร้างอินสแตนซ์ของทรัพยากรหรือโมดูลที่ แทบจะเหมือนกันทุกประการ หลายรายการ คุณระบุค่าเป็นจำนวนเต็ม แล้ว Terraform จะสร้างอินสแตนซ์ตามจำนวนนั้น

อินสแตนซ์แต่ละรายการที่สร้างด้วย count จะมีดัชนีเริ่มจาก 0 ถึง count - 1 คุณสามารถเข้าถึงดัชนีนี้ได้ด้วย count.index

ตัวอย่าง: อินสแตนซ์ EC2 หลายรายการด้วย `count`

มาจัดเตรียมอินสแตนซ์ AWS EC2 ที่เหมือนกันสามรายการกัน สังเกตการใช้ count.index เพื่อกำหนดชื่อที่ไม่ซ้ำกันให้แต่ละเซิร์ฟเวอร์

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "web_server" {
  count         = 3
  ami           = "ami-053b0dcd10dcf2f56" # Ubuntu Server 20.04 LTS
  instance_type = "t2.micro"
  tags = {
    Name = "WebServer-${count.index}"
  }
}

ทำความเข้าใจ `count.index`

ในตัวอย่างก่อนหน้า ${count.index} จะถูกแปลงเป็น 0, 1 และ 2 โดยอัตโนมัติสำหรับแต่ละอินสแตนซ์ วิธีนี้ช่วยให้คุณสร้างตัวระบุที่ไม่ซ้ำกันหรือปรับคุณสมบัติของแต่ละอินสแตนซ์ได้

หากไม่มี count.index เซิร์ฟเวอร์ทั้งสามเครื่องจะมีแท็ก 'Name' เหมือนกันทุกประการ ซึ่งอาจทำให้เกิดความสับสนหรือปัญหาใน AWS

ทำความรู้จักกับ `for_each`

แม้ count จะเหมาะสำหรับการทำซ้ำอย่างง่าย แต่ for_each มีความยืดหยุ่นมากกว่า โดยจะวนซ้ำผ่าน ชุดสตริง หรือ แผนที่สตริง และสร้างหนึ่งอินสแตนซ์สำหรับแต่ละองค์ประกอบ

for_each เหมาะอย่างยิ่งเมื่อคุณต้องจัดการทรัพยากรที่มีการกำหนดค่าแตกต่างกัน หรือเมื่อจำนวนทรัพยากรถูกกำหนดโดยชุดข้อมูลที่ไม่ใช่ตัวเลข เช่น รายการชื่อสภาพแวดล้อม หรือแผนที่การตั้งค่าผู้ใช้

ตัวอย่าง: `for_each` กับชุดข้อมูล

ในที่นี้ เราสร้างบักเก็ต S3 สามรายการ โดยแต่ละรายการตั้งชื่อตามองค์ประกอบในชุดข้อมูล for_each เราใช้ each.value เพื่อเข้าถึงรายการปัจจุบันในการวนซ้ำ

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "app_buckets" {
  for_each = toset(["prod-app-data", "dev-app-logs", "test-app-assets"])
  bucket   = each.value
  acl      = "private"
  tags = {
    Environment = split("-", each.value)[0]
  }
}

ตัวอย่าง: `for_each` กับแผนที่

การใช้แผนที่ช่วยให้คุณกำหนดการกำหนดค่าที่ซับซ้อนและไม่ซ้ำกันสำหรับแต่ละทรัพยากรได้ ในที่นี้ เราสร้างบักเก็ต S3 ที่มีการตั้งค่าการกำหนดเวอร์ชันแตกต่างกันตามคีย์สภาพแวดล้อม

คุณสามารถเข้าถึงคีย์ด้วย each.key และเข้าถึงค่าด้วย each.value

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "configured_bucket" {
  for_each = {
    production = { name = "prod-data-bucket", versioning = true }
    development = { name = "dev-logs-bucket", versioning = false }
  }
  bucket        = each.value.name
  acl           = "private"
  versioning {
    enabled = each.value.versioning
  }
  tags = {
    Environment = each.key
  }
}

`count` เทียบกับ `for_each`: เลือกใช้อย่างเหมาะสม

ควรใช้แบบใดเมื่อใด

  • ใช้ count: สำหรับการวนซ้ำตามตัวเลขอย่างง่าย เพื่อสร้างทรัพยากรที่เหมือนกันในจำนวนที่กำหนด โดยให้ปริมาณเป็นสิ่งสำคัญหลัก เหมาะเมื่อคุณต้องการเพียงดัชนีเพื่อแยกความแตกต่าง
  • ใช้ for_each: สำหรับการวนซ้ำผ่านชุดข้อมูลที่ซับซ้อน เช่น ชุดข้อมูลหรือแผนที่ เมื่อทรัพยากรต้องมีตัวระบุหรือคุณสมบัติเฉพาะที่ได้มาจากองค์ประกอบของชุดข้อมูล โดยทั่วไปควรเลือกใช้เมื่อแต่ละอินสแตนซ์มีตัวระบุเชิงตรรกะที่ชัดเจนและไม่ซ้ำกัน

ตรวจสอบอย่างรวดเร็ว: การวนซ้ำ

ลองพิจารณาสถานการณ์ที่คุณต้องสร้างบักเก็ต S3 สำหรับแต่ละทีมในองค์กร และแต่ละบักเก็ตต้องมีนโยบายการเก็บรักษาเฉพาะที่ทีมดังกล่าวกำหนด

สรุป: การสร้างทรัพยากรอย่างมีประสิทธิภาพ

ทำได้ดีมาก คุณได้เรียนรู้วิธีใช้ count และ for_each เพื่อทำให้การกำหนดค่า Terraform ของคุณมีความยืดหยุ่นและมีประสิทธิภาพมากขึ้น

  • count ใช้สำหรับการทำซ้ำทรัพยากรที่เหมือนกันตามจำนวนตัวเลขอย่างง่าย โดยใช้ count.index เพื่อแยกความแตกต่าง
  • for_each ใช้สำหรับการวนซ้ำผ่านชุดข้อมูลหรือแผนที่ เพื่อสร้างทรัพยากรที่แตกต่างกันและมีคุณสมบัติเฉพาะ โดยใช้ each.key และ each.value

โครงสร้างเหล่านี้เป็นพื้นฐานสำคัญสำหรับการจัดการโครงสร้างพื้นฐานเป็นโค้ดที่ขยายและบำรุงรักษาได้

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

บทเรียน “การใช้ลูปกับ `for_each` และ `count`” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การใช้ลูปกับ `for_each` และ `count`”

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

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

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

บทเรียน “การใช้ลูปกับ `for_each` และ `count`” ใช้เวลานานแค่ไหน

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

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

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

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

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