用途
该技能为 Terraform Provider 的安全升级提供完整工作流,覆盖自动资源迁移、破坏性变更检测和状态管理。适用于以下场景:
- 升级 Provider 版本(尤其是大版本)
- 处理被移除或弃用的资源
- 在资源类型之间迁移(例如 azurerm_sql_* 迁移到 azurerm_mssql_*)
- 检测和解决破坏性变更
- 替换已弃用的 Provider 属性
- 在升级过程中管理 Terraform 状态
变更类型判断
技能首先通过 MCP 工具分析版本变更范围:使用 mcp_terraform_get_latest_provider_version 获取当前和最新版本。若为大版本变更(如 3.117.0 到 4.51.0),通常属于破坏性变更;次版本变更(如 3.117.0 到 3.118.0)通常非破坏性;补丁版本(如 3.117.0 到 3.117.1)非破坏性。随后通过 mcp_terraform_get_provider_capabilities 发现可用的指南名称,通过 mcp_terraform_search_providers 获取升级指南的 provider_doc_id,再用 mcp_terraform_get_provider_details 获取升级指南内容。
非破坏性变更特征:次版本或补丁版本更新、无移除的资源、无必需参数变更、向后兼容的弃用项带有可直接替换的方案、新增可选参数或问题修复。此时直接更新 versions.tf 中的版本约束并提交即可。
破坏性变更特征:大版本更新、被移除的资源需要代码迁移、必需参数变更(重命名、类型变化)、默认值变化影响行为、认证或 Provider 配置变更。此时需要应用全部代码修改并创建文档。
核心工作流
工作流分为若干步骤:
-
清点当前状态:使用 find 查找所有 .tf 文件,用 grep 搜索 required_providers 和版本约束,记录当前 Provider 版本、约束位置和受影响环境。
-
检查最新版本:使用 mcp_terraform_get_latest_provider_version 对比当前版本与最新版本,确定版本差距。
-
研究破坏性变更:发现可用指南、获取升级指南的 provider_doc_id、拉取升级指南内容,分析其中被移除的资源、被弃用的资源、破坏性参数变更、新的 Provider 功能、认证变更。
-
扫描代码库中的被移除资源:从升级指南中提取被移除的资源名称,构建完整列表,用 grep 正则搜索所有 .tf 文件中使用这些资源的位置。对每个服务区域单独扫描便于分类。同时对被移除的数据源和 Provider 块参数执行类似扫描。
-
验证参数变更:对每个被移除的资源,搜索旧资源文档和新资源文档,比较 schema(必需参数、重命名参数、类型变更、被移除参数、带默认值的新参数),检查默认值差异。
-
应用代码迁移:更新资源类型、添加 moved 块用于状态迁移、更新参数变更、更新依赖资源引用、替换已弃用的 Provider 属性、更新版本约束。
-
记录变更:仅为破坏性变更创建文档。在仓库根目录创建 TERRAFORM_UPGRADE_BREAKING_CHANGES.md(不在 .github/ 或子目录中),记录已完成的变更、受影响的文件、参数映射、状态迁移说明和参考链接。
使用方式要点
- 使用 moved 块处理资源类型变更,实现自动状态迁移
- 对旧资源和新资源都依据官方文档验证参数
- 检查默认值差异
- 更新引用了迁移资源的依赖资源
- 文档中包含资源文档链接
- 通过 CI/CD 管道进行验证,而非手动建议 terraform 命令
- 不要为次版本或补丁版本创建 TERRAFORM_UPGRADE_BREAKING_CHANGES.md
- 不要提供手动迁移步骤,代码应处理一切
- 不要假设参数保持不变,始终验证 schema
- 不要忘记依赖资源
- 不要移除 Provider 块,只更新已弃用的参数
限制
资料未提供该技能的具体安装命令、支持的 Provider 范围之外的平台限制或收费信息。技能依赖 MCP 工具(mcp_terraform_* 系列)来查询 Provider 信息。