在服务商创建计算巢服务的过程中,需要录入模板。服务商需要先通过完成模板编写,再将模板复制到计算巢控制台的模板框中或将模板文件上传完成录入。本文以创建VPC为例,介绍如何使用JSON/YAML模板语法来编写模板并在ROS控制台验证模板。
背景信息
计算巢中的模板本质上是ROS模板。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如:ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。资源编排服务是阿里云提供的一项简化云计算资源管理的服务。更多信息,请参见什么是资源编排服务。
模板编写
ROS支持JSON/YAML和Terraform两种模板语法。编写模板时可以基于模板示例进行修改,也可以直接编写模板。
针对常见的场景,ROS提供了模板示例,您可以在ROS控制台的模板示例中选择适用的参考模板进行修改。其中应用场景为ISV软件部署类别的模板为计算巢场景常用模板,在模板描述中给出了基于该示例的修改步骤。
如果您采用了模板示例且改动简单,我们建议您直接进入到在ROS控制台验证模板的步骤,在创建资源栈的过程中选择模板示例并修改。
针对复杂的场景,需要您自己编写模板时,您可以使用任何文本编辑工具来编写模板。
针对JSON/YAML模板,我们推荐您在VSCode或者IntelliJ IDEA上安装插件Alibaba Cloud Toolkit来编写模板,以便获得语法自动提示。下载及使用方法请参考使用Alibaba Cloud Toolkit管理模板及资源栈(Visual Studio Code)。
本文以创建ECS的YAML模板为例,介绍创建模板的操作:
ROSTemplateFormatVersion: '2015-09-01'
# 参数配置
Parameters:
PayType:
Type: String
Label:
en: ECS Instance Charge Type
zh-cn: 付费类型
Default: PostPaid
AllowedValues:
- PostPaid
- PrePaid
AssociationProperty: ChargeType
AssociationPropertyMetadata:
LocaleKey: InstanceChargeType
PayPeriodUnit:
Type: String
Label:
en: Pay Period Unit
zh-cn: 购买资源时长周期
Default: Month
AllowedValues:
- Month
- Year
AssociationProperty: PayPeriodUnit
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
PayPeriod:
Type: Number
Description:
en: When the resource purchase duration is Month, the value of Period ranges from 1 to 9, 12, 24, 36, 48, or 60. <br><b><font color='red'> When ECS instance types are PrePaid valid </b></font>
zh-cn: 当购买资源时长为Month时,Period取值:1~9 <br><b><font color='red'>当ECS实例类型为PrePaid有效</b></font>
Label:
en: Period
zh-cn: 购买资源时长
Default: 1
AllowedValues:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AssociationProperty: PayPeriod
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Not:
Fn::Equals:
- ${PayType}
- PostPaid
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: 实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${InstanceChargeType}
InstancePassword:
NoEcho: true
Type: String
Description:
en: Server login password, Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ Special symbol in)
zh-cn: 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)
Label:
en: Instance Password
zh-cn: 实例密码
ConstraintDescription:
en: Length 8-30, must contain three(Capital letters, lowercase letters, numbers, ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ Special symbol in)
zh-cn: 长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;<>,.?/ 中的特殊符号)
AssociationProperty: ALIYUN::ECS::Instance::Password
AllowedPattern: '^[a-zA-Z0-9-\(\)\`\~\!\@\#\$\%\^\&\*\_\-\+\=\|\{\}\[\]\:\;\<\>\,\.\?\/]*$'
MinLength: 8
MaxLength: 30
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::ZoneId
Label:
en: VSwitch Availability Zone
zh-cn: 交换机可用区
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Description:
en: Please search the ID starting with (vpc-xxx) from console-Virtual Private Cloud
zh-cn: 现有虚拟专有网络的实例ID
Label:
en: VPC ID
zh-cn: 专有网络VPC实例ID
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
Type: String
Description:
en: Instance ID of existing business network switches, console-Virtual Private Cloud-VSwitches under query
zh-cn: 现有业务网络交换机的实例ID
Label:
en: VSwitch ID
zh-cn: 交换机实例ID
# 资源配置
Resources:
EcsSecurityGroup:
Type: ALIYUN::ECS::SecurityGroup
Properties:
SecurityGroupName:
Ref: ALIYUN::StackName
VpcId:
Ref: VpcId
# 安全组入端口
SecurityGroupIngress:
- PortRange: 80/80
Priority: 1
SourceCidrIp: 0.0.0.0/0
IpProtocol: tcp
NicType: internet
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
# 实例名
InstanceName:
Fn::Join:
- '-'
- - Ref: ALIYUN::StackName
- '[1,4]'
IoOptimized: optimized
# 付费类型
InstanceChargeType:
Ref: PayType
PeriodUnit:
Ref: PayPeriodUnit
Period:
Ref: PayPeriod
# 网络配置
VpcId:
Ref: VpcId
ZoneId:
Ref: ZoneId
VSwitchId:
Ref: VSwitchId
SecurityGroupId:
Ref: EcsSecurityGroup
# 磁盘类型和大小
SystemDiskCategory: cloud_essd
SystemDiskSize: 200
MaxAmount: 1
# 镜像
ImageId: centos_7
# 实例类型
InstanceType:
Ref: EcsInstanceType
Password:
Ref: InstancePassword
# 公网开启
AllocatePublicIP: true
# 公网带宽
InternetMaxBandwidthOut: 1
ECSRunCommand:
Type: ALIYUN::ECS::RunCommand
Properties:
InstanceIds:
Fn::GetAtt:
- EcsInstanceGroup
- InstanceIds
Type: RunShellScript
Sync: true
Timeout: 3600
CommandContent: |-
#!/bin/bash
# 定义输出
Outputs:
# 将公网ip做为http返回的地址显示在控制台
Endpoint:
Description:
zh-cn: 对外暴露的公网IP地址
en: Public IP Addresses
Value:
Fn::Sub:
- http://${ServerAddress}
- ServerAddress:
Fn::Select:
- 0
- Fn::GetAtt:
- EcsInstanceGroup
- PublicIps
Metadata:
ALIYUN::ROS::Interface:
# 分组信息
ParameterGroups:
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: PayType Configuration
zh-cn: 付费类型配置
- Parameters:
- EcsInstanceType
- InstancePassword
Label:
default:
en: ECS Instance Configuration
zh-cn: ECS实例配置
- Parameters:
- ZoneId
- VpcId
- VSwitchId
Label:
default:
zh-cn: 选择已有基础资源
en: Choose existing Infrastructure
模板中主要定义了参数(Parameters)、资源(Resources)、输出(Outputs)以及元数据(Metadata):
Parameters
参数(Parameters)定义了用户在创建服务实例时,需要设置的参数。本文示例中,Parameters中包含以下参数:
参数名称 | 参数描述 |
PayType | 付费类型 |
PayPeriodUnit | 购买资源时长周期 |
PayPeriod | 购买资源时长 |
EcsInstanceType | 实例类型 |
InstancePassword | 实例密码 |
ZoneId | 交换机可用区 |
VpcId | 专有网络VPC实例ID |
VSwitchId | 交换机实例ID |
Resources
资源(Resources)定义了需要创建的资源,以及每一个资源包含的Type
和Properties
。本文示例中,Resources中包含的资源如下表所示。
ROS中定义的资源类型 | 资源说明 |
ALIYUN::ECS::SecurityGroup | 创建ECS安全组 |
ALIYUN::ECS::InstanceGroup | 创建ECS实例 |
ALIYUN::ECS::RunCommand | 在ECS实例中执行Shell脚本 |
针对每一种阿里云的资源类型,您都可以在资源类型索引处查找其语法、属性和返回值(即输出参数),用于编写模板时的参考,以申明对于资源的具体要求。
Outputs
输出(Outputs)定义了用户创建服务完毕后,需要输出的信息。本文示例中,Outputs以Endpoint(http://PublicIp)
作为输出。用户在资源创建完毕后,即可获取访问服务的地址。
Metadata
元数据(Metadata)不仅支持对Parameters中定义的参数进行分组,还支持对自定义参数进行隐藏,您可以在资源编排控制台的配置参数页面查看效果。本文示例中,参数分组如下:
分组名称 | 参数名称 |
PayType Configuration | PayType |
PayPeriodUnit | |
PayPeriod | |
ECS Instance Configuration | EcsInstanceType |
InstancePassword | |
Choose existing Infrastructure | ZoneId |
VpcId | |
VSwitchId |
您还可以使用进阶功能Mappings、Conditions,进阶功能的详细信息,请参见模板结构说明。
您还可以使用Terraform创建模板,详细操作请参见创建Terraform类型模板。
在ROS控制台验证模板
完成模板编写后,您可以通过ROS控制台创建资源栈进行验证。
登录ROS控制台。
在左侧导航栏中,单击资源栈。
在页面左上角,选择创建资源栈>使用ROS。
在创建资源栈页面,完成页面信息配置。
在指定模板框中,可以选择选择已有模板,将之前编写完成的模板复制到模板内容中;也可以选择使用示例模板,选择示例模板呈现在模板内容中后进行修改。
单击下一步,进入配置参数页面,检查参数的正确性。并通过预览模板资源功能验证资源设置是否正确。
可选:单击下一步,进入合规预检(可选)页面。完成页面信息配置。
可选:单击下一步,进入检查并确认(可选)页面,确认配置信息。
单击创建。
说明配置资源栈(可选)和检查并确认(可选)为可选步骤,可根据实际规划选择是否需要执行这两步。
创建资源栈成功即校验模板成功,如果创建失败,请查看失败原因,并调整模板。