通过ROS的资源栈组,您可以在多个阿里云账号下的多地域创建相同配置的ECS实例。
方案概述
本方案介绍如何使用ROS资源栈组(StackGroup)在多个阿里云账号的多个地域同时创建相同配置的ECS实例及其依赖的网络资源(VPC、交换机、安全组)。适用于集团企业多账号统一部署、全球化业务多地域扩展、多环境(开发/测试/生产)标准化基础设施等场景。
前提条件
根据选择的权限模式,需要完成不同的准备工作:
服务管理权限模式(推荐多账号场景):
阿里云账号:拥有阿里云账号,且已开通ROS和ECS产品。
资源目录:已创建资源目录(Resource Directory),目标账号已加入资源目录。
委派管理员账号:已设置ROS的委派管理员账号。详情请参见设置委派管理员账号。
自助管理权限模式:
阿里云账号:拥有阿里云账号,且已开通ROS和ECS产品。
管理员账号和目标账号:已创建管理员账号和多个目标账号。
RAM角色和信任关系:在管理员账号和每个目标账号中手动创建RAM角色,建立双向信任关系。详情请参见授予自助管理权限。
操作教程
步骤一:准备ROS模板
以下模板通过DATASOURCE自动查询推荐的实例规格,在目标地域创建完整的ECS环境(VPC + vSwitch + 安全组 + ECS 实例):
ROSTemplateFormatVersion: '2015-09-01'
Description:
zh-cn: 自动选择实例规格,创建一台ECS实例及网络资源
en: Creates one ECS instance with an auto-selected instance type
Resources:
# 数据源:查询当前地域推荐的实例规格(2核8G + ESSD云盘)
DS-InstanceTypes:
Type: DATASOURCE::ECS::RecommendInstanceTypes
Properties:
Cores: 2
Memory: 8
SystemDiskCategory: cloud_essd
# 创建VPC
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
CidrBlock: 192.168.0.0/16
# 创建交换机(可用区由DATASOURCE自动确定)
VSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
VpcId:
Ref: Vpc
CidrBlock: 192.168.0.0/24
ZoneId:
Fn::Jq:
- First
- .[].ZoneId
- Fn::GetAtt:
- DS-InstanceTypes
- InstanceTypes
# 创建安全组
SecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
VpcId:
Ref: Vpc
# 创建ECS实例(实例规格由DATASOURCE自动确定)
Instance:
Type: ALIYUN::ECS::Instance
Properties:
IoOptimized: optimized
VpcId:
Ref: Vpc
SecurityGroupId:
Ref: SecurityGroup
VSwitchId:
Ref: VSwitch
ImageId: centos
InstanceType:
Fn::Jq:
- First
- .[].InstanceType
- Fn::GetAtt:
- DS-InstanceTypes
- InstanceTypes
SystemDiskCategory: cloud_essd
Outputs:
VpcId:
Label:
zh-cn: VPC实例ID
Value:
Fn::GetAtt:
- Vpc
- VpcId
InstanceId:
Label:
zh-cn: ECS实例ID
Value:
Fn::GetAtt:
- Instance
- InstanceId关键语法解析
DATASOURCE数据源资源
DS-InstanceTypes: Type: DATASOURCE::ECS::RecommendInstanceTypes # DATASOURCE:: 前缀表示数据源 Properties: Cores: 2 # vCPU核数 Memory: 8 # 内存(GB) SystemDiskCategory: cloud_essd # 系统盘类型DATASOURCE类型的资源不创建实际云资源,而是查询已有资源或推荐配置。返回结果通过
Fn::GetAtt获取。本例中返回的InstanceTypes属性是一个数组:[ {"InstanceType": "ecs.g7.large", "ZoneId": "cn-hangzhou-h", ...}, {"InstanceType": "ecs.g6.large", "ZoneId": "cn-hangzhou-i", ...} ]Fn::Jq数据提取函数
ZoneId: Fn::Jq: - First # 模式:First=取第一个结果,All=取所有结果 - .[].ZoneId # JQ表达式:遍历数组,提取每个元素的ZoneId - Fn::GetAtt: # 数据源:DATASOURCE查询结果 - DS-InstanceTypes - InstanceTypesFn::Jq使用JQ语法从复杂JSON结构中提取数据。First模式取第一个匹配结果作为字符串返回。Fn::Jq参数含义
本例中的值
第1个参数
结果模式
First(取第一个匹配值)第2个参数
JQ过滤表达式
.[].ZoneId(提取所有元素的ZoneId)第3个参数
输入数据
DATASOURCE返回的
InstanceTypes数组
步骤二:创建资源栈组
登录资源编排控制台。
在左侧导航栏,单击资源栈组。
在顶部菜单栏选择地域(此地域为资源栈组的管理地域,不影响实际部署地域)。
单击创建资源栈组。
步骤三:配置资源栈组
在配置资源栈组页面,设置权限。
若选择自助管理权限,需按照页面要求配置管理员角色和执行角色;若选择服务管理权限,资源栈组将会自动创建所需角色,无需进行配置。完成配置后,请单击下一步。
步骤四:配置模板和参数
在选择模板页面,点击选择已有模板,模板录入方式为输入模板,粘贴步骤一的YAML模板,然后单击下一步。
在配置参数页面,输入资源栈组名称和资源栈组描述,然后单击下一步。
说明本模板无需配置额外参数(实例规格和可用区由DATASOURCE自动确定),直接单击下一步即可。
步骤五:设置部署选项
在设置部署选项页面,配置项会根据步骤三:配置资源栈组时选择的权限模式发生变化。
使用服务管理权限时:
配置项
操作
部署目标
在资源目录中选择多个成员账号或组织单元。
自动部署
启用后,新增账号时,自动部署资源栈到该账号;删除账号时,具体行为由账号删除行为决定。禁用后则不再自动处理。
账号删除行为
自动部署启用时生效,可设置账号从资源夹中删除时,是否删除该账号下的资源栈。
使用自助管理权限时:
配置项
操作
部署位置
选择在账号中部署资源栈。
账号
输入多个目标账号ID,以半角逗号分隔。
配置地域与部署选项。
参数
说明
建议值
地域
选择要部署ECS实例的目标地域(最多20个)。
根据业务需要选择。
最大并发账号数
同时部署的账号数量
默认1(可提高以加速部署)
容错
允许的最大失败数,超过后停止
根据部署规模设置
地域并发
地域间是否并行部署
并行(加速部署)
说明部署矩阵示例(3个账号 × 4个地域 = 12个资源栈实例):
华东1(杭州) 华北2(北京) 华南1(深圳) 中国香港 账号A(12345…) 实例1 实例2 实例3 实例4 账号B(67890…) 实例5 实例6 实例7 实例8 账号C(11111…) 实例9 实例10 实例11 实例12每个实例包含:VPC + VSwitch + SecurityGroup + ECS Instance(共4个资源)
单击下一步,在检查并确认页面核对信息,然后单击创建资源栈组。
步骤六:查看部署结果
在左侧导航栏,单击资源栈组,然后单击目标资源栈组名称。
单击实例页签,按账号和地域查看资源栈实例。
列
说明
资源栈实例所属账号
资源栈实例所属的目标账号。
资源栈实例地域
资源栈实例所在的地域。
资源栈ID
各实例的独立资源栈标识。
实例状态
最新:资源栈实例是最新的,即该实例没有正在进行中的或者失败的操作。
已过期:资源栈实例不是最新的,即该实例最新一次的操作未完成或失败。例如:更新资源栈组及资源栈实例时,更新中的资源栈实例状态为已过期。创建或更新资源栈实例时,角色扮演失败,创建或更新资源栈未执行,资源栈实例状态为已过期。创建或更新资源栈实例时,角色扮演成功,创建或更新资源栈失败,资源栈实例状态为已过期。
单击某个资源栈ID,在资源页签查看该实例创建的所有资源(VPC、VSwitch、SecurityGroup、Instance)。
当所有实例的资源状态为创建成功时,表示多账号多地域ECS部署完成。
常见问题
DATASOURCE资源会产生费用吗?
不会。DATASOURCE类型的资源只执行查询操作,不创建实际云资源,不产生任何费用。它类似于API查询调用,在资源栈创建过程中自动执行。
如果某个地域没有满足条件的实例规格怎么办?
DATASOURCE查询返回空结果时,后续依赖该结果的资源(VSwitch和Instance)会创建失败。该地域的资源栈实例状态变为失败,但不影响其他地域的部署。
解决方法:
调整DATASOURCE的查询条件(如降低Cores和Memory要求)
在部署选项中排除不支持的地域
多个地域的ECS实例使用相同的私网IP(192.168.0.1)会冲突吗?
不会冲突。每个地域/账号的资源栈实例创建的是独立的VPC,私网IP在各自的VPC内有效。不同VPC之间的私网IP互相隔离,即使使用相同的网段和IP地址也不会冲突。
可以修改模板中的ECS配置(如vCPU核数、内存大小)吗?
可以。修改DATASOURCE中的Cores和Memory属性即可。例如需要4核16G的实例:
DS-InstanceTypes:
Type: DATASOURCE::ECS::RecommendInstanceTypes
Properties:
Cores: 4
Memory: 16
SystemDiskCategory: cloud_essdDATASOURCE会自动查询各地域满足新条件的推荐规格,无需手动指定实例规格名称。
想要了解更多资源部署问题,可以查询常见问题。