通过资源场景自动生成模板

您可以通过ROS的资源纳管场景,将纳管的一组现有资源生成资源场景模板,然后修改资源场景模板为通用模板,最后使用通用模板批量部署资源。

应用场景

假设您需要部署1个Web应用,可以通过为资源绑定统一的标签app:web,实现在创建资源纳管场景时通过标签筛选指定的资源。一键生成资源场景模板后,您可以使用参数(Parameters)提高模板的灵活性和可复用性,将模板修改为通用模板,然后创建资源栈批量部署以下资源:

  • 1个VPC(专有网络)

  • 1个vSwitch(交换机)

  • 1个SecurityGroup(安全组)

  • 2个ECS(云服务器)

  • 1个SLB(负载均衡)

批量部署

步骤一:创建资源并绑定标签

在相应产品的控制台创建资源,并仅为本示例中的资源绑定统一的标签app:web(标签键为app,标签值为web)。关于标签的更多信息,请参见标签概述

说明

对于现有资源,仅需绑定标签即可。

  1. 在VPC控制台,创建1个VPC和1个vSwitch,并绑定标签app:web

    具体操作,请参见创建VPC为VPC绑定标签

    说明

    vSwitch绑定标签方式与VPC相同,单击目标vSwitch标签列的标签图标即可绑定标签。

  2. 在ECS控制台,创建1个专有网络类型的安全组,选择网络步骤1中创建的VPC,并绑定标签app:web

    具体操作,请参见创建安全组为安全组绑定标签

  3. 创建2个ECS实例,并绑定标签app:web

    1. 选择步骤1创建的VPC和vSwitch。

    2. 选择步骤2创建的安全组。

    3. 为ECS实例设置其他参数。

      关于参数的更多信息,请参见创建ECS实例

    4. 为ECS实例绑定标签app:web

      具体操作,请参见为ECS实例绑定标签

  4. 在SLB控制台,创建1个SLB实例(以ALB实例为例),并绑定标签app:web

    1. 创建SLB实例,选择步骤1创建的VPC。

    2. 创建后端服务器组,添加步骤3创建的2个ECS实例。

    3. 配置监听并按需设置域名解析。

    4. 为SLB实例绑定标签app:web

    具体操作,请参见SLB实例快速入门为SLB实例绑定标签

步骤二:创建资源纳管场景

创建资源纳管场景,筛选步骤一:创建资源并绑定标签创建的资源。

  1. 登录资源编排控制台

  2. 在左侧导航栏,单击资源场景

  3. 在顶部菜单栏的地域下拉列表,选择资源场景的所在地域。

  4. 资源场景列表页面,单击创建资源场景

  5. 创建资源场景对话框,设置资源场景描述,然后选择资源场景为资源纳管

  6. 选择资源范围。

    1. 选择方式区域,选择源标签

    2. 源标签区域,设置标签键app,设置标签值web

    77

  7. 设置资源场景的资源删除策略保留

    说明

    在删除资源栈时,本示例中的资源不需随资源栈一起删除,选择保留。

  8. 单击生成场景

    创建资源场景成功后,状态列显示生成完成

步骤三:生成资源场景模板

  1. 资源场景列表页面,单击目标资源场景ID。

  2. 在资源场景管理页面,单击右上角的生成模板

    8

生成的模板有JSON和YAML两种格式。以YAML格式为例,模板内容以及模板说明如下:

模板详细内容

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  ECSInstance_001:
    DeletionPolicy: Retain
    Type: ALIYUN::ECS::Instance
    Properties:
      DeletionProtection: false
      VSwitchId:
        Ref: ECSVSwitch_001
      VpcId:
        Ref: ECSVPC_001
      Tags:
        - Value: web
          Key: app
      SystemDiskSize: 40
      HostName: iZbp11ut2d6rr7gg78a****
      SystemDiskCategory: cloud_essd
      ImageId: centos_7_9_x64_20G_alibase_2022****.vhd
      SpotStrategy: NoSpot
      AllocatePublicIP: false
      InstanceChargeType: PostPaid
      IoOptimized: optimized
      SecurityGroupIds:
        - Ref: ECSSecurityGroup_001
      InternetChargeType: PayByTraffic
      ZoneId: cn-hangzhou-i
      InstanceName: launch-advisor-2022****
      InstanceType: ecs.g7.large
      SystemDiskPerformanceLevel: PL0
    DependsOn:
      - ECSSecurityGroup_001
      - ECSVSwitch_001
      - ECSVPC_001
  ECSInstance_002:
    DeletionPolicy: Retain
    Type: ALIYUN::ECS::Instance
    Properties:
      DeletionProtection: false
      VSwitchId:
        Ref: ECSVSwitch_001
      VpcId:
        Ref: ECSVPC_001
      Tags:
        - Value: web
          Key: app
      SystemDiskSize: 40
      HostName: iZbp11ut2d6rr7gg78a****
      SystemDiskCategory: cloud_essd
      ImageId: centos_7_9_x64_20G_alibase_2022****.vhd
      SpotStrategy: NoSpot
      AllocatePublicIP: false
      InstanceChargeType: PostPaid
      IoOptimized: optimized
      SecurityGroupIds:
        - Ref: ECSSecurityGroup_001
      InternetChargeType: PayByTraffic
      ZoneId: cn-hangzhou-i
      InstanceName: launch-advisor-2022****
      InstanceType: ecs.g7.large
      SystemDiskPerformanceLevel: PL0
    DependsOn:
      - ECSSecurityGroup_001
      - ECSVSwitch_001
      - ECSVPC_001
  ECSSecurityGroup_001:
    DeletionPolicy: Retain
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      VpcId:
        Ref: ECSVPC_001
      Description: web-sg
      SecurityGroupName: web-sg
      Tags:
        - Value: web
          Key: app
      SecurityGroupIngress:
        - PortRange: 1/65535
          NicType: intranet
          Priority: 1
          SourceCidrIp: 0.0.0.0/0
          Policy: accept
          IpProtocol: tcp
        - 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
        - PortRange: 3389/3389
          NicType: intranet
          Priority: 1
          SourceCidrIp: 0.0.0.0/0
          Policy: accept
          IpProtocol: tcp
        - PortRange: '-1/-1'
          NicType: intranet
          Priority: 1
          SourceCidrIp: 0.0.0.0/0
          Policy: accept
          IpProtocol: icmp
          SourcePortRange: '-1/-1'
      SecurityGroupType: normal
    DependsOn:
      - ECSVPC_001
  ECSVPC_001:
    DeletionPolicy: Retain
    Type: ALIYUN::ECS::VPC
    Properties:
      CidrBlock: 172.16.0.0/12
      VpcName: web-vpc
      EnableIpv6: false
      Description: web-vpc
      Tags:
        - Value: web
          Key: app
  ECSVSwitch_001:
    DeletionPolicy: Retain
    Type: ALIYUN::ECS::VSwitch
    Properties:
      VSwitchName: web-vsw
      VpcId:
        Ref: ECSVPC_001
      Description: web-vsw
      Tags:
        - Value: web
          Key: app
      ZoneId: cn-hangzhou-i
      CidrBlock: 172.16.0.0/24
    DependsOn:
      - ECSVPC_001
  SLBBackendServerAttachment_001:
    DeletionPolicy: Retain
    Type: ALIYUN::SLB::BackendServerAttachment
    Properties:
      BackendServers:
        - ServerId:
            Ref: ECSInstance_002
          Type: ecs
          Weight: 100
        - ServerId:
            Ref: ECSInstance_001
          Type: ecs
          Weight: 100
      LoadBalancerId:
        Ref: SLBLoadBalancer_001
    DependsOn:
      - SLBLoadBalancer_001
      - ECSInstance_001
      - ECSInstance_002
  SLBLoadBalancer_001:
    DeletionPolicy: Retain
    Type: ALIYUN::SLB::LoadBalancer
    Properties:
      DeletionProtection: false
      VpcId:
        Ref: ECSVPC_001
      AddressIPVersion: ipv4
      Tags:
        - Value: web
          Key: app
      SupportPrivateLink: true
      PayType: PayOnDemand
      SlaveZoneId: cn-hangzhou-h
      AddressType: intranet
      VSwitchId:
        Ref: ECSVSwitch_001
      LoadBalancerName: web-app-slb
      InternetChargeType: paybytraffic
      LoadBalancerSpec: slb.s1.small
      MasterZoneId: cn-hangzhou-i
    DependsOn:
      - ECSVPC_001
      - ECSVSwitch_001

