นิพจน์เงื่อนไขและ Splat
ใช้งานตรรกะตามเงื่อนไขในการกำหนดค่าด้วยตัวดำเนินการสามส่วน และทำความเข้าใจนิพจน์ Splat สำหรับแปลงรายการออบเจ็กต์
นิพจน์เงื่อนไขและ Splat เป็นบทเรียน DevOps Bootcamp ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน DevOps Bootcamp และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
ตรรกะแบบไดนามิกใน Terraform
Terraform ไม่ได้มีไว้สำหรับการประกาศแบบตายตัวเท่านั้น! เราใช้ตรรกะแบบไดนามิกเพื่อทำให้การกำหนดค่าโครงสร้างพื้นฐานมีความชาญฉลาดและปรับเปลี่ยนได้มากขึ้น
บทเรียนนี้จะแนะนำเครื่องมืออันทรงพลังสองอย่าง ได้แก่ นิพจน์เงื่อนไข และ นิพจน์ splat เครื่องมือเหล่านี้ช่วยให้โครงสร้างพื้นฐานปรับตามสถานการณ์ต่าง ๆ และแปลงข้อมูลได้อย่างมีประสิทธิภาพ
นิพจน์เงื่อนไข: พื้นฐาน
นิพจน์เงื่อนไข ซึ่งมักเรียกว่าตัวดำเนินการสามส่วน ช่วยให้คุณเลือกค่าหนึ่งจากสองค่าโดยพิจารณาว่าเงื่อนไขเป็นจริงหรือเท็จ ซึ่งคล้ายกับคำสั่ง if-else แบบง่ายสำหรับค่า
- ไวยากรณ์:
condition ? value_if_true : value_if_false - เหมาะอย่างยิ่งสำหรับทำให้การกำหนดค่ามีความยืดหยุ่นและนำกลับมาใช้ซ้ำได้ โดยปรับตามสภาพแวดล้อมหรือการตั้งค่าที่แตกต่างกัน
เงื่อนไข: ตัวอย่างค่าพื้นฐาน
มาดูกันว่านิพจน์เงื่อนไขสามารถกำหนดค่าของตัวแปรท้องถิ่นแบบไดนามิกโดยอิงจากตัวแปรอินพุตได้อย่างไร ลองเปลี่ยน default = "dev" เป็น default = "prod" แล้วเรียกใช้ใหม่
variable "env" {
description = "Deployment environment (dev or prod)"
type = string
default = "dev"
}
locals {
instance_type = var.env == "prod" ? "t3.medium" : "t3.micro"
}
output "chosen_instance_type" {
value = local.instance_type
description = "The instance type selected based on environment."
}เงื่อนไข: ตัวอย่างแอตทริบิวต์ของทรัพยากร
คุณยังใช้เงื่อนไขเพื่อควบคุมแอตทริบิวต์ของทรัพยากรได้ด้วย รวมถึงควบคุมว่าจะสร้างทรัพยากรหรือไม่! ในตัวอย่างนี้ เราจะสร้างบักเก็ต S3 ตามเงื่อนไขโดยใช้เมตาอาร์กิวเมนต์ count
variable "create_bucket" {
description = "Whether to create an S3 bucket"
type = bool
default = true
}
resource "aws_s3_bucket" "my_bucket" {
# If create_bucket is true, count is 1 (create one bucket).
# If create_bucket is false, count is 0 (create no buckets).
count = var.create_bucket ? 1 : 0
bucket = "coddykit-unique-bucket-12345" # IMPORTANT: Replace with a globally unique name!
acl = "private"
}
output "bucket_id" {
value = var.create_bucket ? aws_s3_bucket.my_bucket[0].id : "No bucket created"
description = "The ID of the created S3 bucket, or a message if not created."
}ทำความเข้าใจนิพจน์ splat
นิพจน์ splat ([*]) ใช้แปลงรายการออบเจ็กต์ให้เป็นรายการแอตทริบิวต์เฉพาะจากออบเจ็กต์เหล่านั้น เป็นทางลัดอันทรงพลังสำหรับดึงข้อมูลจากหลายรายการพร้อมกัน
- ไวยากรณ์:
LIST_OF_OBJECTS[*].ATTRIBUTE - ช่วยให้ทำงานกับคอลเลกชันต่าง ๆ ได้ง่ายขึ้น เช่น ทรัพยากรหลายรายการที่สร้างด้วย
countหรือตัวแปรรายการที่ซับซ้อน
splat: ตัวอย่างเอาต์พุตของทรัพยากร
ลองนึกภาพว่าคุณสร้างอินสแตนซ์ EC2 หลายรายการ คุณจะดึงรายการ IP สาธารณะทั้งหมดได้อย่างง่ายดายอย่างไร นิพจน์ splat เหมาะกับงานนี้อย่างยิ่ง! หมายเหตุ: คุณต้องใช้ AMI ที่ถูกต้องสำหรับภูมิภาค AWS ของคุณ
resource "aws_instance" "web" {
count = 2 # Creates two instances
ami = "ami-0abcdef1234567890" # Replace with a valid AMI ID for your region
instance_type = "t2.micro"
tags = {
Name = "web-instance-${count.index}"
}
}
output "web_instance_public_ips" {
value = aws_instance.web[*].public_ip
description = "A list of public IP addresses for all web instances."
}splat: ตัวอย่างรายการตัวแปร
นิพจน์ splat ไม่ได้ใช้ได้เฉพาะกับทรัพยากรเท่านั้น แต่ยังทำงานได้ดีกับตัวแปรที่ซับซ้อนด้วย ในที่นี้ เรามีรายการออบเจ็กต์ผู้ใช้และต้องการดึงเฉพาะที่อยู่อีเมลของผู้ใช้เหล่านั้น
variable "users" {
description = "List of user objects, each with name, email, and role."
type = list(object({
name = string
email = string
role = string
}))
default = [
{ name = "Alice", email = "alice@example.com", role = "admin" },
{ name = "Bob", email = "bob@example.com", role = "viewer" },
{ name = "Charlie", email = "charlie@example.com", role = "editor" }
]
}
output "user_emails" {
value = var.users[*].email
description = "A list containing only the email addresses of the users."
}การรวมเงื่อนไขและ splat
คุณสามารถรวมขนิพจน์เงื่อนไขและนิพจน์ splat เพื่อสร้างตรรกะที่ก้าวหน้าและกระชับยิ่งขึ้นได้ ตัวอย่างเช่น คุณอาจเลือกทรัพยากรชุดหนึ่งตามเงื่อนไข แล้วใช้นิพจน์ splat กับรายการที่เลือก
- วิธีนี้ช่วยให้การกำหนดค่าปรับตามสถานการณ์ที่ซับซ้อนได้อย่างยืดหยุ่นสูง
- ตัวอย่าง:
(var.env == "prod" ? aws_instance.prod : aws_instance.dev)[*].idสามารถดึง ID จากชุดอินสแตนซ์ที่แตกต่างกันตามสภาพแวดล้อม
แนวทางปฏิบัติที่ดีสำหรับตรรกะแบบไดนามิก
แม้ตรรกะแบบไดนามิกจะมีประสิทธิภาพ แต่บางครั้งอาจทำให้เข้าใจการกำหนดค่าได้ยากขึ้นหากใช้อย่างไม่ระมัดระวัง ต่อไปนี้คือคำแนะนำ:
- ทำให้อ่านง่าย: แบ่งนิพจน์ที่ซับซ้อนออกเป็นส่วนย่อย ๆ ที่จัดการได้ง่ายขึ้น
- ใช้ค่าท้องถิ่น: จัดเก็บนิพจน์เงื่อนไขหรือนิพจน์ splat ที่ซับซ้อนไว้ในบล็อก
localsเพื่อให้อ่านง่ายขึ้นและป้องกันการเขียนซ้ำ - ทดสอบอย่างละเอียด: ตรรกะแบบไดนามิกอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด ควรเรียกใช้
terraform planเสมอและตรวจสอบการเปลี่ยนแปลงที่เสนออย่างละเอียด - จัดทำเอกสาร: เพิ่มความคิดเห็นเพื่ออธิบายตรรกะที่ซับซ้อน โดยเฉพาะเมื่อรวมเงื่อนไขกับ splat
ตรวจสอบความเข้าใจอย่างรวดเร็ว
พิจารณาการกำหนดค่า Terraform ต่อไปนี้:
variable "server_names" {
type = list(string)
default = ["web-01", "db-01", "cache-01"]
}
output "filtered_names" {
value = var.server_names[*]
}ทบทวนและขั้นตอนถัดไป
ทำได้ดีมาก! คุณได้เรียนรู้วิธีทำให้การกำหนดค่า Terraform มีความไดนามิกและยืดหยุ่นมากขึ้นแล้ว:
- เราได้สำรวจ นิพจน์เงื่อนไข (ตัวดำเนินการสามส่วน) เพื่อทำให้ค่าทำงานแบบไดนามิกตามเงื่อนไขที่กำหนด
- เราเชี่ยวชาญ นิพจน์ splat (
[*]) เพื่อดึงรายการแอตทริบิวต์จากคอลเลกชันของออบเจ็กต์หรือทรัพยากรได้อย่างมีประสิทธิภาพ
เครื่องมือเหล่านี้เป็นพื้นฐานสำคัญสำหรับการสร้างโครงสร้างพื้นฐานในรูปแบบโค้ดที่ปรับขนาดได้ นำกลับมาใช้ซ้ำได้ และปรับตามสถานการณ์ได้ ฝึกฝนต่อไปเพื่อผสานเครื่องมือเหล่านี้เข้ากับขั้นตอนการทำงานประจำวันของคุณใน Terraform!
คำถามที่พบบ่อย
บทเรียน “นิพจน์เงื่อนไขและ Splat” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “นิพจน์เงื่อนไขและ Splat” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส DevOps Bootcamp ให้อัปเกรดเป็น CoddyKit PRO คอร์ส DevOps Bootcamp มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “นิพจน์เงื่อนไขและ Splat”
ใช้งานตรรกะตามเงื่อนไขในการกำหนดค่าด้วยตัวดำเนินการสามส่วน และทำความเข้าใจนิพจน์ Splat สำหรับแปลงรายการออบเจ็กต์ คุณปฏิบัติ DevOps Bootcamp ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน DevOps Bootcamp หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน DevOps Bootcamp บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “นิพจน์เงื่อนไขและ Splat” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน DevOps Bootcamp นี้ได้ไหม
ได้ บทเรียน DevOps Bootcamp ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การใช้ลูปกับ `for_each` และ `count`
- ฟังก์ชันในตัวของ Terraform
- นิพจน์เงื่อนไขและ Splat
- บล็อกไดนามิกสำหรับการตั้งค่าซ้อนกัน