用途:把现有 Azure 资源反向导出为 Terraform 配置(HCL)与 state,用于从已有 Azure 基础设施引导 IaC。适用于 Azure 专用流程,或 Terraform 1.14 原生 terraform query 之前的版本;若使用 Terraform >= 1.14 且需多云批量导入,应改用 terraform-search-import 技能。
主要能力:支持导出单个资源(aztfexport resource)、整个资源组(aztfexport resource-group)、以及匹配 Azure Resource Graph 查询的资源(aztfexport query)。
前置条件:安装 aztfexport(macOS 可用 brew install aztfexport,或见 GitHub releases);Azure CLI 已登录(az login)并选择正确订阅;在 macOS 上需检查架构匹配:file $(which aztfexport) 与 uname -m,若不一致需重装对应架构版本。
使用方式:先用 Azure CLI 发现资源 ID,例如 az resource list --query "[?name=='RESOURCE_NAME']" -o table;再验证二进制:file $(which aztfexport)、uname -m、aztfexport --version;然后运行导出,单资源示例:aztfexport resource --non-interactive --plain-ui -o ./terraform-export "/subscriptions/SUB_ID/resourceGroups/RG/providers/TYPE/NAME";资源组与查询命令类似,仅子命令不同。关键参数:--non-interactive 跳过交互,--plain-ui 禁用 TUI(无 /dev/tty 时必须与前者配对),-o 指定输出目录(须为空或不存在),--append 追加到已有目录,--overwrite 覆盖,--hcl-only 仅生成 HCL 不导入 state。
导出后检查 main.tf、provider.tf、terraform.tfstate 等文件,资源名默认为 res-0 风格,可重命名(需同时改 HCL 与 state);随后 cd 到输出目录执行 terraform init 与 terraform plan,无变更即表示导出成功,计算属性可能产生少量差异,可用 lifecycle { ignore_changes } 处理。
限制与常见问题:架构不匹配会导致静默崩溃或 exec format error;仅 --non-interactive 在无头环境会失败;输出目录非空会报错;--append 在无 state 的非空目录会失败;资源 ID 可能因类型或 API 问题难以找到;导出后 plan 可能出现差异。资料未提供收费、价格、平台支持范围等更多信息。