企业想要将现有云资源架构迁移到其他Region或者可用区时,或者想要将现有云资源架构在不同账号上进行复制时,或者想要注销云账号时,无法自动导出指定Region下的所有云资源及其配置;进而无法实现对存量云资源的自动化创建、迁移以及删除等管理动作。本方案基于资源编排工具 Terraform 以及自动化服务台的能力,帮助企业客户实现对现有存量云资源及其所属架构的自动导出,并以自动化的手段实现在不同Region或者账号间的复制和迁移,降低客户管理存量云资源及架构的成本和复杂度。

随着企业上云的越来越深入,云上的产品种类和资源数量也在持续的增加,资源相互之间关系的复杂度也在成倍的提高,进而导致企业的架构变得越来越复杂。在多账号、多Region的部署架构下,如何实现对现有架构下云资源的快速、准确、完整的梳理,并完成自动化地复制和迁移,是一些企业面临的痛点问题。
本方案借助自动化的工具和平台提供一个自动化的解决方案,帮助企业客户在跨账号、跨Region以及跨可用区的场景中,实现存量云资源及其架构的快速复制和迁移。
对云上资源的梳理,通常的做法是通过手动或者调用OpenAPI来获取所有的云资源。手动梳理的方式,当云资源种类和数量非常多的时候,将会遇到成本非常高,准确性无法保证;调用OpenAPI的方式,可以解决手动梳理方式中存在的问题,可以以自动化的方式完成所有云资源的获取,但是因为缺少完整的资源模型,资源之间的关联或者依赖关系无法自动获取。
本方案就是以阿里云统一的资源模型为基础,提供了一个可以自动导出云资源以及资源关系的工具,并且支持Region、可用区、标签、资源组、资源ID、资源名称等多种过滤方式,满足企业客户按需导出的需求。
基于自动导出方案,云上的资源和资源关系可以直接导出为 Terraform 编排模板以及对应的状态文件 State,同时在导出的过程中可以支持客户指定将资源属性导出为一个可以修改的参数变量。当客户在复制或者迁移过程中,借助自动资源编排工具 Terraform 操作导出后的资源编排模板即可实现对云上资源的自动化创建以及资源关系的自动绑定。
随着业务的不断演进和发展,当企业需要做架构的跨账号、Region、或者可用区搬迁和复制时,或者因重构需要对现有架构中的部分云资源进行批量下架和替换时,首先需要做的是按需对现有架构中的所有或者云资源以及资源间的依赖和关联关系进行完整的梳理,然后完成对梳理出来的云资源的再次创建以及相关关系的再次配置。在此过程中,主要的难点有两个:
资源梳理的难点在于:1)资源的种类和数量比较多;2)每个资源的属性配置复杂;3)资源与资源之间的关系错综复杂。比如一个负载均衡服务器 Load Balancer,其自身的属性可达20+,创建时需要依赖与VPC,VSwitch等资源,对外提供公网能力时需要跟 EIP 进行绑定,内部提供服务时需要创建 Listener,ACL,Server Group等多个子资源,对请求进行分发时还需要与多个ECS Instance进行绑定。如此复杂的资源及相关配置,如果没有一个自动化的工具,那么整个资源梳理的成本将是非常高的,而且无法保证完整性。
如何对梳理出来的资源以及相关的资源关系实现自动化的创建,并保持和原有资源相同的配置
本文将重点针对如上的难点提供一个自动化的解决方案,解决在跨账号、跨Region以及跨可用区的场景中云资源及其架构的快速复制和迁移的问题。
每个企业随着业务的不断扩展,对云上资源的需求也在不断的增加,云资源的管理复杂度也在不断的增加,为了防止不同业务团队使用云资源时的相互冲突,保证云资源生命周期的完整性和安全性,多账号的业务架构变得越来越普遍。当新增一个云账号之后,如何将现有账号上的部分架构和资源配置复制到新账号上,实现业务架构在新账号上的快速搭建,是一些企业目前遇到的一个痛点问题。
为了追求稳定、高效的用云体验,在业务架构设计阶段,除了买球官方网站要组建稳定、低延迟的互通网络外,计算、存储、数据库等的就近部署、多Region、多可用区的部署方式越来越成为大多数企业客户要考虑的场景。为了满足就近部署和多 Region 部署的原则,如何自动化的将现有架构从 Region A 迁移 Region B 上,或者在 Region B 上快速复制出来,一些企业正在尝试寻找高效的解决方案。
每个企业通常都会有两个业务部署环境:测试环境和生产环境,有些企业甚至更多。测试环境是为了更好的保障待上线的功能的可用性,因此企业客户期望不同环境所依赖的业务架构是一致的,甚至在遇到一些特殊场景,比如全链路压力测试,期望可以完整的克隆一份线上的环境,并且在测试完成之后可以做到自动的销毁。如何实现不同环境的快速克隆和回收,是很多企业考虑的场景。
某游戏企业的创新项目,在移动端游戏加速用户规模处于业界前列,项目于2018年立项,因业务特性,该项目长期部署在阿里云深圳Region。为了追求优质的游戏体验,除了组建了一个稳定低延迟的互通网络外,不同形态的计算服务需要就近部署。
客户希望把该创新项目所依赖的业务架构整体从深圳Region搬迁到北京Region,其中涉及所有依赖的云资源及其相关配置的梳理,以及在新Region上的重新搭建。

