存量资源导入

更新时间:
复制 MD 格式

逐一为存量云资源手工编写 Terraform 代码并维护状态文件,成本较高且容易出错。通过存量资源导入功能,您可以扫描指定地域中的已有云资源,自动生成 Terraform 代码和状态文件,将资源纳入版本管理,或在调整代码后用于其他环境部署。

功能概述

存量资源导入将已有云资源反向生成 Terraform 代码与状态文件,具备以下特性:

  • 适用场景

    • 将通过云产品控制台创建的 VPC、ECS、SLB 等资源纳入 Terraform 管理。

    • 基于生产环境资源结构生成 Terraform 代码初稿,经调整后用于测试等其他环境部署。

    • 定期留存关键资源的配置快照,辅助审计和变更追踪。

  • 控制台入口:侧边栏 任务 > 存量资源导入

  • 对云资源的影响:只读,导入过程仅调用查询类接口,不会创建、修改或删除被扫描的云资源。

前提条件

开始操作前,请确认满足以下条件:

  • 目标阿里云账号下已存在待导入的云资源(例如已创建的VPC、ECS、SLB等)。

  • 当前登录身份具备管理存量资源导入任务的 IaCService 权限。如使用 RAM 用户操作,需由阿里云账号授予 AliyunIaCServiceFullAccess 系统策略,或按需创建自定义策略授予 iacservice:*ResourceExportTask* 相关操作权限。

  • 当前登录身份具备查询所选云资源的权限。

将已有云资源导入为Terraform代码

完整流程分为三步:

  1. 创建导入任务并配置资源扫描范围。

  2. 执行任务,生成 Terraform 代码和状态文件。

  3. 审查导入结果,并基于成功的导入版本创建模板继续维护。

步骤一:创建导入任务

  1. 登录自动化服务台控制台。

  2. 在侧边栏选择 任务 > 存量资源导入,进入存量资源导入列表页。

  3. 单击 新建任务,填写以下必填项。

  • 任务名称:长度2~129个字符,支持字母、数字、中文及- _ .,首尾字符不能是特殊字符。建议按“环境-资源-地域”格式命名,例如 prod-vpc-hangzhou,方便后续在列表中识别。同一阿里云账号下的任务名称不能重复。

  • Terraform Provider版本:默认取系统最新 alicloud Provider 版本。如果后续需要将生成的代码合入已有 Terraform 项目,建议选择与目标项目一致的 Provider 版本,避免属性或资源定义不兼容。

  • 资源类型:选择需要导入的一种或多种资源类型,例如选择 alicloud_vpc 资源类型。也可单击 产品筛选 按钮按产品维度选择(例如选择 VPC 产品,系统自动展开为该产品已支持的所有资源类型)。

  • 地域:每个任务只能选一个地域。不支持跨地域导入。多地域资源需要按地域创建多个任务。

可以通过以下选项缩小扫描范围:

  • 任务描述:简要描述导入任务的用途,便于团队协作时识别。

  • 可用区:每个任务最多选1个可用区。

  • 资源组ID:按资源组缩小范围,可选多个资源组。

  • 资源属性过滤条件:按资源属性的等值匹配方式过滤,例如仅导入名称为demo-vpc的资源。

  • 资源属性变量:指定需要在生成代码中提取为 variable 的属性,便于在其他环境中注入不同的值。

单击 高级选项 可配置以下附加参数:

  • 触发模式:默认为手动触发。选择 自动触发 后,以下情况会自动执行一次任务:

    • 创建任务。

    • 修改资源类型、地域、可用区、资源组 ID 或资源属性过滤条件。

    • 将触发模式从其他模式切换为自动触发。

  • Terraform版本:指定执行导入任务时使用的 Terraform 引擎版本。该版本独立于 Terraform Provider 版本。

  • 导入路径:可以将生成结果写入指定的 OSS 位置。选择 OSS 后,需要分别配置:

    • Terraform 代码 ZIP 包的 OSS 路径,文件名以 .zip 结尾。

    • Terraform 状态文件的 OSS 路径,文件名以 .tfstate 结尾。

    请确保当前登录身份对目标 OSS 路径具备写入权限。

4. 单击 提交 后,任务出现在列表中。

步骤二:执行导入

如果任务使用手动触发模式,请在任务列表中找到目标任务,然后单击 执行

