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

例如:要为一个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"
  }
}

语法

每个参数由参数名称和参数属性组成。参数名称必须为字母数字,并且在同一个模板中不能与其它参数名称重复。可以用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
Default 在创建资源栈时,如果用户没有传入指定值,资源编排服务会检查模板中是否有定义默认值。如果有定义默认值,则使用默认值,否则报错。
AllowedValues 包含参数允许值的列表。
AllowedPattern 一个正则表达式,用于检查用户输入的字符串类型的参数是否匹配。如果用户输入的不是字符串类型,则报错。

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

*.?+-$^[ ]( ){ }|\/
说明 短划线在紧挨边界时无需转义,例如:[a-z-]。
MaxLength 一个整数值,允许String类型使用的字符的最大数目。
MinLength 一个整数值,允许String类型使用的字符的最小数目。
MaxValue 一个数字值,允许Number类型使用的最大数字值。
MinValue 一个数字值,允许Number类型使用的最小数字值。
NoEcho 当调用查询资源栈时,是否输出参数值。如果将值设置为true,则只输出星号 (*)。
Description 描述参数的字符串。
ConstraintDescription 违反该参数约束条件时,说明该约束条件的字符串。
Label 参数别名,支持UTF-8字符。通过模板生成Web表单时,可映射为label。
AssociationProperty 用于自动验证该参数值的合法性,并且给该参数提供可选值。
取值:
  • ALIYUN::ECS::Instance::ImageId
  • ALIYUN::ECS::Instance::ZoneId
  • ALIYUN::ECS::VPC::VPCId
  • ALIYUN::ECS::VSwitch::VSwitchId
AssociationProperty取值为ALIYUN::ECS::Instance::ImageId时,ROS控制台将会验证参数指定的镜像ID是否可用,并以下拉框的方式列出其他可选值,详情请参见示例
Confirm 当NoEcho=true时,参数是否需要二次输入确认。默认值为false
注意 注意:只有String类型的参数,且NoEcho=true时,Confirm可以为true

示例

以下示例中Parameters部分声明有两个参数。

  • UserName参数属于String类型,长度为6~12,取值:
    • anonymous(默认值)
    • user-one
    • user-two
    注意 username的默认值也必须符合长度限制和允许值限制。
  • PassWord参数属于String类型,无默认值。将NoEcho属性设置为true, 可以阻止查询资源栈接口返回参数值。长度为1~41,支持大写字母、小写字母和数字。
  • ImageId参数属于String类型,AssociationProperty列出所有可选的镜像,并校验指定的默认值是否合法。
"Parameters": {
  "UserName": {
    "Label": "用户名",
    "Description": "请输入用户名",
    "Default": "anonymous",
    "Type": "String",
    "MinLength": "6",
    "MaxLength": "12",
    "AllowedValues": [
      "anonymous",
      "user-one",
      "user-two"
    ]
  },
  "PassWord": {
    "Label": "密码",
    "NoEcho": "True",
    "Description": "请输入用户密码",
    "Type": "String",
    "MinLength": "1",
    "MaxLength": "41",
    "AllowedPattern": "[a-zA-Z0-9]*"
  },
  "ImageId": {
    "Label": "镜像",
    "Type": "String",
    "Description": "请选择镜像",
    "AssociationProperty": "ALIYUN::ECS::Instance::ImageId",
    "Default": "centos_7_7_x64_20G_alibase_2020****.vhd"
  }
}