资源编排模板快速入门

模板是描述基础设施和架构的蓝图,您可以在模板中部署云产品及其依赖关系,然后通过ROS完成部署。本文为您介绍如何编写并测试模板、在模板中定义资源及其依赖关系等操作,帮助您快速使用模板。

背景信息

当您了解ROS的模板结构后,可以尝试编写您的第一个模板。更多信息,请参见模板编写快速入门

本文从简入难,为您介绍如何编写和测试一个简单的模板(创建VPC),然后深入讲解如何在模板中定义多个资源及其依赖关系、在模板中定义参数,从而满足您在多个部署场景的需求,具体如下:

编写模板

编写模板最为重要的部分是在资源(Resources)中声明需要创建的资源,您可以在资源类型索引中查看ROS支持的所有资源类型,然后单击特定资源类型查看该资源类型支持的属性和返回值信息。关于如何编写模板,请参见模板编写快速入门。创建VPC的模板示例如下:

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  VPC:
    Type: ALIYUN::ECS::VPC
    Properties:
      VpcName: myvpc
      CidrBlock: 192.168.0.0/16
Outputs:
  VpcId:
    Value:
      Ref: VPC
  VRouterId:
    Value:
      Fn::GetAtt:
        - VPC
        - VRouterId

测试模板

编写模板完成后,您可以使用模板创建资源栈,测试通过该模板是否可以创建预期的资源。

  1. 登录资源编排控制台

  2. 创建资源栈。

    1. 在左侧导航栏,单击资源栈

    2. 在顶部菜单栏的地域下拉列表,选择资源栈的所在地域,例如:华东1(杭州)。

    3. 资源栈列表页面,单击创建资源栈,然后在下拉列表中选择使用ROS

    4. 选择模板页面,在指定模板区域单击选择已有模板、选择模板录入方式输入模板,然后在模板内容区域的ROS页签输入编写模板章节中编写的YAML格式的模板,最后单击下一步

    5. 配置参数页面,输入资源栈名称

    6. 配置资源栈区块,配置失败时回滚超时设置标签资源组资源栈策略资源最大并发数删除保护RAM角色资源栈事件回调地址手动支付,然后单击下一步。

    7. 检查并确认页面,单击预览模板资源,然后在预览对话框查看经过ROS校验的模板中的资源名称、资源类型和资源属性,最后单击确定

    8. 检查并确认页面,单击创建

  3. 查看资源栈。

    1. 在资源栈管理页面,单击事件页签,查看模板中不同资源的事件列表。

      事件

    2. 单击资源页签,查看已创建的资源详情。

      说明

      您也可以单击模板资源ID,然后在资源相应的控制台查看更多资源信息,进一步确认资源是否符合预期。

      资源

    3. 单击输出页签,查看在模板Outputs中定义的输出。

      输出

在模板中定义多个资源及其依赖关系

了解如何编写基础的VPC资源相关模板后,您可能需要根据实际部署场景定义多个资源,以及资源之间的依赖关系。例如:交换机vSwitch依赖于VPC,您需要在特定的VPC中创建vSwitch。通过模板定义VPC、vSwitch资源及其依赖关系,然后创建资源栈,可以满足更为复杂的部署场景。

  1. 使用函数(Functions)函数获取资源输出属性值。

    例如:假设Resources中定义了VPC,可以通过{"Fn::GetAtt": ["VPC", "VpcId"]}获取VPC资源的输出属性VpcId。

  2. 使用函数(Functions)函数获取资源ID或参数值。

    例如:假设Resources中定义了VPC,可以通过{"Ref": "VPC"}引用VPC资源ID。

    说明
    • {"Ref": "VPC"}{"Fn::GetAtt": ["VPC", "VpcId"]}作用相同,但前者更为便捷。

    • Ref和Fn::GetAtt函数隐式声明了资源间的依赖关系,您也可以通过DependsOn属性显式声明资源间的依赖关系。

  3. 优化模板。

    以下模板示例,新增声明一个vSwitch,其可用区为cn-beijing-f、名称为myvsw、CidrBlock为192.168.0.0/24,并引用VPC。此外,在Outputs中定义了vSwitch的输出为交换机ID。

    ROSTemplateFormatVersion: '2015-09-01'
    Resources:
      VPC:
        Type: ALIYUN::ECS::VPC
        Properties:
          VpcName: myvpc
          CidrBlock: 192.168.0.0/16
      VSwitch:
        Type: ALIYUN::ECS::VSwitch
        Properties:
          VpcId:
            Ref: VPC
          ZoneId: cn-beijing-f
          VSwitchName: myvsw
          CidrBlock: 192.168.0.0/24
    Outputs:
      VpcId:
        Value:
          Fn::GetAtt:
            - VPC
            - VpcId
      VRouterId:
        Value:
          Fn::GetAtt:
            - VPC
            - VRouterId
      VSwitchId:
        Value:
          Ref: VSwitch

在模板中定义参数取值和参数属性