模板说明

模板内容简略展示如下:

ROSTemplateFormatVersion: '2015-09-01' // 模板语法版本
Resources: {} // 资源列表
  • ROSTemplateFormatVersion:模板语法版本,其值固定为2015-09-01

  • Resources:资源列表,包括资源属性、资源间的依赖关系等。资源列表中包含步骤一:创建资源并绑定标签中创建的资源:

    • 1个VPC:ECSVPC_001。

    • 1个vSwitch:ECSvSwitch_001。

    • 1个SecurityGroup:ECSSecurityGroup_001。

    • 2个ECS:ECSInstance_001、ECSInstance_002,后文简称ECSInstance_00X。

    • 1个SLB:包含1个SLBLoadBalancer_001,一个SLBListener_001和一个LBBackendServerAttachment_001。

    资源架构图如下:

    架构图

步骤四:修改为通用模板

自动生成的资源场景模板中的资源属性都为固定值,来源于步骤一:创建资源并绑定标签中在各产品控制台创建资源时选择的参数。为了适用不同的场景,需要将模板中属性的固定值(例如:可用区以及实例规格等)通过模板语法参数(Parameters)进行调整,同时添加输出(Outputs)。

修改前

ROSTemplateFormatVersion: '2015-09-01' // 模板语法版本
Resources: {} // 资源列表

修改后

ROSTemplateFormatVersion: '2015-09-01' // 模板语法版本
Description: {} //模板描述信息,可用于说明模板的适用场景、架构说明等。
Parameters: {} // 将固定值抽离进行定制化的参数
Resources: {} // 资源列表
Outputs: {} // 输出资源属性等信息,可以通过API或控制台获取输出的内容。
说明

模板参数的详细说明,请参见模板语法

资源属性与参数的对应关系

资源名称

需抽离的固定值

需添加的输出参数

专有网络:ECSVPC_001

VPC网段VpcCidrBlock

交换机:ECSvSwitch_001

可用区IDZoneId

vSwitch网段VSwitchCidrBlock

安全组:ECSSecurityGroup_001

云服务器:ECSInstance_00X

可用区IDZoneId

云服务器实例IDInstanceId

ECS实例规格ECSInstanceType

ECS系统盘类型SystemDiskCategory

负载均衡:SLBLoadBalancer_001

可用区IDMasterZoneId

负载均衡实例的IP地址IpAddress

SLB备可用区SlaveZoneId

SLB实例规格LoadBalancerSpec

修改方法

专有网络:ECSVPC_001

  • 将VPC网段属性(VpcCidrBlock)提取为Parameters,作为参数传入。

  • 使用Ref定义参数CidrBlock,引用参数ParametersVpcCidrBlock的值。

修改前

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  ECSVPC_001:
    DeletionPolicy: Retain
    Type: ALIYUN::ECS::VPC
    Properties:
      CidrBlock: 172.16.0.0/12

修改后

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  VpcCidrBlock:
    Type: String
    Label: 专有网络IPv4网段
    Description: VPC的IP地址段范围
    Default: 172.16.0.0/12
Resources:
  ECSVPC_001:
    Type: ALIYUN::ECS::VPC
    Properties:
      CidrBlock:
        Ref: VpcCidrBlock
      VpcName: web-vpc
      EnableIpv6: false
      Description: web-vpc
      Tags:
        - Value: web
          Key: app
说明

关于资源ECSVPC_001其他属性描述,请参见ALIYUN::ECS::VPC

交换机:ECSvSwitch_001

  • 将可用区ID(ZoneId)和vSwitch网段(VSwitchCidrBlock)提取为Parameters,作为参数传入。

  • 使用Ref定义参数ZoneId,引用参数ParametersZoneId的值。

  • 使用Ref定义参数CidrBlock,引用参数ParametersVSwitchCidrBlock的值。

