计算巢简介
计算巢服务是阿里云开放给企业应用服务商与其客户的服务管理PaaS平台。服务商在计算巢创建服务(可理解为云资源、软件编排后的集合)并发布上线后,用户便可通过此服务创建服务实例(基于计算巢服务创建的服务实体)以获取具体服务内容,即商家创建服务,用户通过商家发布的服务创建服务实例。
服务商创建服务,最重要的是撰写Ros(资源编排)模板。对于大部分场景,模板中均涉及Ecs规格、可用区等内容。然而,每个地域不同规格的Ecs均有库存限制与是否可用限制,如果服务商不在撰写模板时加以限制,用户创建服务实例时就会出现如无库存、当前可用区无法使用xxx规格实例等问题。
本文章介绍如何在撰写模板时正确加入相关的约束限制,使用户在创建服务时选到的规格一定是有库存、可用的,进而创建实例一定成功。
规则介绍
基本规则
模板Parameters中,针对Ecs需要写AssociationProperty与AssociationpropertyMetadata用于约束InstanceType,具体可参考:AssociationProperty和AssociationPropertyMetadata。
模板Metadata中,需要填写相关内容,Metadata为限制前端对参数Parametes的展示顺序:
如上图所示,实例规格配置放置在可用区配置前,因此创建服务实例时将先展示实例规格后展示可用区,同时由于实例规格放置在前面,因此选择实例规格后,可用区将自动调整内容,即通过实例规格约束可用区内容;反之如果可用区放置在实例规格前,则选择可用区之后,实例规格将自动调整,即通过可用区限制实例规格。下图给出约束展示:
未选择实例规格:
选择实例规格:
可见,通过不同的实例规格,约束了可选的可用区。
约束与套餐功能
计算巢提供了套餐能力,具体可参考:套餐设置。套餐功能同样具备约束能力,但仍有一些区别,具体看下面示例:
模板: 付费类型配置与可用区配置在实例规格配置之前;
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- PayType
- PayPeriodUnit
- PayPeriod
Label:
default:
en: PayType Configuration
zh-cn: 付费类型配置
- Parameters:
- ZoneId
Label:
default:
zh-cn: 可用区配置
en: Zone Configuration
……
- Parameters:
- EcsInstanceType
Label:
default:
zh-cn: ECS实例规格配置
en: ECS Instance Type Configuration
套餐:配置了实例规格和付费类型,并开启自定义参数:
创建服务实例页面:
说明:
虽然实例规格在Metadata最后一个,但是由于其为套餐参数,且套餐参数中付费类型在Metadata中第一个,因此套餐参数就被选为第一个参数,连带着实例规格参数也被放置到第一个(或者理解为展示时放置在可用区之前)。
由于本模板Metadata中,可用区在实例规格前,因此按逻辑应该是可用区约束实例规格/类型,但由于套餐原因实例规格可以先于可用区选择,因此会出现以下情况:
-
选择了自定义套餐中的实例规格、之后选择可用区B
-
经过约束校验后,实例类型变成空:
解释:因为本模板是可用区约束实例类型,虽然套餐中选择了实例类型,但是不生效,等选择完可用区之后,会校验实例规格,发现选择的ecs.g6a.large不在可用区B中,因此自定义套餐的实例规格变为空。
解决方法:这里如果是希望通过实例规格约束可用区,则将原有模板Metadata顺序:付费类型、可用区、实例规格,更改为付费类型、实例规格、可用区,即可实现实例规格约束可用区;如果希望可用区限制实例规格,顺序应调整为可用区、付费类型、实例规格,即可用区需要在任意套餐参数之前。