# การรองรับ Terraform ใน Maguyva: บริบทโครงสร้างพื้นฐานสำหรับเอเจนต์ AI

Canonical source: https://maguyva.ai/th/languages/terraform

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva รองรับ Terraform ด้วยการแยกวิเคราะห์ AST และการดึงสัญลักษณ์ ช่วยให้เอเจนต์ AI ตามรอย module, local, ตัวแปร, การอ้างอิงทรัพยากร และรูปแบบโครงสร้างพื้นฐานแบบไดนามิก ก่อนเสนอการเปลี่ยนแปลง

## ภาพรวมการรองรับ

- ระดับ: รองรับ AST และสัญลักษณ์
- โครงสร้างพื้นฐาน
- นามสกุลไฟล์: .tf, .tfvars
- การแยกวิเคราะห์ AST จริงสำหรับการค้นหาที่รู้จักไวยากรณ์และบริบทเชิงโครงสร้าง
- สัญลักษณ์ที่มีชื่อป้อนข้อมูลให้การค้นหาเชิงความหมายและการอ้างอิงไขว้ การนำทางกราฟจะใช้งานได้เมื่อเปิดใช้การสกัดความสัมพันธ์
- ภาษานี้ได้รับการจัดทำดัชนีสำหรับการค้นหา แต่ปัจจุบันยังไม่ได้จัดเก็บแบบถาวรไว้ในกราฟโค้ด
- รองรับทั้งการแยกวิเคราะห์ AST และการสกัดสัญลักษณ์

## เหมาะที่สุดสำหรับ

- ทีมแพลตฟอร์มที่ดูแล Terraform module ที่ใช้ซ้ำได้, โฟลเดอร์สภาพแวดล้อม และรูปแบบโครงสร้างพื้นฐานที่ใช้ร่วมกัน
- รีโพซิทอรีที่การเปลี่ยนโค้ดแอปมักต้องการการแก้ไขโครงสร้างพื้นฐานหรือการรีวิวผลกระทบตามไปด้วย
- เวิร์กโฟลว์เอเจนต์ที่ต้องเข้าใจการอ้างอิงและรัศมีผลกระทบก่อนแตะคำนิยามโครงสร้างพื้นฐาน

## เวิร์กโฟลว์ของเอเจนต์

- ตามรอยว่าตัวแปร, local, module และทรัพยากรเชื่อมโยงกันอย่างไรก่อนแก้ไขแผน
- เปรียบเทียบรุ่นย่อยของสภาพแวดล้อม และการใช้งาน module เพื่อให้การเปลี่ยนแปลงสอดคล้องกัน
- ตรวจสอบผลกระทบต่อส่วนที่พึ่งพาที่น่าจะเกิดขึ้นก่อนที่เอเจนต์จะเสนอการแก้ไขโครงสร้างพื้นฐาน

## เหตุใด Terraform จึงต้องการบริบทระดับรีโพ

โค้ดโครงสร้างพื้นฐานคือจุดที่เครื่องมือ AI จำนวนมากมักหวนกลับไปจัดการข้อความแบบตื้นๆ เงียบๆ ซึ่งไม่ดีพอ การเปลี่ยนแปลง Terraform มักอ่อนไหว หนักการอ้างอิง และกระจายไปทั่ว module, local, ตัวแปร, data source และโฟลเดอร์เฉพาะสภาพแวดล้อม ส่วนที่ยากคือการเข้าใจว่าการตั้งค่าประกอบกันอย่างไรก่อนเปลี่ยนแปลง

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

## สิ่งที่ Maguyva ช่วยให้เอเจนต์เข้าใจใน Terraform

Maguyva รองรับ Terraform เชิงโครงสร้าง ซึ่งเป็นพื้นฐานที่มีประโยชน์สำหรับการตามรอยการอ้างอิง module, การไหลของตัวแปร และความสัมพันธ์ของทรัพยากร สิ่งนี้สำคัญยิ่งขึ้นเมื่อโค้ดใช้ `count`, `for_each`, dynamic บล็อก และ module ที่ใช้ร่วมกัน ซึ่งทำให้ทำความเข้าใจโครงสร้างแผนจริงได้ยากขึ้นจากการอ่านผ่านๆ

ประโยชน์ในทางปฏิบัติคือ เอเจนต์สามารถตอบคำถามระดับรีโพซิทอรี เช่น “module นี้ถูกใช้ซ้ำที่ไหนบ้าง”, “อะไรพึ่งพาตัวแปรนี้” หรือ “โฟลเดอร์สภาพแวดล้อมใดเบี่ยงเบนไปจากรูปแบบ” ก่อนที่มันจะเสนอการเปลี่ยนแปลง

## สิ่งนี้พิสูจน์อะไรเกี่ยวกับความครอบคลุมภาษาของ Maguyva

Terraform คือบททดสอบที่ดีว่าความครอบคลุมภาษามีประโยชน์จริงหรือไม่ มันแสดงให้เห็นว่า Maguyva สามารถถือว่าโค้ดแอป โค้ดปฏิบัติการ และโครงสร้างพื้นฐานเป็นปัญหาระดับรีโพซิทอรีเดียว แทนที่จะเป็นเกาะแยกจากกันได้หรือไม่

หากโครงสร้างพื้นฐานของคุณอยู่ข้างโค้ด service [คู่มือ Go](/th/languages/go) คือคู่แบ็กเอนด์ที่ใกล้เคียงที่สุด หากรีโพเดียวกันมี package web หรือแพลตฟอร์มรวมอยู่ด้วย [คู่มือ TypeScript](/th/languages/typescript) คือหน้าใกล้เคียงที่เหมาะสม

## เมื่อใดที่หน้านี้มีประโยชน์

ใช้หน้านี้หากคำถามคือ “เอเจนต์เก็บบริบทโครงสร้างพื้นฐานไว้ได้ด้วยหรือไม่” นั่นเป็นคำถามที่สมจริงกว่าการถามแค่เรื่องภาษาแอปอย่างเดียว สำหรับตารางการรองรับฉบับเต็ม ให้ใช้ [compatibility](/th/docs/compatibility)

## รายละเอียดเอนจิน

- การปรับมาตรฐาน import ตัด `module` และ `source` ออก ทำให้เปรียบเทียบการอ้างอิงระดับโมดูลได้ง่ายขึ้น
- กฎภาษาของ Terraform รู้จักการอ้างอิง `var`, `local`, `module`, `data` และรีซอร์สเพื่อใช้ในการสกัดความสัมพันธ์ แต่นโยบายกราฟปัจจุบันไม่ได้จัดเก็บการอ้างอิงเหล่านี้แบบถาวรในกราฟโค้ดของ Maguyva
- โฟลว์ควบคุมเฉพาะของ Terraform เช่น `count`, `for_each`, และ dynamic บล็อกถูกมองเป็นโครงสร้างชั้นหนึ่ง ไม่ใช่ข้อความธรรมดา

## จุดเริ่มต้น MCP ที่มีประโยชน์

- `get_task_context`: ใช้กับพรอมป์อย่าง “ตามรอยว่าผลลัพธ์ของ module VPC เชื่อมต่อไปยัง service ECS อย่างไร” เมื่อคุณต้องการคำตอบที่ประกอบรวมกันอย่างรวดเร็ว
- `text_pattern_search`: ใช้ข้อความตรงตัวสำหรับที่อยู่รีซอร์ส ชื่อโมดูล หรือคีย์ตัวแปร ก่อนขยายขอบเขตการวิเคราะห์