修改前

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  ECSVSwitch_001:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      VpcId:
        Ref: ECSVPC_001
      ZoneId: cn-hangzhou-i
      CidrBlock: 172.16.0.0/24
    DependsOn:
      - ECSVPC_001

修改后

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  ZoneId:
    Type: String
    AssociationProperty: ALIYUN::ECS::ZoneId
    Description: 可用区ID
    Label: 可用区
  VSwitchCidrBlock:
    Type: String
    Label: 交换机子网网段
    Description: 必须属于VPC的子网段
    Default: 172.16.0.0/24
Resources:
  ECSVPC_001: ''
  ECSVSwitch_001:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      CidrBlock:
        Ref: VSwitchCidrBlock
      VpcId:
        Ref: ECSVPC_001
      ZoneId:
        Ref: VSwitchZone
    DependsOn:
      - ECSVPC_001
说明
  • 通过在参数中指定AssociationProperty以获取所选地域下对应的资源,指定AssociationPropertyMetadata对不同参数添加筛选条件,以便在控制台动态选择参数配置。参数ZoneIdAssociationProperty中的ALIYUN::ECS::ZoneId用来获取当前地域下的可用区ID,以便在控制台通过下拉框的形式供您选择可用区。更多信息,请参见ationPropertyMetadata

  • 若指定了DependsOn属性,表示该资源会在依赖的资源创建成功后才开始创建。例如,资源ECSVSwitch_001会等待资源ECSVPC_001创建成功后创建。

  • 关于资源ECSVSwitch_001其他属性描述,请参见ALIYUN::ECS::VSwitch