基于自动化服务台提供的自动导出能力,将客户在深圳Region的所有云资源以及资源关系自动化的导出为 Terraform 编排模板和对应的资源状态文件,然后通过参数变量将原有模板中的地域配置从深圳(cn-shenzhen)切换到北京(cn-beijing),如果还涉及到其他资源属性的修改,也可以通过参数变量来进行修改和替换。最后,基于利用资源编排工具 Terraform 实现导出后的资源在北京地域的自动化创建,最终完成资源架构的跨区域自动迁移。
帮助客户自动化的梳理了共160+个云资源及其资源关系,并在新 Region 上完成了自动创建,相比控制台人工梳理和创建,至少节约成本 5 人日。
本方案提供了一套完整的基于 Terraform 的资源自动化管理的解决方案, 支持对云上资源架构的按需导出、资源属性灵活配置以及资源编排,帮助企业客户在面对多账号、多Region以及多环境场景时,自动化的实现云资源的批量复制和迁移,最大化的降低客户操作成本,提升云资源管理效率。

该服务是一款依托阿里云上统一的资源模型和资源供给模型构建的资源管理平台,基于 IaC 和流程,以自动化的手段实现阿里云资源生命周期的管理。产品本身使用免费,如在使用过程中存在生产和管理云产品产生的费用,则参考产品各云产品定价。
云服务呈现给用户与之交互的对象实体的一种抽象,例如:OSS存储空间或ECS实例等。
开发者和管理员通过编写模板定义所需管理的阿里云资源(例如:ECS实例、RDS数据库实例)、资源间的依赖和关联关系等,并借助资源编排服务(如ROS)或者工具(如 Terraform)来实现对模板中定义的所有资源及资源关系的创建和配置,进而实现自动化部署及运维。
由Hashicorp公司开发的一款开源的资源编排工具,也是目前最主流的资源编排工具,支持包含阿里云在内的200+ Provider。
根据客户提供的过滤条件,将符合条件的云资源、资源关系以及资源属性自动化的转换为 Terraform 编排模板的能力。
自动化服务台为每个客户提供了两个可以操作自动化服务台功能的系统权限。权限点:
自动化服务台自身不具备管理所有阿里云资源的权限,登录自动化服务台或者调用自动化服务台OpenAPI的用户自身具备哪些云产品的权限,在使用自动化服务台时只能管理相应的云产品下的资源。比如,如需要导出和创建ECS资源,那么用户自己必须具备 ECS 云资源的管理权限。
资源导出和资源编排的运行通常都是一个异步任务,为了保证客户在离线情况下(登出控制台或者调用自动化服务台的OpenAPI),正在执行的任务不受影响,在创建资源导出和编排任务的时候,需要指定一个服务角色,并为该角色添加AssumeRole的访问权限。
接下来我们逐步描述该方案的实施过程,为了成功实施该方案,以下条件必须首先满足:
本节主要介绍如何为自动化服务台创建一个服务角色,以满足客户在离线情况下(登出控制台或者调用自动化服务台的OpenAPI)执行资源导出和编排任务的场景。
首先,登陆到RAM 控制台,点击创建RAM角色按钮进入 Role 创建页面,并选择类型为阿里云服务:

点击下一步,选择普通服务角色,输入角色名称和备注,选择受信服务选择 “资源编排服务”:

注意⚠️:如果是以子账号的方式登陆的,那么首先需要主账号为当前登陆的子账号添加以下PassRole权限。
完成授权后,需要修改刚创建好的 RAM 角色的信任策略,将信任策略修改为如下内容:
登陆自动化服务台,进入资源导出页面,点击“新建任务”按钮开始创建一个资源导出任务。

在导出过程中,除了设置基本的任务属性、资源类型以及资源所在的地域和可用区之外,需要特别关注两部分的内容:
完成任务的创建之后,点击“执行”按钮即可开始执行导出任务。任务执行完毕之后,进入任务详情页即可看到符合过滤掉条件的信息和编排模板了。

完成资源的导出之后,使用导出后的资源模板即可创建资源编排任务,通过对资源编排任务的执行即可实现存量资源在新地域上的迁移。
每个资源资源编排任务的执行需要依赖一个执行模板,因此在创建资源编排任务之前,首先需要使用导出任务的信息创建一个执行模板。


一个执行模板具备版本化管理的能力,在完成模板的创建之后,该模板的内容默认为“draft” 状态,在执行模板之前,需要根据模板内容创建一个执行版本,用于后续执行任务的创建。
在模板管理页面,点击“发布新版本”按钮,输入版本好即可创建一个新的执行版本。


资源成功导出之后,所有的资源属性值都是跟原架构中的资源是一致的,在复制或者迁移过程中,如果想要对部分资源属性值进行修改,可以通过将导出后的全部或者部分属性创建为参数集,并在执行资源编排的任务时与模板进行关联来实现。
一个参数集可以跟执行模板、执行版本以及资源编排任务进行关联。在执行编排任务时,关联到三者上的参数集将被合并为统一的变量文件来设置到模板文件中。在参数集合并的过程中参数合并的优先级为编排任务 执行版本 执行模板,即如果一个参数同时出现在编排任务和执行版本关联的参数集中,那么将以编排任务中参数值为准。


确认参数之后,点击“提交并新增关联”按钮,即可完成参数集的创建,并自动完成与模板版本的关联。

为了提升任务执行的自动化程度,在编排任务的高级选项中,提供了任务的触发模式、删除保护策略以及Terraform版本等选项。

作业时资源编排任务执行的最小单位。编排任务创建完成之后,点击“发起新作业”按钮即可开始执行资源编排任务(如果在创建任务时选择了“自动触发”,那么在任务创建完成之后,将会自动发起新作业)。每个作业包括两部分:
作业预览是对执行模板中所定义的资源的预览,客户可以根据预览的结果来判断和确认是否需要继续执行,如果不符合预期,点击“放弃执行”即可终止当前作业,否则点击“确认并执行”按钮即可开始实际的执行。

完成作业预览之后,基于预览的结果将开始执行资源编排动作来完成资源的创建。