天天看点

资源编排模板详解

资源编排中的模板,是对一组资源的定义和描述。您可以按照模板语法和资源的属性,编写自己的模板,也可以直接使用阿里云提供的模板样例。目前,支持20多种阿里云资源的编排服务。本文将对阿里云资源和资源编排模板分别进行介绍。

开始编写模板之前,您需要对所需的资源有所了解。

一个资源类型,对应一种阿里云资源,是每种资源的唯一标识。您可以查阅资源类型列表。

资源编排模板详解

例如,阿里云云服务器的资源类型是 aliyun::ecs::instance。

列出了当前资源支持的所有可配置属性。

资源编排模板详解

如上图所示,云服务器的可配置属性有 <code>securitygroupid</code>, <code>instancetype</code>, <code>imageid</code>等。归根结底,编写模板就是编辑资源,您可以通过配置资源的属性来自定义资源。在元数据中,清楚了描述了每个属性的特性。下面介绍几个比较重要的特性:

key: 属性关键字。通过它来标识您要配置当前资源的哪个属性。

type: 表明当前属性值是什么类型。您在给属性赋值的时候,类型一定要匹配。否则在创建模板的时候,语法检查会不通过。

required: 表明此属性是否是必须配置项。如果某项属性被标记为 <code>required</code>为 <code>true</code>,那么这个属性是必须要配置的。例如,资源 <code>aliyun::ecs::instance</code> 的 <code>securitygroupid</code>, <code>instancetype</code> 和 <code>imageid</code> 三个属性都被标记为 <code>required</code> ,那么当您编辑 <code>aliyun::ecs::instance</code> 类型的资源的时候,这三个属性的配置是不能省略的。

constraints: 表明当前属性是否有其他约束。例如,diskmappings 的constraints如下:

表明diskmappings的值的长度不能超过4,同时diskmappings的type为list,那么当您给diskmappings赋值时,要配置成长度不好过4的数组。

attributes 枚举了当前资源的所有<code>可获取属性</code>,以及属性的描述信息。

资源编排模板详解

如上图所示,云服务器的可获取属性有 instanceid, zoneid等。可获取属性,可以在 <code>resources</code> 和 <code>outputs</code> 两部分中进行获取。例如,下面模板片段定义了一个名为webserver的 <code>aliyun::ecs::instance</code> 资源,在outputs部分通过<code>fn::getatt</code>方法,获取到webserver的实例id。

接下来,会对资源编排模板进行详细的介绍。模板是一个 <code>json</code> 格式的文本文件。一般而言,模板分为六个部分:<code>rostemplateformatversion</code>, <code>description</code>, <code>parameters</code>, <code>mappings</code>, <code>resources</code> 和 <code>outputs</code>。 格式如下:

其中,只有 <code>rostemplateformatversion</code> 是 <code>必须指定</code> 的部分。

rostemplateformatversion: 指定模板格式的版本,目前仅支持值 <code>2015-09-01</code>。

description: 模板的描述信息

下面对 <code>parameters</code>, <code>mappings</code>, <code>resources</code>, <code>outputs</code> 逐一说明。

描述资源栈中每个资源,以及资源之间的关系。一个资源可以被其他资源和 <code>outputs</code> 所引用。

资源 id: 是资源在当前模板中的唯一标识,可以被其他的部分引用。您可以任意设置。

type: 标识当前资源的类型,参考资源类型

properties:

您可以给此资源配置任意多个属性,做为创建物理资源的参数和值。每种资源的可配置属性,可以通过 <code>ros控制台 -&gt; 资源类型 -&gt; 属性数据</code> 来查看。例如,ecs instance 的 properties 地址。

属性值类型可以是字符串、字符串列表、布尔值,也可以引用parameters。下面是一个简单的例子,资源webserver的属性 imageid 和 securitygroupid 分别引用参数 imageidref 和 securitygroupid 参数。有关 <code>parameters</code> 的详解见下节。

deletionpolicy: 配置此属性,可以在资源栈被删除时 <code>保留</code> 该资源

dependson: 指定资源的创建顺序。下面是一个简单的例子,databaseserver 将在 webserver 创建成功后才开始创建。

把可能会变化的值,放到parameter中,让模板变得更灵活。详细描述请参考帮助文档。<code>注意</code>,这里仅仅是把易变项抽象为参数而已,在创建资源栈的时候需要给每个参数赋值。

通过文档可知 <code>parameters</code> 可以配置的属性比较多,不过只有 <code>type</code> 这个属性是 <code>必须设置</code> 的。 格式如下:

参数 id: 参数唯一标识,可以在 resources 部分引用。

type: 参数的数据类型。支持 <code>string</code>, <code>number</code>, <code>commadelimitedlist</code>, <code>json</code>, <code>boolean</code> 五种数据类型。

default: 给参数配置缺省值。创建资源栈的时候,如果您没有显示的给参数赋值,那么将采用 <code>default值</code> 。

allowedvalues: 配置合法的参数值列表。您可以配置此项,来约束参数值的可选值。

maxlength 和 minlength: 当参数的type为 <code>string</code> 类型时,可以通过这两个配置项来限定参数值的长度。

maxvalue 和 minvalue: 当参数的type为 <code>number</code> 类型时,可以通过这两个配置项来限定参数值的大小。

noecho: 如果您希望调用查询资源栈时隐藏参数值,可以设置 <code>noecho: true</code>

以下 parameters 部分示例声明两个参数。

instancetype 参数类型是 <code>string</code> 类型,默认值是 ecs.t1.small ,允许值是 ecs.t1.small 和 ecs.t1.xsmall 两种值。

securitygrouppriority 参数类型是 <code>number</code> ,可指定的最大值是 100 ,最小值是 1。

在 <code>mappings</code> 部分,您可以配置多个枚举值或者映射表。在模板的 <code>resources</code> 和 <code>outputs</code> 部分可以使用 <code>fn::findinmap</code> 内部函数,通过给定 key 获取 value。

映像部分由 <code>key-value</code> 对组成。其中 key 和 value 可以为字符串类型或者数字类型。筛选某个值,搜索深度为3。定义 <code>mappings</code>,格式如下:

获取枚举值的方法如下:

以下示例,展示类型是 <code>aliyun::ecs::instance</code> 的资源 webserver,其属性 imageid 根据 region 以及操作系统位数进行映射。

当您调用查询资源栈详情接口的时候,资源编排服务会根据 <code>outputs</code> 部分返回对应的值,往往用来获取资源的属性值。

输出部分由 <code>输出id</code> 和 <code>输出值表达式</code> 组成。格式如下:

其中,输出值表达式,使用内部函数 <code>fn::getatt</code> 来获取资源的属性值。格式如下:

在以下示例中,分别获取资源 webserver 的 instanceid 属性和 publicip 属性。

更多模板示例,请参考 ros 模板样例

继续阅读