基于自动化服务台实现云资源架构的自动复制和迁移

更新时间:

方案概述

随着企业上云的越来越深入,云上的产品种类和资源数量也在持续的增加,资源相互之间关系的复杂度也在成倍的提高,进而导致企业的架构变得越来越复杂。在多账号、多Region的部署架构下,如何实现对现有架构下云资源的快速、准确、完整的梳理,并完成自动化地复制和迁移,是一些企业面临的痛点问题。

本方案借助自动化的工具和平台提供一个自动化的解决方案,帮助企业客户在跨账号、跨Region以及跨可用区的场景中,实现存量云资源及其架构的快速复制和迁移。

方案优势

自动导出

对云上资源的梳理,通常的做法是通过手动或者调用OpenAPI来获取所有的云资源。手动梳理的方式,当云资源种类和数量非常多的时候,将会遇到成本非常高,准确性无法保证;调用OpenAPI的方式,可以解决手动梳理方式中存在的问题,可以以自动化的方式完成所有云资源的获取,但是因为缺少完整的资源模型,资源之间的关联或者依赖关系无法自动获取。

本方案就是以阿里云统一的资源模型为基础,提供了一个可以自动导出云资源以及资源关系的工具,并且支持Region、可用区、标签、资源组、资源ID、资源名称等多种过滤方式,满足企业客户按需导出的需求。

自动创建

基于自动导出方案,云上的资源和资源关系可以直接导出为 Terraform 编排模板以及对应的状态文件 State,同时在导出的过程中可以支持客户指定将资源属性导出为一个可以修改的参数变量。当客户在复制或者迁移过程中,借助自动资源编排工具 Terraform 操作导出后的资源编排模板即可实现对云上资源的自动化创建以及资源关系的自动绑定。

客户场景

随着业务的不断演进和发展,当企业需要做架构的跨账号、Region、或者可用区搬迁和复制时,或者因重构需要对现有架构中的部分云资源进行批量下架和替换时,首先需要做的是按需对现有架构中的所有或者云资源以及资源间的依赖和关联关系进行完整的梳理,然后完成对梳理出来的云资源的再次创建以及相关关系的再次配置。在此过程中,主要的难点有两个:

  1. 如何将架构中的部分或者全部云资源及资源关系完整的自动化的梳理出来

    资源梳理的难点在于:1)资源的种类和数量比较多;2)每个资源的属性配置复杂;3)资源与资源之间的关系错综复杂。比如一个负载均衡服务器 Load Balancer,其自身的属性可达20+,创建时需要依赖与VPC,VSwitch等资源,对外提供公网能力时需要跟 EIP 进行绑定,内部提供服务时需要创建 Listener,ACL,Server Group等多个子资源,对请求进行分发时还需要与多个ECS Instance进行绑定。如此复杂的资源及相关配置,如果没有一个自动化的工具,那么整个资源梳理的成本将是非常高的,而且无法保证完整性。

  2. 如何对梳理出来的资源以及相关的资源关系实现自动化的创建,并保持和原有资源相同的配置

    资源梳理完成之后,创建过程的难点在于如何创建出来规格和配置相同的云资源,并将这些云资源依赖的关系一并配置好。比如,一个安全组里面有上千条安全组规则,每条规则有10+属性,如果无法做到自动化,那么这些安全组规则的创建成本将是巨大的。

本文将重点针对如上的难点提供一个自动化的解决方案,解决在跨账号、跨Region以及跨可用区的场景中云资源及其架构的快速复制和迁移的问题。

跨账号复制

场景描述

每个企业随着业务的不断扩展,对云上资源的需求也在不断的增加,云资源的管理复杂度也在不断的增加,为了防止不同业务团队使用云资源时的相互冲突,保证云资源生命周期的完整性和安全性,多账号的业务架构变得越来越普遍。当新增一个云账号之后,如何将现有账号上的部分架构和资源配置复制到新账号上,实现业务架构在新账号上的快速搭建,是一些企业目前遇到的一个痛点问题。

适用客户

  • 有多账号管理云资源需求的客户

  • 需要在多个账号上复用相同业务架构的客户

Region/可用区迁移

场景描述

为了追求稳定、高效的用云体验,在业务架构设计阶段,除了要组建稳定、低延迟的互通网络外,计算、存储、数据库等的就近部署、多Region、多可用区的部署方式越来越成为大多数企业客户要考虑的场景。为了满足就近部署和多 Region 部署的原则,如何自动化的将现有架构从 Region A 迁移 Region B 上,或者在 Region B 上快速复制出来,一些企业正在尝试寻找高效的解决方案。

适用客户

  • 有多 Region 部署需求的客户

  • 有跨 Region 或者跨可用区迁移的客户

多环境克隆

场景描述