参数(Parameters)可以提高模板的灵活性和可复用性,您可以通过定义参数取值和参数属性实现动态展示参数取值列表、为参数分组等需求。

  • 定义参数

    在模板中为资源属性指定固定值的方式比较便捷,但是不够灵活。例如:ZoneId为cn-beijing-f,只能在北京地域创建资源栈,如果要更换地域需手动修改模板中的ZoneId取值。此时您可以将常用的或共同的属性提取出来定义为参数,以便在不修改模板的前提下,通过指定不同的参数来创建不同属性的资源。模板中定义的参数和模板示例代码如下:

    • 模板中定义的多个参数

      参数

      说明

      ZoneId

      被vSwitch的ZoneId属性引用。

      VpcCidrBlock

      默认值为192.168.0.0/16,被VPC的CidrBlock属性引用。

      VSwitchCidrBlock

      默认值为192.168.0.0/24,被vSwitch的CidrBlock属性引用

    • 模板示例代码

      ROSTemplateFormatVersion: '2015-09-01'
      Parameters:
        ZoneId:
          Type: String
        VpcCidrBlock:
          Type: String
          Default: 192.168.0.0/16
        VSwitchCidrBlock:
          Type: String
          Default: 192.168.0.0/24
      Resources:
        VPC:
          Type: ALIYUN::ECS::VPC
          Properties:
            VpcName: myvpc
            CidrBlock:
              Ref: VpcCidrBlock
        VSwitch:
          Type: ALIYUN::ECS::VSwitch
          Properties:
            VpcId:
              Ref: VPC
            ZoneId:
              Ref: ZoneId
            VSwitchName: myvsw
            CidrBlock:
              Ref: VSwitchCidrBlock
      Outputs:
        VpcId:
          Value:
            Ref: VPC
        VRouterId:
          Value:
            Fn::GetAtt:
              - VPC
              - VRouterId
        VSwitchId:
          Value:
            Ref: VSwitch

      使用模板示例代码创建资源栈时,您可以在资源编排控制台根据需要灵活设置参数取值。

      定义参数

      其中,ROS将分析模板中参数和资源属性的关联关系,获取参数的取值范围。例如:模板中的ZoneId参数关联了vSwitch资源的ZoneId属性,ROS将获取支持vSwitch的可用区列表,并在控制台展示。

      ZoneID

  • 动态设置取值列表

    参数(Parameters)支持多个属性,您可以通过定义属性,在控制台灵活呈现参数属性及取值。模板中定义的参数属性和模板示例代码如下:

    • 参数中定义的多个属性

      属性

      说明

      AllowedValues

      定义取值列表,ROS控制台会为参数显示该列表。例如:VpcCidrBlock取值为10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。

      Label

      定义参数别名,ROS控制台将显示此别名。例如:ZoneId显示为可用区ID。

    • 模板示例代码

      ROSTemplateFormatVersion: '2015-09-01'
      Parameters:
        ZoneId:
          Type: String
          Label: 可用区ID
        VpcCidrBlock:
          Type: String
          Label: 专有网络CIDR
          Default: 192.168.0.0/16
          AllowedValues:
            - 10.0.0.0/8
            - 172.16.0.0/12
            - 192.168.0.0/16
        VSwitchCidrBlock:
          Type: String
          Label: 交换机CIDR
          Default: 192.168.0.0/24

      使用模板示例代码创建资源栈时,您可以在资源编排控制台直接选择参数取值。参数值

  • 基于参数关联关系动态呈现参数

    定义参数的关联属性(AssociationProperty和AssociationPropertyMetadata)后,ROS控制台将动态查询参数的取值列表。更多信息,请参见AssociationProperty和AssociationPropertyMetadata

    例如:假设模板中要创建ECS实例,其中VpcId和vSwitchId作为参数传入,ROS控制台可以自动显示VpcId和vSwitchId的取值下拉列表。模板示例代码如下:

    ROSTemplateFormatVersion: '2015-09-01'
    Parameters:
      VpcId:
        Type: String
        AssociationProperty: ALIYUN::ECS::VPC::VPCId
      ZoneId:
        Type: String
        AssociationProperty: ALIYUN::ECS::ZoneId
      VSwitchId:
        Type: String
        AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
        AssociationPropertyMetadata:
          ZoneId: ${ZoneId}
          VpcId: ${VpcId}

    使用模板示例代码创建资源栈时,您可以在资源编排控制台将动态呈现参数。

    动态展示参数

  • 集中设置同类参数

    元数据(Metadata)支持为参数分组。当模板中的参数较多时,可以根据参数的特征为其分组,以便在控制台集中配置参数。

    例如:将模板中的ZoneId、VpcCidrBlock、VSwitchCidrBlock参数分组到基础设置和资源设置,其中基础设置为ZoneId,资源设置为VpcCidrBlock、VSwitchCidrBlock。您可以在Metadata的ParameterGroups中定义这两个分组。模板示例代码如下:

    ROSTemplateFormatVersion: '2015-09-01'
    Parameters:
      ZoneId:
        Type: String
      VpcCidrBlock:
        Type: String
        Default: 192.168.0.0/16
      VSwitchCidrBlock:
        Type: String
        Default: 192.168.0.0/24
    Metadata:
      ALIYUN::ROS::Interface:
        ParameterGroups:
          - Parameters:
              - ZoneId
            Label:
              default: 基础设置
          - Parameters:
              - VpcCidrBlock
              - VSwitchCidrBlock
            Label:
              default: 资源设置

    使用模板示例代码创建资源栈时,您可以在资源编排控制台的基础设置和资源设置分组中集中设置参数。

    参数分组

相关操作