用途:aztfexport 用于把已存在的 Azure 资源反向生成为 Terraform 配置(HCL)与状态文件,适合 Azure 专用工作流,或使用早于 Terraform 1.14 原生 terraform query 的版本。
主要能力:
- aztfexport resource:导出单个 Azure 资源
- aztfexport resource-group:导出整个资源组
- aztfexport query:导出符合 Azure Resource Graph 查询的资源
必要用法:
- 先确定资源 ID,可用 az 命令查找,例如: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"
- 检查生成文件:main.tf、provider.tf、terraform.tfstate(有时含 import.tf)
- 验证:terraform init 后执行 terraform plan
常用参数:--non-interactive(跳过交互提示)、--plain-ui(关闭 TUI,必须与非交互配合)、-o 指定输出目录、--append 追加到已有目录、--overwrite 覆盖、--hcl-only 只生成代码不导入状态。
限制与注意事项:
- 架构不匹配(如 ARM Mac 上跑 x86 二进制)会导致崩溃或 exec format error
- 输出目录必须为空或不存在,否则报错
- 默认资源名为 res-0 风格,需自行在 HCL 与 state 中改名
- 名称含特殊字符的资源可能被静默跳过
- 导出的 terraform plan 可能出现计算属性差异
- RBAC 默认不导出,除非使用 --include-role-assignment
- 会固定特定 AzureRM 版本,目标栈版本不一致可能产生差异
- 若使用 Terraform >= 1.14 且需多云批量导入,应改用 terraform query 相关技能