每个企业通常都会有两个业务部署环境:测试环境和生产环境,有些企业甚至更多。测试环境是为了更好的保障待上线的功能的可用性,因此企业客户期望不同环境所依赖的业务架构是一致的,甚至在遇到一些特殊场景,比如全链路压力测试,期望可以完整的克隆一份线上的环境,并且在测试完成之后可以做到自动的销毁。如何实现不同环境的快速克隆和回收,是很多企业考虑的场景。

适用客户

  • 具备多个部署环境的企业客户

  • 对克隆线上环境有需求的客户

方案架构

架构图

本方案提供了一套完整的基于 Terraform 的资源自动化管理的解决方案, 支持对云上资源架构的按需导出、资源属性灵活配置以及资源编排,帮助企业客户在面对多账号、多Region以及多环境场景时,自动化的实现云资源的批量复制和迁移,最大化的降低客户操作成本,提升云资源管理效率。

架构说明

  • 企业客户只需要按需输入需要导出的资源的过滤条件,即可实现对符合过滤条件的所有云资源的自动化导出

  • 基于导出后的资源模板,只需要设置部分参数,即可实现对存量资源的自动复制和迁移

产品费用及名词

产品费用

产品名称

产品说明

产品费用

自动化服务台

服务是一款依托阿里云上统一的资源模型和资源供给模型构建的资源管理平台,基于 IaC 和流程,以自动化的手段实现阿里云资源生命周期的管理。产品本身使用免费,如在使用过程中存在生产和管理云产品产生的费用,则参考产品各云产品定价。

免费。

名词解释

概念

说明

资源

云服务呈现给用户与之交互的对象实体的一种抽象,例如:OSS存储空间或ECS实例等。

资源编排

开发者和管理员通过编写模板定义所需管理的阿里云资源(例如:ECS实例、RDS数据库实例)、资源间的依赖和关联关系等,并借助资源编排服务(如ROS)或者工具(如 Terraform)来实现对模板中定义的所有资源及资源关系的创建和配置,进而实现自动化部署及运维。

Terraform

Hashicorp公司开发的一款开源的资源编排工具,也是目前最主流的资源编排工具,支持包含阿里云在内的200+ Provider。

资源导出

根据客户提供的过滤条件,将符合条件的云资源、资源关系以及资源属性自动化的转换为 Terraform 编排模板的能力。

安全性

自动化服务台系统权限

自动化服务台为每个客户提供了两个可以操作自动化服务台功能的系统权限。权限点:

权限策略名称

权限策略说明

AliyunIaCServiceFullAccess

管理IaC服务(IaCService)的权限

AliyunIaCServiceReadOnlyAccess

只读访问IaC服务(IaCService)的权限

云资源管理权限

自动化服务台自身不具备管理所有阿里云资源的权限,登录自动化服务台或者调用自动化服务台OpenAPI的用户自身具备哪些云产品的权限,在使用自动化服务台时只能管理相应的云产品下的资源。比如,如需要导出和创建ECS资源,那么用户自己必须具备 ECS 云资源的管理权限。

自动化服务台服务角色权限

资源导出和资源编排的运行通常都是一个异步任务,为了保证客户在离线情况下(登出控制台或者调用自动化服务台的OpenAPI),正在执行的任务不受影响,在创建资源导出和编排任务的时候,需要指定一个服务角色,并为该角色添加AssumeRole的访问权限。

{
    "Version": "1",
    "Statement": [
        {
            "Action": "ram:PassRole",
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "acs:Service": "iac.aliyuncs.com"
                }
            }
        }
    ]
}

有关服务角色的创建步骤,详见服务关联角色

注意事项

自动化服务台资源限额限制如下表。资源配额可以通过配额中心进行申请。

资源名称

资源配额

配额级别

模板(Module)

50

单账号

资源编排任务(Task)

100

单账号

资源导出任务(ExportTask)

100

单账号

实施步骤

实施准备

接下来我们逐步描述该方案的实施过程,为了成功实施该方案,以下条件必须首先满足:

  • 要有一个阿里云账号

  • 对于Terraform有基本了解

  • 具备自动化服务台的使用权限

实施时长

在实施准备工作完成的情况下,本方案实施预计时长:20分钟。

操作步骤

创建服务关联角色

本节主要介绍如何为自动化服务台创建一个服务角色,以满足客户在离线情况下(登出控制台或者调用自动化服务台的OpenAPI)执行资源导出和编排任务的场景。

创建 RAM 角色

首先,登录到 RAM 控制台,点击创建RAM角色按钮进入 Role 创建页面,并选择类型为阿里云服务:

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

点击“完成”按钮完成 RAM 角色的创建。

为 RAM 角色授权

Role 创建完成后,为其添加系统策略 AliyunSTSAssumeRoleAccess 即可完成授权。

注意:如果是以子账号的方式登录的,那么首先需要主账号为当前登录的子账号添加以下PassRole权限。

{
  "Version": "1",
  "Statement": [
    {
      "Action": "ram:PassRole",
      "Resource": "*",
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "acs:Service": "iac.aliyuncs.com"
        }
      }
    }
  ]
}
修改 RAM 角色的信任策略

