# Maguyva 对 Terraform 的支持：为 AI 智能体提供基础设施上下文

Canonical source: https://maguyva.ai/zh-hans/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 通过 AST 解析和符号提取支持 Terraform，让 AI 智能体能够在提出修改建议之前，先追踪模块、局部变量、变量、资源引用和动态基础设施模式。

## 支持情况速览

- 支持等级: AST 和符号支持
- 基础设施
- 扩展名: .tf, .tfvars
- 真正的 AST 解析，支撑语法感知搜索和结构化上下文。
- 命名符号支撑语义查找和交叉引用。启用关系提取后，即可使用图谱导航。
- 该语言已建立搜索索引，但目前尚未持久化到代码图谱中。
- 同时支持 AST 解析和符号提取。

## 最适合场景

- 管理可复用 Terraform 模块、环境目录和共享基础设施模式的平台团队。
- 应用代码变更常常需要相应基础设施修改或影响评审的代码仓库。
- 在改动基础设施定义之前，需要先理解引用关系和影响范围的智能体工作流。

## 智能体工作流

- 在修改执行计划之前，先追踪变量、局部变量、模块和资源之间的连接关系。
- 对比不同环境的变体与模块使用方式，以保持改动的一致性。
- 在智能体提出基础设施修改建议之前，先检查可能的下游影响。

## 为什么 Terraform 需要代码仓库级别的上下文

基础设施代码正是许多 AI 工具悄悄退化为浅层文本处理的地方，而这远远不够。Terraform 的改动通常十分敏感、引用密集，并且分散在模块、局部变量、变量、数据源和特定环境目录之中。难点在于要在修改配置之前，先理解它们是如何相互衔接的。

这就是为什么即便你的主要应用代码位于别处，Terraform 支持依然重要。如果代码仓库中包含基础设施代码，智能体就需要把它看作同一个系统的一部分，而不是一个只能靠猜的附属品。

## Maguyva 如何帮助智能体理解 Terraform

Maguyva 对 Terraform 提供结构化支持，这是追踪模块引用、变量流转和资源关系的实用基础。一旦代码用上了 `count`、`for_each`、动态块以及共享模块——这些会让人难以仅凭粗略浏览就还原出真实的执行计划形态——这一点就变得更加重要。

实际的好处在于，智能体能够在提出修改建议之前，先回答诸如“这个模块在哪里被复用？”“什么依赖于这个变量？”或“哪些环境目录偏离了既定模式？”这类代码仓库级别的问题。

## 这对 Maguyva 语言覆盖能力说明了什么

Terraform 很好地检验了语言覆盖能力是否真的实用。它表明 Maguyva 能否把应用代码、运维代码和基础设施当作同一个代码仓库级别的问题来处理，而不是当作彼此孤立的孤岛。

如果你的基础设施与服务代码相邻，[Go 指南](/zh-hans/languages/go) 是最贴近的后端搭配。如果同一个代码仓库还包含 Web 或平台包，[TypeScript 指南](/zh-hans/languages/typescript) 才是合适的相邻页面。

## 这个页面何时有用

如果你的问题是“智能体能否同时保留基础设施上下文”，就适合看这个页面——这比只问应用语言支持更贴近现实。如果你需要原始的支持矩阵，请查看 [兼容性](/zh-hans/docs/compatibility)。

## 引擎细节

- 导入归一化会剥离 `module` 和 `source`，让模块级引用更容易比较。
- Terraform 的语言规则能够识别 `var`、`local`、`module`、`data` 和资源引用以提取关系，但当前图谱策略不会将这些引用持久化到 Maguyva 的代码图谱中。
- Terraform 特有的控制流，如 `count`、`for_each` 和动态块，会被当作一等结构处理，而非纯文本。

## 常用 MCP 入口工具

- `get_task_context`: 当你需要快速获得一个整合相关信息的答案时，用它处理诸如“追踪 VPC 模块输出如何流入 ECS 服务”这类提示。
- `text_pattern_search`: 在扩大分析范围之前，对资源地址、模块名称或变量键使用精确文本搜索。