任务执行过程中,系统会扫描指定地域和资源范围,并生成 Terraform 代码和状态文件。执行耗时取决于所选资源类型和实际资源数量。

最近一次导入版本可能显示以下状态:

控制台状态

API 值

说明

执行中

Pending

任务已创建,等待开始执行

执行中

Running

正在扫描资源或生成文件

成功

Success

Terraform 代码和状态文件生成成功

失败

Errored

执行失败,可在任务详情中查看原因

被取消

Canceled

已提交取消请求并将当前版本标记为取消

任务每执行一次都会创建一个新的导入版本,版本号从 v1 开始依次递增。

执行过程中可以提交取消请求。取消后,当前版本显示为“被取消”。

任务执行期间不能再次触发、修改或删除。请等待当前执行结束或取消状态生效后再进行操作。

步骤三:使用导入结果

任务执行成功后,进入任务详情页并选择相应的导入版本。

查看和下载结果

可以通过以下方式使用生成结果:

  • 模板详情:查看生成的 Terraform 代码,并通过左侧文件树切换文件。

  • 状态文件:查看生成的 terraform.tfstate 文件。

  • 下载代码:在模板详情页签中单击 下载,下载 Terraform 代码 ZIP 包。

  • 下载状态文件:在状态文件页签中单击 下载,下载 terraform.tfstate

  • 查看日志:如果执行失败,可以在详情页查看或下载执行日志。

如果创建任务时配置了 OSS 导出路径,代码 ZIP 包和状态文件会分别写入指定的 OSS 路径。

审查导入结果

将导入结果用于实际 Terraform 管理前,建议完成以下检查:

  1. 检查生成代码中的资源类型、地域和资源标识是否符合预期。

  2. 检查资源之间的引用和依赖关系。

  3. 检查是否存在需要删除或改写的环境相关属性。

  4. 检查是否包含敏感信息。

  5. 在目标环境中执行 terraform plan,确认计划结果符合预期后再执行 terraform apply

导入结果是指定时间点的资源配置快照,不等同于可直接执行的回滚备份。

创建模板继续维护

如果需要在自动化服务台中继续维护导入结果:

  1. 进入 模板 页面。

  2. 单击 创建模板

  3. 选择 资源导出 作为模板来源。

  4. 选择对应的资源导出任务。

  5. 选择状态为成功的导入版本。

  6. 完成模板创建,并根据实际需求修改和发布模板版本。

不要直接使用生产环境的状态文件管理测试环境资源。跨环境部署时,应调整地域、资源名称、网络配置、资源标识和变量值,并通过 terraform plan 确认变更范围。

使用限制

存量资源导入功能存在以下限制:

  • 任务数量:默认最多创建 100 个任务/阿里云账号。实际配额以控制台显示为准。

  • 地域数量:每个任务只能选择一个地域。多地域场景需要拆分为多个任务。

  • 资源类型数量:每个任务最多选择 100 种资源类型。

  • 可用区数量:每个任务最多选择一个可用区。

  • 资源支持范围:仅支持当前所选 Provider 版本中已经接入存量资源导入能力的资源类型。

  • 并发操作:任务执行期间不能再次执行、修改或删除该任务。

  • 结果完整性:部分只读属性、敏感属性或无法通过 Provider 表达的属性可能不会出现在生成代码中。使用前必须完成代码审查。

常见问题

导入任务失败提示“资源类型不在支持列表”

指定的资源类型尚未接入存量资源导入能力,或者当前 Provider 版本不支持该资源类型。

处理建议:

  • 使用 产品筛选 选择系统当前支持的资源类型。

  • 尝试选择其他兼容的 Provider 版本。

  • 对暂不支持的资源手工编写 Terraform 代码,并通过模板继续维护。

提示“同名重复”无法提交

同一阿里云账号下的任务名称不能重复。请修改任务名称,例如增加环境、地域或序号后缀,

例如 prod-vpc-hangzhou-v2。

如何导入多个地域的资源

每个任务只能选择一个地域。多地域场景需要按照地域拆分为多个任务。

如果通过 OpenAPI 批量创建任务,请为每个任务配置唯一名称,并分别指定地域。

能否删除失败或被取消的导入版本

不能。只能删除 成功 状态的版本。失败、取消、进行中的版本调用删除会被拒绝,避免误删执行历史。如确不再需要,可保留以便日后排查。