完成授权后,需要修改刚创建好的 RAM 角色的信任策略,将信任策略修改为如下内容:

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "iac.aliyuncs.com"
        ]
      }
    }
  ],
  "Version": "1"
}

至此,完成服务关联角色的全部创建和配置。

创建资源导出任务

本节主要介绍如何通过自动化服务台实现云资源的自动化导出。

登录自动化服务台,进入资源导出页面,点击“新建任务”按钮开始创建一个资源导出任务。

在导出过程中,除了设置基本的任务属性、资源类型以及资源所在的地域和可用区之外,需要特别关注两部分的内容:

  1. 设置导出时的过滤条件

    资源在导出的过程中,将根据设置的资源类型和所属区域查询到对应的云资源,并在查询过程中,可以通过设置过滤条件获取到符合期望的云资源

  2. 设置导出后的资源属性变量

    资源在导出之后,所有的资源属性都将以硬编码的方式设置在模板中。在导出之后,为了满足对资源的持续管理,比如部分属性的修改,可以通过设置属性变量来将硬编码的资源属性变为可设置的属性变量保存在资源模板中,当有修改需求的时候,传入新的变量值即可。

执行资源导出任务

完成任务的创建之后,点击“执行”按钮即可开始执行导出任务。任务执行完毕之后,进入任务详情页即可看到符合过滤掉条件的信息和编排模板了。

对于同一个资源导出任务,每执行一次,都将产生一个新的模板版本。

创建资源编排任务

完成资源的导出之后,使用导出后的资源模板即可创建资源编排任务,通过对资源编排任务的执行即可实现存量资源在新地域上的迁移。

创建执行模板

每个资源编排任务的执行需要依赖一个执行模板,因此在创建资源编排任务之前,首先需要使用导出任务的信息创建一个执行模板。

  1. 进入模板管理页面,点击“新建模板”按钮,选择“资源导出”进入下一步

  2. 输入模板名称和描述,选择资源导出任务的ID和导出的版本

  3. 点击“提交”按钮即可完成对执行模板的创建。

创建成功之后将进入模板管理页面。

创建执行版本

一个执行模板具备版本化管理的能力,在完成模板的创建之后,该模板的内容默认为“draft” 状态,在执行模板之前,需要根据模板内容创建一个执行版本,用于后续执行任务的创建。

在模板管理页面,点击“发布新版本”按钮,输入版本好即可创建一个新的执行版本。

创建完成之后,点击“版本管理”选项卡即可看见所有的版本信息。

创建参数集(可选)

资源成功导出之后,所有的资源属性值都是跟原架构中的资源是一致的,在复制或者迁移过程中,如果想要对部分资源属性值进行修改,可以通过将导出后的全部或者部分属性创建为参数集,并在执行资源编排的任务时与模板进行关联来实现。

一个参数集可以跟执行模板、执行版本以及资源编排任务进行关联。在执行编排任务时,关联到三者上的参数集将被合并为统一的变量文件来设置到模板文件中。在参数集合并的过程中参数合并的优先级为编排任务 > 执行版本 > 执行模板,即如果一个参数同时出现在编排任务和执行版本关联的参数集中,那么将以编排任务中参数值为准。

本文我们选择在执行版本上设置参数集。

  1. 点击“关联参数集”选项卡,进入参数集管理页面,

  2. 点击“新建参数集”按钮,输入参数集名称和描述

  3. 点击“自动导入”,选择刚刚创建的执行模板和执行版本即可:

  4. 点击“确定”按钮,可以对模板中的所有导入的属性变量进行管理,可以对自动导入后的变量进行修改或者移除,也可以在现有变量的基础上进行新增。

    本方案中,我们将地域Region从杭州改成北京。

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

创建编排任务

在模板管理页面,

  1. 点击“资源编排”选项卡,进入当前模板的资源编排任务管理页面

  2. 点击“新建任务”按钮即可弹出创建编排任务的页面

  3. 输入任务名称和描述,选择执行模式(为了演示方便,本方案中我们选择手动执行模式)

  4. 点击“提交按钮”即可完成创建。

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

执行资源编排任务

作业时资源编排任务执行的最小单位。编排任务创建完成之后,点击“发起新作业”按钮即可开始执行资源编排任务(如果在创建任务时选择了“自动触发”,那么在任务创建完成之后,将会自动发起新作业)。每个作业包括两部分:

  • 作业预览

    作业预览是对执行模板中所定义的资源的预览,客户可以根据预览的结果来判断和确认是否需要继续执行,如果不符合预期,点击“放弃执行”即可终止当前作业,否则点击“确认并执行”按钮即可开始实际的执行。

    注意:如果在创建编排任务的时候,执行模式选择的是“自动执行”,那么预览完成之后没有人工确认的过程,将直接进入作业执行阶段。

  • 作业执行

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

至此,整个云资源的复制和迁移工作的全部完成。