模板是描述基础设施和架构的蓝图,您可以在模板中部署云产品及其依赖关系,然后通过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(杭州)。
在资源栈列表页面,单击创建资源栈,然后在下拉列表中选择使用ROS。
在选择模板页面,在指定模板区域单击选择已有模板、选择模板录入方式为输入模板,然后在模板内容区域的ROS页签输入编写模板章节中编写的YAML格式的模板,最后单击下一步。
在配置参数页面,输入资源栈名称。
在配置资源栈区块,配置失败时回滚、超时设置、标签、资源组、资源栈策略、资源最大并发数、删除保护、RAM角色、资源栈事件回调地址和手动支付,然后单击下一步。
在检查并确认页面,单击预览模板资源,然后在预览对话框查看经过ROS校验的模板中的资源名称、资源类型和资源属性,最后单击确定。
在检查并确认页面,单击创建。
查看资源栈。
在资源栈管理页面,单击事件页签,查看模板中不同资源的事件列表。
单击资源页签,查看已创建的资源详情。
说明您也可以单击模板资源ID,然后在资源相应的控制台查看更多资源信息,进一步确认资源是否符合预期。
单击输出页签,查看在模板Outputs中定义的输出。
在模板中定义多个资源及其依赖关系
了解如何编写基础的VPC资源相关模板后,您可能需要根据实际部署场景定义多个资源,以及资源之间的依赖关系。例如:交换机vSwitch依赖于VPC,您需要在特定的VPC中创建vSwitch。通过模板定义VPC、vSwitch资源及其依赖关系,然后创建资源栈,可以满足更为复杂的部署场景。
使用函数(Functions)函数获取资源输出属性值。
例如:假设Resources中定义了VPC,可以通过
{"Fn::GetAtt": ["VPC", "VpcId"]}
获取VPC资源的输出属性VpcId。使用函数(Functions)函数获取资源ID或参数值。
例如:假设Resources中定义了VPC,可以通过
{"Ref": "VPC"}
引用VPC资源ID。说明{"Ref": "VPC"}
与{"Fn::GetAtt": ["VPC", "VpcId"]}
作用相同,但前者更为便捷。Ref和Fn::GetAtt函数隐式声明了资源间的依赖关系,您也可以通过DependsOn属性显式声明资源间的依赖关系。
优化模板。
以下模板示例,新增声明一个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的可用区列表,并在控制台展示。
动态设置取值列表
参数(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: 资源设置
使用模板示例代码创建资源栈时,您可以在资源编排控制台的基础设置和资源设置分组中集中设置参数。
相关操作
关于如何快速的编写模板,请参见手把手编写模板。
将模板保存为我的模板,请参见创建模板。
设置模板为共享模板,请参见将模板共享给阿里云账号和将模板共享给资源目录中的成员。
通过模板预估待部署资源价格,请参见预估资源价格。
相关的模板语法,请参见模板语法。
使用模板自定义资源,请参见自定义资源。
在模板中嵌套模块,请参见使用模块。