背景
资源编排服务(Resource Orchestration Service, 简称 ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循 ROS 定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如 ECS 实例、RDS 数据库实例)、资源间的依赖关系等。ROS 的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。
随着基础设施的发展,账号对跨多个账号和地域创建、更新或删除堆栈有了越来越强烈的诉求。在资源编排服务推出资源栈组功能之前,账号只能通过手动或代码调用的方式依次在不同的账号和地域下创建资源栈。而使用资源栈组功能,账号则可以通过使用管理员账号定义和管理 ROS 模板,并将模板用作在指定地域的所选目标账号中预置堆栈的基础。从而对多个账号和地域下的堆栈进行统一的管理,简化工作流程和维护成本。
功能介绍
资源栈组
通过资源栈组,可使用一个 ROS 模板在多个阿里云账号中跨地域创建资源栈。每个资源栈中包含的所有资源由资源栈组的 ROS 模板定义。在创建资源栈组时,可指定要使用的模板以及模板所需的任何参数和功能。
在定义资源栈组后,可以在指定的目标账号和地域中创建、更新或删除资源栈。在这个操作过程中,还可以指定操作首选项。比如,可以指定对资源栈并行执行操作的账号的数量、执行操作的地域的顺序和容错能力 (一旦超出它,资源栈操作就会停止) 。
资源栈组和地域相关,这也就意味着您在一个地域(如 cn-hangzhou
)中创建了资源栈组,只能在该地域进行查看或更改。
资源栈实例
资源栈实例是对特定地域内的目标账号中的资源栈的引用。一个资源栈实例对应一个资源栈,但也可能出现资源栈实例存在而所对应的资源栈不存在的情况。例如,由于某些原因无法创建资源栈,则资源栈实例将显示资源栈创建失败的原因。一个资源栈实例只属于一个资源栈组。
下图显示资源栈组、资源栈操作和资源栈之间的逻辑关系。当更新资源栈组时,将在所有账号和地域中更新所有关联的资源栈实例。
账号
和资源栈组相关的账号有两类:
- 管理员账号 —— 用来创建资源栈组的阿里云账号。登录管理员账号后,可创建资源栈组,以及资源栈组中的资源栈实例。每个资源栈实例所对应的资源栈均是创建在目标账号的特定地域中。
- 目标账号 —— 用来创建、更新或删除资源栈组中的一个或多个资源栈的账号。必须先在管理员账号与目标账号之间设置信任关系,然后才能使用资源栈组在目标账号中创建资源栈。管理员账号同时也可以是目标账号。
资源栈组、资源栈实例、资源栈、地域和账号的关系图
- 资源栈组是区分地域的,所以在杭州地域创建的资源栈组,无法在北京地域看到。
- 资源栈组是由管理员账号(比如账号 A)创建的,可以在资源栈组中创建多个资源栈实例,创建资源栈实例时可以指定账号和地域。如上图所示,账号 A 创建的资源栈组中,在杭州地域给账号 B、C 分别创建资源栈实例 1、2,在北京地域给账号 C 创建资源栈实例 3。这就是资源栈组的跨账号和跨地域特性。
-
资源栈实例是对资源栈的引用。
- 创建资源栈实例时会相应的创建出资源栈。
- 删除资源栈实例时可选择删除或保留它所指向的资源栈。
- 直接删除资源栈则不会删除资源栈实例。
资源栈组和资源栈实例操作
创建资源栈组
创建资源栈组时,指定要用于创建资源栈的 ROS 模板、资源栈的目标账号以及资源栈所需部署的目标账号和特定地域等内容,可确保将具有相同配置的相同资源栈资源的一致部署到多个指定地域内的多个指定目标账号。
更新资源栈组
更新资源栈组时,可更新模板、地域等内容,资源编排服务会将更改推送到资源栈组中的资源栈。若更新了资源栈组中的模板,会更新所有关联的资源栈。可以通过如下方式更新资源栈组:
- 更新资源栈组中的模板,比如新增参数、删除一个资源等。
- 替换资源栈中的模板。
- 跨现有或其他地域在现有或其他目标账号中添加资源栈,即在资源栈组中新增资源栈实例。
删除资源栈组
当资源栈组中的资源栈实例均被删除后,可删除资源栈组。
添加资源栈实例
在资源栈组中,可通过指定目标账号和地域来添加资源栈实例。
删除资源栈实例
删除资源栈实例时,将从指定的地域内的指定目标账号中删除资源栈及其所有关联资源。可以通过以下方法删除资源栈实例:
- 删除特定目标账号的资源栈实例及其对应资源栈,同时使其他目标账号中的其他资源栈保持运行。
- 删除特定地域的资源栈实例及其资源栈,同时使其他地域中的资源栈保持运行。
- 删除资源栈实例,但保留其所对应的资源栈,使该资源栈独立于资源栈组继续运行。
使用场景
多地域部署
管理员账号 A 可以在其使用的所有地域同时进行部署,如账号 A 可以同时部署北京,杭州,深圳等多个地域。这尤其适合 On ECS 的产品,因为 On ECS 的产品几乎都是需要部署所有地域。
多账号部署
有多个不同目标账号 A(同时也是管理员账号)、B、C(非 RAM 账号)。管理员账号 A 控制着目标账号 A、B、C 的部署。
多账号和多地域部署
跨账号跨地域,即上面两个场景的组合。关系图见“资源栈组、资源栈实例、资源栈、地域和账号的关系图”。
使用示例
假设我们要在两个账号的杭州、北京地域下创建 ECS 集群,那么通过资源栈组可以这么做:
- 满足先决条件(在第一次使用资源栈组前需要操作)
- 准备一个创建 ECS 集群的模板
- 创建资源栈组
先决条件(在第一次使用资源栈组前需要操作)
资源编排服务通过角色扮演对资源栈组中的资源栈实例所对应的资源栈进行部署。在使用资源栈组前,需要赋予资源编排服务必要的权限、以及准备好对应角色。
管理员账号创建 AliyunROSStackGroupAdministrationRole,并授权给 ROS 服务
- 登录管理员账号,并访问 RAM 角色管理,点击
新建RAM角色
按钮,在右侧弹出框中选择阿里云服务
:
- 点击
下一步
,输入角色名称AliyunROSStackGroupAdministrationRole
,选择授信服务为资源编排服务
,完成角色创建:
管理员账号为 AliyunROSStackGroupAdministrationRole 创建允许角色扮演策略
- 登录管理员账号,并访问 RAM 权限策略管理,点击
新建权限策略
按钮,在窗口中输入策略名称为AssumeRole-AliyunROSStackGroupExecutionRole
,选择配置模式为脚本配置
,在策略内容里输入如下策略(该策略的意思为允许AliyunROSStackGroupAdministrationRole
角色身份扮演为AliyunStackGroupExecutionRole
角色身份):
{
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "acs:ram::*:role/AliyunStackGroupExecutionRole"
}
],
"Version": "1"
}
- 访问 AliyunROSStackGroupAdministrationRole 详情,为其添加
AssumeRole-AliyunROSStackGroupExecutionRole
策略:
目标账号创建 AliyunROSStackGroupExecutionRole ,并授权给管理员账号
- 登录目标账号,并访问 RAM 角色管理,点击
新建RAM角色
按钮,在右侧弹出框中选择阿里云账号
:
- 点击
下一步
,输入角色名称AliyunROSStackGroupExecutionRole
,选择选择云账号为管理员账号的ID
,完成角色创建:
目标账号角色指定权限
- 为目标账号的
AliyunROSStackGroupExecutionRole
角色指定权限,资源栈组在该目标账号下创建资源栈时会使用该权限(比如AdministratorAccess
)
准备模板
我们需要创建一个 VPC、VSwitch、安全组和 ECS 实例,则有如下模板(如果对 ROS 模板语法不熟悉,请查看官方文档):
{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"InstanceType": {
"Type": "String",
"Default": "ecs.g6.large"
}
},
"Resources": {
"Vpc": {
"Type": "ALIYUN::ECS::VPC",
"Properties": {
"CidrBlock": "192.168.0.0/16"
}
},
"VSwitch": {
"Type": "ALIYUN::ECS::VSwitch",
"Properties": {
"CidrBlock": "192.168.0.0/24",
"VpcId": {
"Ref": "Vpc"
},
"ZoneId": {
"Fn::Select": [
"0",
{
"Fn::GetAZs": {
"Ref": "ALIYUN::Region"
}
}
]
}
}
},
"SecurityGroup": {
"Type": "ALIYUN::ECS::SecurityGroup",
"Properties": {
"VpcId": {
"Ref": "Vpc"
}
}
},
"InstanceGroup": {
"Type": "ALIYUN::ECS::InstanceGroup",
"Properties": {
"MaxAmount": 2,
"InstanceType": {
"Ref": "InstanceType"
},
"ImageId": "centos_7",
"VpcId": {
"Ref": "Vpc"
},
"VSwitchId": {
"Ref": "VSwitch"
},
"SecurityGroupId": {
"Ref": "SecurityGroup"
}
}
}
},
"Outputs": {
"InstanceIds": {
"Value": {
"Fn::GetAtt": ["InstanceGroup", "InstanceIds"]
}
}
}
}
创建资源栈组
- 登录
管理员账号
,访问 ROS 资源栈组界面,点击创建资源栈组
,在创建界面中输入模板:
- 点击
下一步
,输入资源栈组名称
,还可以指定资源栈组描述
和模板参数
:
- 选择并确认
管理员角色
和执行角色
,也就是我们在先决条件中创建的供资源栈组使用的默认角色:
- 输入
目标账号
(多个以英文,
分隔),选择目标地域
,选填部署选项
:
- 确认无误后点击
创建资源栈组
- 在资源栈组列表中找到所创建的资源栈组,点击以查看详情
- 可以看到在两个目标账号和两个目标地域下共计创建了 4 个资源栈实例以及资源栈,每个资源栈下都有 VPC、VSwitch、安全组和 ECS 实例:
总结
通过 ROS 的资源栈组功能,您可以轻松快速地进行跨账号以及跨地域。资源栈组将这些资源栈集中在一起进行管理,不仅是在创建过程中能做到快速部署,在后期的维护操作上也能够做到方便快捷的管理。比如,当您更新模板后,只需更新资源栈组,即可将该资源栈组内的所有资源栈均更新到最新状态。