Review Checklist
นี่คือ checklist ที่ต้องไล่ดู — ด้วยตาเปล่า บน diff ไหนก็ได้ ไม่ว่าจะเป็นของคุณหรือของ AI — หลังจากเครื่องมือใน Verification Tools รันผ่านสะอาดแล้ว มันตั้งใจให้อยู่หน้าเดียวพิมพ์ได้พอดี: checklist ที่ไม่มีใครเปิดดูจริงตอน review ไม่มีค่าอะไรเลย ทุกบรรทัดลิงก์ไปยัง entry ที่อธิบาย เหตุผล เพื่อให้หน้านี้ยังเป็นแค่ list ไม่ใช่การรื้อคอร์สมาสอนซ้ำ กลุ่มต่างๆ เรียงตามลำดับเดียวกับ วิธีอ่าน Terraform ที่ไม่ได้เขียนเอง บวกกลุ่ม Tooling สุดท้ายที่ครอบคลุมว่าอีกเจ็ดกลุ่มถูก verify ยังไงจริงๆ
flowchart LR A["Versions & providers"] --> T["validate/plan จับได้บางส่วน<br/>(deprecation warning, module+count error)"] B["State & backend"] --> P["บางส่วน: remote_state พังดังจริง,<br/>backend-locking drift เงียบ"] V["Variables"] --> M["ส่วนใหญ่ต้อง review ด้วยคน<br/>(nullable/ephemeral ทำงานเงียบ)"] R["Resources & lifecycle"] --> P2["บางส่วน: for_each-on-unknown จับได้,<br/>prevent_destroy-ผิดตัวจับไม่ได้"] Mo["Modules"] --> P Tg["Terragrunt live tree"] --> M C["CI & policy"] --> P2
Versions & providers
หัวข้อที่มีชื่อว่า “Versions & providers”- ทุก
required_providersconstraint เป็น~>ไม่ใช่>=ใช่ไหม? Constraint ที่ลอยตัว resolve ไปที่ release ใหม่สุดของ registry ในวันที่initรัน ดู AI Bug Catalog, entry 1 .terraform.lock.hclcommit ไว้แล้วหรือยัง — ไม่ได้ gitignore พร้อมกับ.terraform/? ดู entry 4terraform validate -jsonกลับมาโดยไม่มี warning เลยใช่ไหม ไม่ใช่แค่ไม่มี error? Argument ที่ deprecated (acl,managed_policy_arns) ยัง validate และ plan ผ่านสำเร็จ ดู entry 2- มี module ไหนประกาศ
providerblock ของตัวเองหรือไม่? มัน validate ผ่านด้วยตัวเองสบายๆ และพังก็ต่อเมื่อผู้เรียกใช้ต้องการcount/for_each/depends_onดู entry 3
State & backend
หัวข้อที่มีชื่อว่า “State & backend”- กลไกล็อกของ backend ตรงกับสิ่งที่ Terraform/backend version นี้รองรับจริงหรือไม่ —
use_lockfile(S3, stable ตั้งแต่ 1.11) แทนที่dynamodb_tableที่ deprecated แล้ว? ดู AI Bug Catalog, entry 5 และ The State File terraform_remote_statedata source ทุกตัวชี้ไปที่key/pathที่ apply ไปแล้วจริงหรือไม่? ไม่มี mock fallback เลย — state ที่หายไปพัง plan ทั้งหมดหนักๆ ดู entry 6
Variables
หัวข้อที่มีชื่อว่า “Variables”- default ของ
nullable = falsevariable เคยแทนที่nullที่ผู้เรียกส่งมาตรงๆ อย่างเงียบๆ หรือไม่ โดยไม่มีอะไรในplan/applyoutput บอกเรื่องการแทนที่เลย? ดู AI Bug Catalog, entry 7 - variable ไหนที่เป็น
ephemeralมี default เป็น secret ตรงๆ หรือไม่? มันยังรั่วเข้าไปในshow -jsonของ plan ที่ save ไว้ แม้จะไม่เข้า state เลยก็ตาม ดู entry 8
Resources & lifecycle
หัวข้อที่มีชื่อว่า “Resources & lifecycle”- ใช้
countกับ list ไหนที่อาจถูกจัดลำดับใหม่ได้ ในที่ที่for_eachเป็นทางเลือกปลอดภัยทางเดียวหรือไม่? การเอา element ตรงกลางออกเลื่อน index ทุกตัวที่ตามมา ดู AI Bug Catalog, entry 10 lifecycle { prevent_destroy = true }อยู่บน resource ที่สำคัญจริงหรือไม่ — ตรวจตรงๆ ไม่ใช่สมมติจาก resource ใกล้ๆ? ดู entry 9 พิสูจน์ด้วยplan -destroyจริงที่ destroy database ที่ไม่ถูกป้องกันได้โดยไม่มีอะไรต้านเลยfor_eachไหน derive key มาจาก computed attribute ของ resource ที่ managed อีกตัวหรือไม่? Error “Invalid for_each argument” จริงและปัจจุบัน — ดู entry 11- ใช้
null_resourceในที่ที่terraform_data(1.4+) ตัดทั้ง provider dependency เพิ่มออกไปสำหรับพฤติกรรมที่เท่ากันหรือไม่? ดู entry 12 - มี argument ไหนที่ดู copy มาจาก resource type ที่คล้ายกันแต่ไม่ใช่ตัวเดียวกันหรือไม่ (
force_destroyบนgoogle_compute_instance, จริงบนgoogle_storage_bucketแต่ไม่ใช่ที่นี่)? Error “Unsupported argument” จริง — ดู entry 13
Modules
หัวข้อที่มีชื่อว่า “Modules”- ทุก
sourceที่ไม่ใช่ registry pin revision ไว้แล้วหรือยัง —?ref=<tag-or-sha>สำหรับ source แบบgit::,versionตรงๆ สำหรับ registry module? ถ้าไม่มี Terraform จะ track default branch ของHEADอย่างเงียบๆ ดู AI Bug Catalog, entry 14 depends_onบน module call ไหนมีไว้เพื่อ “แก้” ข้อร้องเรียนเรื่องลำดับที่จริงๆ แล้วเป็น reference cycle จริงหรือไม่? ไม่มีdepends_onใดกดError: Cycleจริงไว้ได้ ดู entry 15
Terragrunt live tree
หัวข้อที่มีชื่อว่า “Terragrunt live tree”- มีอะไรอ้างอิง
run-all/plan-allหรือไม่? ทั้งคู่เป็นคำสั่งที่ไม่รู้จักตั้งแต่ Terragrunt 1.1 CLI redesign — ปฏิเสธจริงและทันที ดู AI Bug Catalog, entry 16 - ไฟล์
terragrunt.hclของสอง environment เคยมีค่าaccount_id/region/subscription/project เหมือนกันทุกตัวอักษรในinputsหรือไม่?terragrunt hcl validateจับ copy-paste ที่ valid ทาง syntax แบบนี้ไม่ได้ ดู entry 17 พิสูจน์ด้วย diff ของdev/prodที่เหมือนกันทุกตัวอักษรจริง
CI & policy
หัวข้อที่มีชื่อว่า “CI & policy”-auto-approveเคยรันกับ plan ที่ สดใหม่ แทนที่จะเป็นไฟล์plan -outที่ save และ review แล้วหรือไม่? ดู AI Bug Catalog, entry 18 พิสูจน์ด้วย apply เทียบข้างกันจริง- GitHub Action จาก third-party ทุกตัว pin ด้วย commit SHA เต็ม ไม่ใช่ tag ที่เปลี่ยนได้อย่าง
@master/@mainใช่ไหม? ดู entry 19 - Policy Rego ไหนใช้ syntax ก่อน v1 (
deny[msg] { ... }) หรือไม่? มัน load ไม่ผ่านเลยภายใต้ OPA/conftest ปัจจุบัน — ดู entry 20 พิสูจน์ด้วยrego_parse_errorจริง - ทุก rule ของ
.tflint.hclอ้างอิงสิ่งที่ rulesettflint-ruleset-googleเล็กๆ ที่เน้น IAM (รวม 6 rule) มีอยู่จริงหรือไม่ — ไม่ใช่สมมติว่ามี resource-shape check แบบที่ ruleset ของ cloud อื่นที่ใหญ่กว่ามี? ดู entry 21 พิสูจน์ด้วย error “Rule not found” จริงและทันทีที่นี่ - มี secret จริงถูก commit ในไฟล์
.tfvarsหรือไม่ หรือเหลืออยู่ในterraform.tfstateเป็น plaintext แม้ output จะติดsensitiveแล้วหรือไม่? ดู entry 22–23
Tooling
หัวข้อที่มีชื่อว่า “Tooling”terraform validate -json | jq '.diagnostics[]'ถูกเช็คหา warning ด้วยหรือไม่ ไม่ใช่แค่ exit code ที่ไม่ใช่ศูนย์? ดู Verification Tools- CI รัน
terraform plan -detailed-exitcodeจริงและตรวจshow -jsonของ plan ที่ save ไว้ด้วย policy tool จริง (conftest, checkov) ไม่ใช่แค่กวาดตาดู plan text หรือไม่? ดู Verification Tools terragrunt hcl validate/renderรันใน CI ก่อนrun --all planเพื่อจับ syntax error ก่อนที่ tree 10 หน่วยจะ apply ไปครึ่งหนึ่งหรือไม่? ดู Verification Tools