计算巢服务支持使用子模块简化复杂场景下的计算巢服务模板编辑。本文介绍如何创建和使用计算巢子模块。
应用场景
计算巢子模块功能主要用于如下场景的服务模板编辑:
ROS模板庞大、复杂且维护困难。
模板由多个团队共同维护,各自维护负责的服务。
服务商拥有多个服务,能够抽离出模板的公共部分。
操作步骤
步骤一:创建子模块
计算巢子模块功能是基于阿里云ROS模块功能实现的,具体步骤如下:
登录资源编排控制台。
在左侧导航栏中,选择
。单击创建模块,在创建模块页面中,编辑ROS模块信息。
ROS模块内容与普通部署计算巢服务的ROS模板内容一样,包含
Parameters
、Resources
、Outputs
等内容。关于创建模板的详细操作,请参见模块开发。将鼠标移动到界面右上角的导入/保存模块处,单击保存为新模块。
在弹窗中,设置新模块的共享权限、名称和描述等信息,然后单击确定。
重要为保证该模块能够在计算巢中正常使用,需要遵循一定的模块命名规范。
ROS模块命名采用四个字段的方式:
MODULE::XXX::XXX::XXX
。其中,第一个字段是固定值MODULE
;第二个字段的值可选SHARE
或ACS
;第三个字段为您的阿里云账号ID;第四个字段为自定义字段信息。如:MODULE::SHARE::1563457855xxxxxx::MyFirstModule
。
步骤二:使用子模块编辑服务模板并创建服务
此处介绍如何使用已创建的子模块编辑服务模板并创建服务。
登录计算巢控制台。
在左侧导航栏中,选择我的服务。
在我创建的服务页签中,单击创建新服务。
在创建新服务界面,配置服务信息。
此处只展示使用子模板场景服务必需的设置,其他配置项信息,请参见创建私有部署服务。
在模板内容处,填写模板内容。更多信息,请参见模板示例。
在编辑计算巢服务模板时,可以将子模块作为一个
resource
参数引入到模板中。并在resource
中设置子模块信息。更多信息,请参见使用模块。在
Version
中,定义模板的版本,您可以指定具体的版本,也可以将参数值设置为default
默认版本。在
Properties
中,定义子模块的参数信息。其中子模块中的资源可以通过完全限定逻辑名称的方式进行引用,您可以使用半角句号(.)作为分隔符来指定资源的完全限定逻辑名称。例如,本示例中的EcsInstanceJumpBox
中VPCId
定义的值为Vpc.Vpc
,其含义是调用名称为Vpc
的子模块中,名称是Vpc
的资源。
说明每个子模板都可以独立部署ROS资源栈。子模块在调试的时候,您可以先单独作为ROS模板进行资源创建,测试没问题后再应用到计算巢服务模板中,以简化服务模板的调试。
子模板示例内容如下:
ROSTemplateFormatVersion: '2015-09-01' Description: A sample vpc. Parameters: VpcName: Description: Name for the vpc Type: String CidrBlock: Description: Cidr block for the vpc Type: String VSwitchCidrBlock: Type: String Label: en: VSwitch CIDR Block zh-cn: 交换机子网网段 Description: zh-cn: 必须属于VPC的子网段。 en: Must belong to the subnet segment of VPC. Default: 192.168.1.0/24 AssociationProperty: 'ALIYUN::VPC::VSwitch::CidrBlock' AssociationPropertyMetadata: VpcCidrBlock: CidrBlock ZoneId: Type: String AssociationProperty: 'ALIYUN::ECS::Instance:ZoneId' Label: en: Zone ID zh-cn: 可用区 Resources: Vpc: Type: 'ALIYUN::ECS::VPC' Properties: VpcName: Ref: VpcName CidrBlock: Ref: CidrBlock EcsSecurityGroup: Type: 'ALIYUN::ECS::SecurityGroup' Properties: SecurityGroupName: Ref: 'ALIYUN::StackName' VpcId: Ref: Vpc SecurityGroupEgress: - PortRange: '-1/-1' Priority: 1 IpProtocol: all DestCidrIp: 0.0.0.0/0 NicType: intranet SecurityGroupIngress: - PortRange: 2181/2181 Priority: 1 SourceCidrIp: 0.0.0.0/0 IpProtocol: tcp NicType: internet EcsVSwitch: Type: 'ALIYUN::ECS::VSwitch' Properties: VSwitchName: Ref: 'ALIYUN::StackName' VpcId: Ref: Vpc ZoneId: Ref: ZoneId CidrBlock: Ref: VSwitchCidrBlock
单击保存服务。完成服务的创建。
模板示例
使用了子模块编辑的计算巢服务模板内容如下:
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
VSwitchCidrBlock:
Type: String
Label:
en: VSwitch CIDR Block
zh-cn: 交换机子网网段
Default: 192.xxx.xxx.0/24
AssociationProperty: 'ALIYUN::VPC::VSwitch::CidrBlock'
AssociationPropertyMetadata:
VpcCidrBlock: ${VpcCidrBlock}
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance:ZoneId
Label:
en: Zone ID
zh-cn: 可用区
VpcName:
Label:
en: Vpc Name
zh-cn: vpc名称
Type: String
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: ecs实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
InstanceChargeType: ${PayType}
Default: ecs.g6.large
Resources:
Vpc:
Type: MODULE::SHARE::1563457855xxxxxx::TESTVPC
Version: default
Properties:
VpcName:
Ref: VpcName
CidrBlock:
Ref: VpcCidrBlock
ZoneId:
Ref: ZoneId
VSwitchCidrBlock:
Ref: VSwitchCidrBlock
EcsInstanceJumpBox:
Type: ALIYUN::ECS::InstanceGroup
Properties:
ZoneId:
Ref: ZoneId
InstanceChargeType:
Ref: PayType
Period:
Ref: PayPeriod
ImageId: centos_7
InstanceType:
Ref: EcsInstanceType
VpcId:
Ref: Vpc.Vpc
VSwitchId:
Ref: Vpc.EcsVSwitch
AllocatePublicIP: false
Password:
Ref: LoginPassword
MaxAmount: 1