您可以通過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 | Server Load Balancer執行個體的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
(可選)步驟五:批量部署資源
您可以使用修改後的統一模板建立資源棧,批量部署資源。
在Resource Orchestration Service控制台,使用步驟四:修改為通用模板中的通用模板建立資源棧並批量部署資源。
具體操作,請參見建立資源棧。
在資源棧詳情頁單擊參數頁簽,查看部署後的資源詳情。