云服务器:ECSInstance_00X

  • 将可用区ID(ZoneId)、ECS实例规格(ECSInstanceType)和ECS系统盘类型(SystemDiskCategory提取为Parameters,作为参数传入。

  • 使用Ref定义参数ZoneId,引用参数ParametersZoneId的值。

  • 使用Ref定义参数InstanceType,引用参数ParametersECSInstanceType的值。

  • 使用Ref定义参数SystemDiskCategory,引用参数ParametersSystemDiskCategory的值。

修改前

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  ECSVSwitch_001: ''
  ECSVPC_001: ''
  ECSSecurityGroup_001: ''
  ECSInstance_001:
    Type: ALIYUN::ECS::Instance
    Properties:
      ZoneId: cn-hangzhou-i
      InstanceType: ecs.g7.large
      SystemDiskCategory: cloud_essd
    DependsOn:
      - ECSSecurityGroup_001
      - ECSVSwitch_001
      - ECSVPC_001

修改后

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  ZoneId: ''
  ECSInstanceType:
    Type: String
    Description: 填写可用区下可使用的规格
    Label: 实例类型
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ZoneId
  SystemDiskCategory:
    Type: String
    Description: 系统盘类型
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: VSwitchZone
      InstanceType: ECSInstanceType
    Label: 系统盘类型
Resources:
  ECSInstance_001:
    Type: ALIYUN::ECS::Instance
    Properties:
      SystemDiskCategory:
        Ref: SystemDiskCategory
      InstanceType:
        Ref: ECSInstanceType
      ZoneId:
        Ref: ZoneId
    DependsOn:
      - ECSSecurityGroup_001
      - ECSVSwitch_001
      - ECSVPC_001
说明
  • 参数EcsInstanceTypeAssociationProperty中的ALIYUN::ECS::Instance::InstanceType用来获取当前地域下的ECS实例规格列表,以便在控制台通过下拉框的形式供您选择ECS实例规格。

  • 参数AssociationPropertyMetadata用来指定查询的条件,示例中的ZoneId表示查询在该可用区中支持的ECS实例规格。

  • 参数SystemDiskCategoryAssociationProperty中的ALIYUN::ECS::Disk::SystemDiskCategory用来获取当前地域下的ECS系统盘类型。AssociationPropertyMetadata中同样配置了ZoneId作为查询条件。

  • 关于资源ECSInstance_00X其他属性描述,请参见ALIYUN::ECS::Instance

负载均衡:SLBLoadBalancer_001

  • 将可用区ID(MasterZoneId)、SLB备可用区(SlaveZoneId)和SLB实例规格(LoadBalancerSpec提取为Parameters,作为参数传入。

  • 使用Ref定义参数MasterZoneId,引用参数ParametersZoneId的值。

  • 使用Ref定义参数SlaveZoneId,引用参数ParametersSlaveZoneId的值。

  • 使用Ref定义参数LoadBalancerSpec,引用参数ParametersLoadBalancerSpec的值。

修改前

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  ECSVPC_001: ''
  ECSVSwitch_001: ''
  SLBLoadBalancer_001:
    DeletionPolicy: Retain
    Type: ALIYUN::SLB::LoadBalancer
    Properties:
      MasterZoneId: cn-hangzhou-i
      SlaveZoneId: cn-hangzhou-h
      LoadBalancerSpec: slb.s1.small
    DependsOn:
      - ECSVPC_001
      - ECSVSwitch_001

修改后

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  ZoneId: ''
  SlaveZoneId:
    Type: String
    Description: 备可用区ID
    Label: SLB备可用区
  LoadBalancerSpec:
    Type: String
    AssociationProperty: ALIYUN::SLB::Instance::InstanceType
    Description: SLB实例规格
    Label: 规格
    AssociationPropertyMetadata:
      ZoneId: VSwitchZone
Resources:
  ECSVPC_001: ''
  ECSVSwitch_001: ''
  SLBLoadBalancer_001:
    DeletionPolicy: Retain
    Type: ALIYUN::SLB::LoadBalancer
    Properties:
      LoadBalancerName: web-app-slb
      LoadBalancerSpec:
        Ref: LoadBalancerSpec
      SlaveZoneId:
        Ref: SlaveZoneId
      MasterZoneId:
        Ref: ZoneId
    DependsOn:
      - ECSVPC_001
      - ECSVSwitch_001
说明
  • 通过在参数中指定AssociationProperty来获取所选地域下对应的资源,指定AssociationPropertyMetadata对不同参数添加筛选条件,以便在控制台动态选择参数配置。

  • 参数ZoneIdAssociationProperty中的ALIYUN::ECS::ZoneId用来获取当前地域下的可用区ID列表,以便在控制台通过下拉框的形式供您选择可用区。

  • 参数LoadBalancerSpecAssociationProperty中的ALIYUN::SLB::Instance::InstanceType用来获取当前地域下的SLB实例规格列表,以便在控制台通过下拉框的形式供您选择SLB实例规格。更多信息,请参见ationPropertyMetadata

  • 关于资源SLBLoadBalancer_001其他属性描述,请参见ALIYUN::SLB::LoadBalancer

输出参数:负载均衡实例的IP地址

关于资源SLBLoadBalancer_001支持输出的其他属性,请参见ALIYUN::SLB::LoadBalancer的返回值部分。

Outputs:
  SLBListenerIpAddress:
    Description: TheIPaddressoftheloadbalancer.
    Value:
      Fn::GetAtt:
        - SLBLoadBalancer_001
        - IpAddress

输出参数:云服务器实例ID

关于资源ECSInstance_00X支持输出的其他属性,请参见ALIYUN::ECS::Instance的返回值部分。

Outputs:
  ECSInstance_001:
    Description: TheinstanceIDofcreatedecsinstance
    Value:
      Fn::GetAtt:
        - ECSInstance_001
        - InstanceId
  ECSInstance_002:
    Description: TheinstanceIDofcreatedecsinstance
    Value:
      Fn::GetAtt:
        - ECSInstance_002
        - InstanceId

修改后的通用模板

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

(可选)步骤五:批量部署资源

您可以使用修改后的统一模板创建资源栈,批量部署资源。

  1. 资源编排控制台,使用步骤四:修改为通用模板中的通用模板创建资源栈并批量部署资源。001

    具体操作,请参见创建资源栈

  2. 在资源栈详情页单击参数页签,查看部署后的资源详情。002