您可以通过ROS的资源纳管场景,将纳管的一组现有资源生成资源场景模板,然后修改资源场景模板为通用模板,最后使用通用模板批量部署资源。
应用场景
假设您需要部署1个Web应用,可以通过为资源绑定统一的标签app:web
,实现在创建资源纳管场景时通过标签筛选指定的资源。一键生成资源场景模板后,您可以使用参数(Parameters)提高模板的灵活性和可复用性,将模板修改为通用模板,然后创建资源栈批量部署以下资源:
1个VPC(专有网络)
1个vSwitch(交换机)
1个SecurityGroup(安全组)
2个ECS(云服务器)
1个SLB(负载均衡)
步骤一:创建资源并绑定标签
在相应产品的控制台创建资源,并仅为本示例中的资源绑定统一的标签app:web
(标签键为app
,标签值为web
)。关于标签的更多信息,请参见标签概述。
对于现有资源,仅需绑定标签即可。
在VPC控制台,创建1个VPC和1个vSwitch,并绑定标签
app:web
。在ECS控制台,创建1个专有网络类型的安全组,选择网络为步骤1中创建的VPC,并绑定标签
app:web
。创建2个ECS实例,并绑定标签
app:web
。选择步骤1创建的VPC和vSwitch。
选择步骤2创建的安全组。
为ECS实例设置其他参数。
关于参数的更多信息,请参见创建ECS实例。
为ECS实例绑定标签
app:web
。具体操作,请参见为ECS实例绑定标签。
在SLB控制台,创建1个SLB实例(以ALB实例为例),并绑定标签
app:web
。具体操作,请参见SLB实例快速入门和为SLB实例绑定标签。
步骤二:创建资源纳管场景
创建资源纳管场景,筛选步骤一:创建资源并绑定标签创建的资源。
登录资源编排控制台。
在左侧导航栏,单击资源场景。
在顶部菜单栏的地域下拉列表,选择资源场景的所在地域。
在资源场景列表页面,单击创建资源场景。
在创建资源场景对话框,设置资源场景描述,然后选择资源场景为资源纳管。
选择资源范围。
在选择方式区域,选择源标签。
在源标签区域,设置标签键为
app
,设置标签值为web
。
设置资源场景的资源删除策略为保留。
说明在删除资源栈时,本示例中的资源不需随资源栈一起删除,选择保留。
单击生成场景。
创建资源场景成功后,状态列显示生成完成。
步骤三:生成资源场景模板
在资源场景列表页面,单击目标资源场景ID。
在资源场景管理页面,单击右上角的生成模板。
生成的模板有JSON和YAML两种格式。以YAML格式为例,模板内容以及模板说明如下:
步骤四:修改为通用模板
自动生成的资源场景模板中的资源属性都为固定值,来源于步骤一:创建资源并绑定标签中在各产品控制台创建资源时选择的参数。为了适用不同的场景,需要将模板中属性的固定值(例如:可用区以及实例规格等)通过模板语法参数(Parameters)进行调整,同时添加输出(Outputs)。
修改前
ROSTemplateFormatVersion: '2015-09-01' // 模板语法版本
Resources: {} // 资源列表
修改后
ROSTemplateFormatVersion: '2015-09-01' // 模板语法版本
Description: {} //模板描述信息,可用于说明模板的适用场景、架构说明等。
Parameters: {} // 将固定值抽离进行定制化的参数
Resources: {} // 资源列表
Outputs: {} // 输出资源属性等信息,可以通过API或控制台获取输出的内容。
模板参数的详细说明,请参见模板语法。
资源属性与参数的对应关系
资源名称 | 需抽离的固定值 | 需添加的输出参数 |
专有网络:ECSVPC_001 | VPC网段 | 无 |
交换机:ECSvSwitch_001 | 可用区ID | 无 |
vSwitch网段 | ||
安全组:ECSSecurityGroup_001 | 无 | 无 |
云服务器:ECSInstance_00X | 可用区ID | 云服务器实例ID |
ECS实例规格 | ||
ECS系统盘类型 | ||
负载均衡:SLBLoadBalancer_001 | 可用区ID | 负载均衡实例的IP地址 |
SLB备可用区 | ||
SLB实例规格 |
修改方法
修改后的通用模板
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance:ZoneId
Description: 可用区ID
Label: 可用区
SlaveZoneId:
Type: String
Description: 备可用区ID
Label: SLB备可用区
VpcCidrBlock:
Type: String
Label: 专有网络IPv4网段
Description: VPC的IP地址段范围
Default: 172.16.0.0/12
VSwitchCidrBlock:
Type: String
Label: 交换机子网网段
Description: 必须属于VPC的子网段
Default: 172.16.0.0/24
ECSInstanceType:
Type: String
Description: ECS实例类型
Label: 实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ZoneId
SystemDiskCategory:
Type: String
Description: 系统盘类型
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AssociationPropertyMetadata:
ZoneId: ZoneId
InstanceType: ECSInstanceType
Label: 系统盘类型
LoadBalancerSpec:
Type: String
AssociationProperty: ALIYUN::SLB::Instance::InstanceType
Description: 实例规格
Label: SLB规格
AssociationPropertyMetadata:
ZoneId: ZoneId
Default: slb.s1.small
Resources:
ECSVPC_001:
Type: ALIYUN::ECS::VPC
Properties:
CidrBlock:
Ref: VpcCidrBlock
VpcName: web-vpc
EnableIpv6: false
Description: web-vpc
Tags:
- Value: web
Key: app
ECSVSwitch_001:
Type: ALIYUN::ECS::VSwitch
Properties:
VSwitchName: web-vsw
VpcId:
Ref: ECSVPC_001
Description: web-vsw
Tags:
- Value: web
Key: app
ZoneId:
Ref: ZoneId
CidrBlock:
Ref: VSwitchCidrBlock
DependsOn:
- ECSVPC_001
ECSSecurityGroup_001:
Type: ALIYUN::ECS::SecurityGroup
Properties:
VpcId:
Ref: ECSVPC_001
Description: web-sg
SecurityGroupName: web-sg
Tags:
- Value: web
Key: app
SecurityGroupIngress:
- PortRange: 80/80
NicType: intranet
Priority: 1
SourceCidrIp: 0.0.0.0/0
Policy: accept
IpProtocol: tcp
- PortRange: 443/443
NicType: intranet
Priority: 1
SourceCidrIp: 0.0.0.0/0
Policy: accept
IpProtocol: tcp
- PortRange: 22/22
NicType: intranet
Priority: 1
SourceCidrIp: 0.0.0.0/0
Policy: accept
IpProtocol: tcp
SecurityGroupType: normal
DependsOn:
- ECSVPC_001
ECSInstance_001:
Type: ALIYUN::ECS::Instance
Properties:
DeletionProtection: true
SystemDiskCategory:
Ref: SystemDiskCategory
VpcId:
Ref: ECSVPC_001
Description: web-ecs
Tags:
- Value: web
Key: app
VSwitchId:
Ref: ECSVSwitch_001
SystemDiskSize: 40
ImageId: centos_7_9_x64_20G_alibase_2022****.vhd
SpotStrategy: NoSpot
AllocatePublicIP: false
InstanceChargeType: PostPaid
IoOptimized: optimized
SecurityGroupIds:
- Ref: ECSSecurityGroup_001
InternetChargeType: PayByTraffic
ZoneId:
Ref: ZoneId
InstanceName: web-ecs002
InstanceType:
Ref: ECSInstanceType
SystemDiskPerformanceLevel: PL0
DependsOn:
- ECSSecurityGroup_001
- ECSVSwitch_001
- ECSVPC_001
ECSInstance_002:
Type: ALIYUN::ECS::Instance
Properties:
DeletionProtection: true
SystemDiskCategory:
Ref: SystemDiskCategory
VpcId:
Ref: ECSVPC_001
Description: web-ecs
Tags:
- Value: web
Key: app
VSwitchId:
Ref: ECSVSwitch_001
SystemDiskSize: 40
ImageId: centos_7_9_x64_20G_alibase_2022****.vhd
SpotStrategy: NoSpot
AllocatePublicIP: false
InstanceChargeType: PostPaid
IoOptimized: optimized
SecurityGroupIds:
- Ref: ECSSecurityGroup_001
InternetChargeType: PayByTraffic
ZoneId:
Ref: ZoneId
InstanceName: web-ecs001
InstanceType:
Ref: ECSInstanceType
SystemDiskPerformanceLevel: PL0
DependsOn:
- ECSSecurityGroup_001
- ECSVSwitch_001
- ECSVPC_001
SLBListener_001:
Type: ALIYUN::SLB::Listener
Properties:
AclStatus: 'off'
Protocol: tcp
Description: tcp_80
HealthCheck:
Interval: 2
HealthyThreshold: 3
Switch: 'on'
UnhealthyThreshold: 3
HealthCheckType: tcp
LoadBalancerId:
Ref: SLBLoadBalancer_001
ListenerPort: 80
Bandwidth: -1
BackendServerPort: 80
Scheduler: tch
StartListener: true
Persistence:
PersistenceTimeout: 0
DependsOn:
- SLBLoadBalancer_001
SLBLoadBalancer_001:
Type: ALIYUN::SLB::LoadBalancer
Properties:
DeletionProtection: false
VpcId:
Ref: ECSVPC_001
AddressIPVersion: ipv4
Tags:
- Value: web
Key: app
SupportPrivateLink: true
PayType: PayOnDemand
AddressType: intranet
VSwitchId:
Ref: ECSVSwitch_001
LoadBalancerName: web-slb
InternetChargeType: paybytraffic
LoadBalancerSpec:
Ref: LoadBalancerSpec
MasterZoneId:
Ref: ZoneId
SlaveZoneId:
Ref: SlaveZoneId
DependsOn:
- ECSVPC_001
- ECSVSwitch_001
SLBBackendServerAttachment_001:
Type: ALIYUN::SLB::BackendServerAttachment
Properties:
BackendServers:
- ServerId:
Ref: ECSInstance_001
Type: ecs
Weight: 100
- ServerId:
Ref: ECSInstance_002
Type: ecs
Weight: 100
LoadBalancerId:
Ref: SLBLoadBalancer_001
DependsOn:
- SLBLoadBalancer_001
- ECSInstance_001
- ECSInstance_002
Outputs:
ECSInstance_001:
Description: TheinstanceIDofcreatedecsinstance
Value:
Fn::GetAtt:
- ECSInstance_001
- InstanceId
ECSInstance_002:
Description: TheinstanceIDofcreatedecsinstance
Value:
Fn::GetAtt:
- ECSInstance_002
- InstanceId
SLBListenerIpAddress:
Description: TheIPaddressoftheloadbalancer.
Value:
Fn::GetAtt:
- SLBLoadBalancer_001
- IpAddress
(可选)步骤五:批量部署资源
您可以使用修改后的统一模板创建资源栈,批量部署资源。
在资源编排控制台,使用步骤四:修改为通用模板中的通用模板创建资源栈并批量部署资源。
具体操作,请参见创建资源栈。
在资源栈详情页单击参数页签,查看部署后的资源详情。