文档

局部变量(Locals)

更新时间:

您在创建模板时,使用局部变量(Locals)可以有效地对常用的功能逻辑或值计算规则进行抽象与封装,提升模板的可维护性和一致性,同时减少了代码冗余。

语法

Locals由变量名称以及变量属性组成。

  • 变量名称必须为英文字母、数字,并且在同一个模板中不能与其他局部变量、参数名以及资源名称重复。

  • 局部变量属性如下表所示。

    局部变量属性

    必须

    描述

    Type

    局部变量的数据类型。取值:

    • Macro(默认值):宏替换,不会计算局部变量的实际值,直接进行宏替换。

    • Eval:值计算,计算局部变量的实际值,然后进行值替换。

    • 数据源资源类型:数据源资源(DataSource)用于查询云服务的资源数据,查询后的数据只能被局部变量使用,如Type: DATASOURCE::VPC::Vpcs

    Value

    局部变量的值,在Macro和Eval类型下,Value是必填的。

    Properties

    数据源资源的属性。

在使用局部变量Locals时,存在以下限制:

  • 嵌套资源栈不支持使用Locals。

  • Locals支持嵌套使用,最多支持5层嵌套。

  • Locals进行值计算时,设定的值只能引用参数(Parameters)和局部变量(Locals),支持使用函数。

参数(Parameters)和局部变量(Locals)的区别:Parameters是外部输入,用于接收用户或环境的配置,而Locals是内部计算的,用于在ROS配置内部存储和复用值。

示例

宏替换(Macro)

ROSTemplateFormatVersion: 2015-09-01
Locals:
  Description:
    Value: test
Resources:
  Vpc:
    Type: Aliyun::ECS::VPC
    Properties:
      Description:
         Ref: Description

值计算(Eval)

在本示例中,局部变量Vpcs为数据源资源,用来查询VpcNametest的数据,并通过计算局部变量CreateVpc的值来判断是否创建VPC资源。

ROSTemplateFormatVersion: "2015-09-01"
Locals:
  Vpcs:
    Type: DATASOURCE::VPC::Vpcs
    Properties:
      VpcName: test
  CreateVpc:
    Type: Eval
    Value:
      Fn::Equals:
        - Fn::Length:
            Ref: Vpcs
        - 0
Conditions:
  CreateVpc:
    Ref: CreateVpc
Resources:
  Vpc:
    Condition: CreateVpc
    Type: ALIYUN::ECS::VPC