Terraform Plan Explorer: อ่าน Terraform Plan JSON ให้เป็นภาษามนุษย์
Terraform Plan Explorer แปลงผลลัพธ์ terraform plan -json ให้เป็นสรุปการเปลี่ยนแปลงและ diff แบบ before/after ราย resource โดยประมวลผลทั้งหมดในเบราว์เซอร์ของคุณ
Table of Contents
การเปลี่ยนแปลง infrastructure ที่เสี่ยงทุกครั้งควรถูกจับให้ได้ก่อนที่มันจะเกิดขึ้น และจุดที่จับได้อย่างน่าเชื่อถือที่สุดก็คือ terraform plan แต่ปัญหาคือการ review plan นั้นทำได้ยาก: ผลลัพธ์สีสันใน terminal คัดลอกไปแชร์ได้ลำบาก ส่วนผลลัพธ์แบบ machine-readable อย่าง terraform plan -json กลับเป็น stream ของ JSON ที่ไม่มี reviewer คนไหนอยากไล่อ่าน Terraform Plan Explorer ถูกสร้างมาเพื่อปิดช่องว่างนี้ — เพียงวาง plan JSON ของคุณลงไป ก็จะได้สรุปและ diff ที่อ่านง่ายทันที
เครื่องมือนี้ออกแบบมาเพื่อช่วงเวลาการ review โดยเฉพาะ วางผลลัพธ์ของ terraform plan -json แล้วคุณจะเห็นทันทีว่ามี resource กี่ตัวที่จะถูก create, update, delete และ replace จากนั้นเปิดดูราย resource เพื่อตรวจ diff แบบ before/after ของเฉพาะ attribute ที่เปลี่ยนแปลง ทุกอย่างประมวลผลแบบ client-side ข้อมูล infrastructure ของคุณจึงไม่หลุดออกจากเบราว์เซอร์เลย
ในบทความนี้เราจะพาไปดูว่าทำไมการ review plan แบบมีโครงสร้างจึงสำคัญ วิธีใช้เครื่องมือทีละขั้นตอน และ reviewer ที่เก่งแล้วอ่าน plan กันอย่างไร — นิสัยเหล่านี้คือสิ่งที่ช่วยจับการ replace ฐานข้อมูลโดยไม่ตั้งใจ ก่อนที่มันจะไปถึง production
ทำไมต้องใช้ Terraform Plan Explorer?
- แปลง machine JSON ให้เป็น diff ที่มนุษย์อ่านได้ flag -json ให้ผลลัพธ์ที่ออกแบบมาสำหรับเครื่อง ไม่ใช่คน เครื่องมือนี้แปลง stream นั้นให้เป็น diff แบบ before/after ที่คุณอ่านรู้เรื่องจริง ๆ
- สรุปการเปลี่ยนแปลงทันที ตัวเลข create, update, delete และ replace ปรากฏขึ้นทันทีที่วาง output ทำให้ตอบคำถามว่า "การเปลี่ยนแปลงนี้ทำลายของหรือเปล่า?" ได้ในไม่กี่วินาที
- เห็น replace ชัดเจน การ replace คือ action ที่น่ากลัวที่สุดใน plan สรุปและตัวกรองช่วยดันมันขึ้นมาให้เห็น แทนที่จะปล่อยให้ซ่อนอยู่ท่ามกลาง update ปกติอีกเป็นสิบรายการ
- รายการ resource ที่กรองได้ plan ใหญ่ ๆ แตะ resource หลายร้อยตัว กรองตาม action หรือค้นหาตามชื่อเพื่อโฟกัสเฉพาะ database และ IAM policy ที่สำคัญ
- เป็นส่วนตัวตั้งแต่การออกแบบ การ parse เกิดขึ้นทั้งหมดในเบราว์เซอร์ของคุณ plan มักเปิดเผย CIDR range, hostname และรูปแบบการตั้งชื่อ — เครื่องมือนี้ไม่มีการอัปโหลดข้อมูลเหล่านี้ไปที่ใดเลย
- ไม่ต้องตั้งค่าอะไรเลย ไม่ต้อง install ไม่ต้องสมัคร account ไม่ต้องมี plugin reviewer ที่ไม่ได้รัน terraform เองก็ยัง review plan ได้อย่างถูกวิธี
ฟีเจอร์หลัก
| ฟีเจอร์ | ทำอะไร |
|---|---|
| วาง Plan JSON | รับผลลัพธ์เต็มของ terraform plan -json แล้ว parse ในเครื่องของคุณผ่านเบราว์เซอร์ |
| สรุปการเปลี่ยนแปลง | แสดงจำนวน resource ที่จะถูก create, update, delete และ replace ในที่เดียว |
| Diff ราย resource | แสดงค่า before/after ของทุก attribute ที่เปลี่ยนแปลงในแต่ละ resource |
| รายการ resource ที่กรองได้ | กรองตามชนิด action หรือชื่อ resource เพื่อย่อ plan ใหญ่ให้เหลือเฉพาะส่วนที่สำคัญ |
| Parse ฝั่ง client | ไม่มีการอัปโหลดใด ๆ การ parse และแสดงผลทั้งหมดเกิดขึ้นบนเครื่องของคุณ |
รายละเอียดที่ควรรู้:
- แถบสรุปทำหน้าที่เป็นกระดาน triage ถ้าจำนวน replace เป็นศูนย์ คุณ review ได้เร็ว แต่ถ้ามากกว่าศูนย์ ให้ช้าลงและอ่านให้ครบ
- Diff แสดงเฉพาะ attribute ที่เปลี่ยน คุณจึงได้ review สิ่งที่กำลังเปลี่ยน ไม่ใช่ต้องอ่าน resource ทั้งก้อนซ้ำอีกรอบ
- parser รองรับ plan ตามโลกจริง ทั้ง resource_changes หลายร้อยรายการและ attribute map ที่ซ้อนกันลึก
วิธีใช้งาน Terraform Plan Explorer
- รัน plan พร้อม JSON output ในโปรเจกต์ terraform ของคุณ รัน terraform plan -json แล้วเก็บ stream ไว้ — redirect ลงไฟล์ หรือคัดลอกจาก terminal หรือ CI log ก็ได้
- วางผลลัพธ์ลงในเครื่องมือ วาง stream ทั้งหมดลงในช่อง input การ parse เริ่มทันทีและเกิดขึ้นฝั่ง client ทั้งหมด
- อ่านตัวเลขสรุป เริ่มจากยอดรวม create, update, delete และ replace แล้วเช็คว่ารูปร่างของการเปลี่ยนแปลงตรงกับเจตนาของงานหรือไม่
- เปิดดู diff ราย resource คลิกเข้าไปดู resource ที่สนใจเพื่อเห็น attribute แบบ before/after อ่านคู่ค่าที่เปลี่ยนทีละบรรทัด และ flag ทุกอย่างที่หายไปหรือเปลี่ยนผิดคาด
- กรองให้เหลือสิ่งที่สำคัญ ใช้ตัวกรอง action หรือค้นหาชื่อเพื่อแยก replace ออกมาดูก่อน ตามด้วย resource ที่ sensitive ด้านความปลอดภัย แล้วค่อยไล่ดูส่วนที่เหลือ
อ่าน Plan เหมือน Reviewer มืออาชีพ
resource ทุกตัวใน plan มี action หนึ่งในสี่แบบ และแต่ละแบบสมควรได้รับความสนใจต่างกัน
Create เสี่ยงน้อยที่สุด มี resource ใหม่เกิดขึ้นโดยไม่แตะของเดิม เพียงยืนยันว่ามันควรมีอยู่และตั้งชื่อสมเหตุสมผล Update แก้ไข resource เดิมในที่ — เป็นงานประจำของ terraform แต่ก็เป็นจุดที่การเปลี่ยนแปลงโดยไม่ตั้งใจชอบซ่อนตัว นี่คือเหตุผลที่ diff แบบ before/after คือพื้นผิวหลักที่คุณต้องอ่าน Delete ลบ resource ออกทั้งตัว ควรมีเหตุผลระบุไว้เสมอ เพราะการ delete ที่ถูกต้องนั้นพบได้น้อยในงานประจำ
Replace คือตัวอันตราย การ replace หมายความว่า terraform จะทำลาย resource เดิมแล้วสร้างใหม่ขึ้นมาแทน โดยปกติเกิดจาก attribute ที่เปลี่ยนไม่ได้ในที่ (attribute แบบ force_new) สำหรับ tag บน instance replace อาจแค่น่ารำคาญ แต่สำหรับ database, load balancer หรือ KMS key มันอาจหมายถึง downtime, ข้อมูลสูญหาย หรือความล้มเหลวแบบลูกโซ่ในทุกอย่างที่อ้างอิง resource เดิม นี่คือเหตุผลที่คุณควรกรองด้วย replace เป็นอันดับแรก — ตัวเลขนี้สำคัญกว่าตัวเลขอื่นใดในหน้าสรุป
ตอนอ่าน diff แบบ before/after ให้จับสามรูปแบบนี้: ค่าที่เปลี่ยนเงียบ ๆ ไปเป็น placeholder แบบ computed (มักเป็นสัญญาณของการเปลี่ยนแปลงลูกโซ่) attribute ที่หายไปทั้งตัว และ field ที่ sensitive ด้านความปลอดภัย — IAM policy, security group rule, flag ของ public IP — ที่ diff บรรทัดเดียวก็เป็นเรื่องใหญ่
ข้อควรระวังเรื่อง sensitive value: terraform ปกปิด sensitive value ไว้ใน plan output แต่ plan JSON ยังเปิดเผยรายละเอียด infrastructure ของคุณมากพอสมควร จึงควรถือเป็นข้อมูลลับ — วางลงเครื่องมือแบบ client-side อย่างเครื่องมือนี้ ไม่ใช่เว็บสุ่มสี่สุ่มห้าหรือ issue สาธารณะ
อะไรที่ควรอยู่ในคอมเมนต์ PR? ตัวเลขสรุป เหตุผลประกอบทุก replace และ delete diff สำคัญ ๆ ของจุดที่ sensitive ด้านความปลอดภัย และทุกอย่างที่ทำให้คุณแปลกใจ นั่นคือความต่างระหว่าง "LGTM" แบบลอก ๆ กับการ review จริง
ตัวอย่างการใช้งานจริง
ใช้เป็นหลักฐานประกอบการ Review PR
เมื่อ CI โพสต์ plan JSON ไว้บน pull request ให้วางลงเครื่องมือแล้วแนบสรุปพร้อม diff ที่สำคัญสองสามจุดไปกับคอมเมนต์ review reviewer จะได้หลักฐานแทนกองข้อความ terminal ที่เต็มไปด้วยสี ANSI และการอนุมัติก็กลายเป็นการตัดสินใจจากการเปลี่ยนแปลงที่เกิดขึ้นจริง
จับการ Replace ฐานข้อมูลโดยไม่ตั้งใจ
เหตุการณ์คลาสสิก: มีคนปรับขนาด instance หรือเปลี่ยน identifier แล้ว attribute ที่ไม่เกี่ยวข้องกลับบังคับให้ database ถูกสร้างใหม่ทั้งตัว การกรอง plan ด้วย action replace ทำให้เห็นสิ่งนี้ทันที — เห็นตัวเลข replace อยู่ข้าง database production ของคุณเพียงครั้งเดียวก็พอให้หยุด apply แล้วกลับไปแก้ configuration
ตรวจสอบการแก้ Drift
หลังจากมีคนแก้ infrastructure ด้วยมือ plan ถัดไปจะโชว์ update เป็นร้อยรายการขณะ terraform ปรับความเป็นจริงให้ตรงกับโค้ด การไล่อ่าน diff เหล่านี้ยืนยันได้สองเรื่อง: การปรับให้ตรงนั้นตรงกับสิ่งที่เกิดขึ้นจริง และไม่มีการแก้มือที่ใครอยากเก็บไว้ถูกย้อนกลับไปอย่างเงียบ ๆ
สอนเพื่อนร่วมงานให้อ่าน Plan เป็น
การอ่าน plan เป็นทักษะ และ terminal เป็นห้องเรียนที่โหดร้าย เปิด plan จริงในเครื่องมือนี้ร่วมกับวิศวกร junior ไล่ดูสรุป ตามด้วย diff สักสองสามจุด แล้วคุยกันว่าการเปลี่ยนแปลงไหนสมควรได้รับการตรวจเพิ่ม เขาจะได้เรียนรู้ action, รูปแบบของ diff และสัญชาตญาณเรื่องความเสี่ยง โดยไม่ต้องแตะ production
แนวปฏิบัติที่ดี
- อ่าน plan ทุกครั้งก่อน apply แม้แต่การเปลี่ยนแปลง "เล็กน้อย" ก็ส่งผลลูกโซ่ได้ plan คือภาพตัวอย่างที่ซื่อสัตย์ที่สุดเท่าที่จะมีได้
- กรองด้วย replace เป็นอันดับแรก ตั้งเป้า replace เป็นศูนย์เป็น checkpoint ชัดเจนก่อนอนุมัติทุก PR
- เช็ค diff ของ IAM และ security group สองรอบ การเปลี่ยน policy เล็ก ๆ มีผลต่อความปลอดภัยมหาศาล อ่านมันทีละบรรทัด
- ถือว่า plan JSON เป็นข้อมูลลับ มันเปิดเผยรายละเอียดภายในของ infrastructure เก็บไว้ใน CI artifact ที่ควบคุมการเข้าถึง และใช้เฉพาะเครื่องมือ client-side เท่านั้น
- แนบสรุปไปกับทุก PR ตัวเลขและ diff สำคัญทำให้การ review อิงหลักฐาน และย้อนดูได้ในภายหลัง
- ทำให้การ review plan เป็นด่านบังคับ กำหนดให้ reviewer ต้องคอมเมนต์สรุปการเปลี่ยนแปลงก่อนจะ apply ได้
พร้อมทำให้การ review plan เป็นจุดแข็งที่สุดของ workflow คุณหรือยัง? เปิด Terraform Plan Explorer วางผลลัพธ์ terraform plan -json ถัดไปของคุณ แล้วเห็นการเปลี่ยนแปลง infrastructure เป็นภาษาที่อ่านรู้เรื่อง ก่อนที่อะไรจะไปถึง production
เครื่องมืออื่น ๆ ที่คุณอาจสนใจ:
- Env to TFVars Convert — แปลงไฟล์ .env เป็นรูปแบบ terraform.tfvars
- JSON Formatter — จัดรูปแบบและตรวจสอบ JSON ให้อ่านง่าย
- JSON to YAML Converter — สลับ config ระหว่างสองฟอร์แมตได้ในคลิกเดียว
ขอให้สนุกกับการ ship!
คำถามที่พบบ่อย
ถ: Terraform Plan Explorer อัปโหลด plan ของฉันไปที่ไหนหรือเปล่า? ตอบ: ไม่ การ parse ทั้งหมดเกิดขึ้นแบบ client-side ในเบราว์เซอร์ของคุณ plan JSON ไม่เคยออกจากเครื่อง จึงปลอดภัยแม้กับข้อมูล infrastructure ที่ควรอยู่ภายในองค์กร
ถ: ผลลัพธ์ terraform plan -json คืออะไรกันแน่? ตอบ: มันคือฟอร์แมต plan แบบ machine-readable ของ terraform เป็น stream ของ JSON event ที่บรรยายการเปลี่ยนแปลงที่เสนอ รวมถึงส่วน resource_changes ที่มีค่า before/after ของแต่ละ resource รัน terraform plan -json แทน plan ปกติเพื่อสร้างมัน
ถ: delete กับ replace ต่างกันอย่างไร? ตอบ: delete คือการลบ resource ออกไปเลยโดยไม่มีอะไรมาแทน ส่วน replace คือทำลาย resource เดิมแล้วสร้างใหม่ขึ้นมาแทนที่ ซึ่งรีเซ็ต state, ID และในหลายกรณีคือข้อมูล — replace จึงมักเสี่ยงกว่า
ถ: เครื่องมือนี้ใช้ฟรีหรือไม่? ตอบ: ใช่ ใช้ฟรี ไม่ต้องสมัคร account และใช้งานได้ในเบราว์เซอร์สมัยใหม่ทุกตัวโดยไม่ต้องติดตั้งอะไรเลย