在创建模板时,使用参数(Parameters)可提高模板的灵活性和可复用性。创建资源栈时,可根据实际情况,替换模板中的某些参数值。

语法

每个参数由参数名称和参数属性组成。参数名称必须为英文字母、数字,并且在同一个模板中不能与其他参数名称重复。可以用Label字段来定义参数别名。

参数属性如下表所示。

参数属性

必须

描述

Type

参数的数据类型。取值:

  • String:字符串。例如:"ecs.s1.medium"

  • Number:整数或浮点数。例如:3.14。

  • CommaDelimitedList:多个值组成的字符串,用半角逗号(,)分隔,可通过Fn::Select函数索引值。例如:"80,foo,bar"

  • Json:一个JSON格式的字符串。例如:{"foo": "bar"}[1, 2, 3]

  • Boolean:布尔值。例如:true或者false

  • ALIYUN::OOS::Parameter::Value:存储在OOS参数仓库中的普通参数。更多信息,请参见普通参数。例如:my_image

  • ALIYUN::OOS::SecretParameter::Value:存储在OOS参数仓库中的加密参数。更多信息,请参见加密参数。例如:my_password

说明

ALIYUN::OOS::Parameter::ValueALIYUN::OOS::SecretParameter::Value不支持AllowedPattern校验。

Default

在创建资源栈时,如果用户没有传入模板中给出的指定值,ROS会检查模板中是否定义默认值。如果已定义默认值,则使用默认值,否则报错。

说明

默认值可以设置为null,表示该参数取值为空并且忽略对该参数的验证。

AllowedValues

包含参数允许取值的列表。

AllowedPattern

正则表达式,用于检查用户输入的字符串类型的参数是否匹配该正则表达式。如果用户输入的不是字符串类型,则报错。

如果使用以下特殊字符,需要在字符前输入两个反斜线(\\)进行转义:

*.?+-$^[ ]( ){ }|\/
说明

短划线(-)在紧挨边界时无需转义,例如:[a-z-]。

MaxLength

一个整数值,输入的String类型参数值的最大长度。

MinLength

一个整数值,输入的String类型参数值的最小长度。

MaxValue

一个数字值,允许Number类型使用的最大数字值。

MinValue

一个数字值,允许Number类型使用的最小数字值。

NoEcho

如果将值设置为true,则只输出星号(*)。您可以在创建资源栈或查看资源栈时,查看是否输出参数值。

Confirm

NoEcho取值为true时,参数是否需要二次输入确认。默认值为false

说明

只有String类型的参数,且NoEcho取值为true时,Confirm可以为true

Description

描述参数的字符串。取值:

  • zh-cn:使用中文对参数进行描述。

  • en:使用英文对参数进行描述。

说明

对应描述只在控制台的对应语言中体现。

ConstraintDescription

违反参数的约束条件时,说明对应参数约束条件的字符串。

Label

参数别名,支持UTF-8字符。通过模板生成Web表单时,可映射为label

AssociationProperty

是Parameters的一个特性组件,用于自动验证参数值的合法性,并且给参数提供可选值。

ROS支持的AssociationProperty及其示例,请参见AssociationProperty和AssociationPropertyMetadata

AssociationPropertyMetadata

AssociationProperty定义约束条件,筛选出符合条件的结果。

该属性属于Map类型。AssociationProperty对应的AssociationPropertyMetadata及其示例,请参见AssociationProperty和AssociationPropertyMetadata

TextArea

参数是否支持换行。取值:

  • true:支持换行。

  • false(默认值):不支持换行。

例如:以下代码表示参数Content支持换行。

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  Content:
    Type: String
    TextArea: true
Outputs:
  TestContent:
    Value:
      Ref: Content

Required

设定参数是否必填。取值:

  • true:参数必填,不可为空。

  • false:参数非必填。

例如:以下代码表示参数ECSInstanceId是否显示必填。

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  CreateNewECS:
    Type: Boolean
    Label: 是否创建新的实例
    Default: false
  ECSInstanceId:
    Type: String
    Required: true  # 通过Required控制参数是否必填(前端效果)
    Default: Null
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Equals:
            - ${CreateNewECS}
            - false
说明

该参数仅在前端体现效果,并不影响参数的验证。

Placeholder

支持参数输入框自定义提示。

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  Placeholder:
    Type: String
    Placeholder:
      en: Placeholder
      zh-cn: 中文 Placeholder

示例:为Web应用创建资源栈

如果您想通过创建资源栈创建1个Web应用,其中包含1个负载均衡实例、2个ECS实例和1个RDS实例。如果该Web应用负载较高,可以在创建资源栈时选择高配的ECS实例;反之可以在创建资源栈时选择低配的ECS实例。您可以按照如下示例,在模板中定义ECS实例规格参数。

Parameters:
  InstanceType:
    Type: String
    AllowedValues:
      - ecs.t1.small
      - ecs.s1.medium
      - ecs.m1.medium
      - ecs.c1.large
    Default: ecs.t1.small
    Label: ECS规格类型
    Description: 请选择创建ECS示例的配置,默认为ecs.t1.small,可选ecs.t1.small, ecs.s1.medium, ecs.m1.medium,ecs.c1.large。

示例中,定义的InstanceType参数允许用户在使用模板创建资源栈时,对InstanceType进行重新赋值。如果用户不设置参数值,则使用默认值:ecs.t1.small

在定义资源时,可以引用该参数:

Webserver:
  Type: ALIYUN::ECS::Instance
  InstanceType:
    Ref: InstanceType