您在创建模板时,使用局部变量(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
为数据源资源,用来查询VpcName
为test
的数据,并通过计算局部变量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
文档内容是否对您有帮助?