局部變量(Locals)
您在創(chuàng)建模板時(shí),使用局部變量(Locals)可以有效地對(duì)常用的功能邏輯或值計(jì)算規(guī)則進(jìn)行抽象與封裝,提升模板的可維護(hù)性和一致性,同時(shí)減少了代碼冗余。
語法
Locals由變量名稱以及變量屬性組成。
變量名稱必須為英文字母、數(shù)字,并且在同一個(gè)模板中不能與其他局部變量、參數(shù)名以及資源名稱重復(fù)。
局部變量屬性如下表所示。
局部變量屬性
必須
描述
Type
否
局部變量的數(shù)據(jù)類型。取值:
Macro(默認(rèn)值):宏替換,不會(huì)計(jì)算局部變量的實(shí)際值,直接進(jìn)行宏替換。
Eval:值計(jì)算,計(jì)算局部變量的實(shí)際值,然后進(jìn)行值替換。
數(shù)據(jù)源資源類型:數(shù)據(jù)源資源(DataSource)用于查詢?cè)品?wù)的資源數(shù)據(jù),查詢后的數(shù)據(jù)只能被局部變量使用,如
Type: DATASOURCE::VPC::Vpcs
。
Value
否
局部變量的值,在Macro和Eval類型下,Value是必填的。
Properties
否
數(shù)據(jù)源資源的屬性。
在使用局部變量Locals時(shí),存在以下限制:
嵌套資源棧不支持使用Locals。
Locals支持嵌套使用,最多支持5層嵌套。
只支持 Ref 引用局部變量,不支持 ${LocalName} 引用的方式。
Locals進(jìn)行值計(jì)算時(shí),設(shè)定的值只能引用參數(shù)(Parameters)和局部變量(Locals),支持使用函數(shù)。
參數(shù)(Parameters)和局部變量(Locals)的區(qū)別:Parameters是外部輸入,用于接收用戶或環(huán)境的配置,而Locals是內(nèi)部計(jì)算的,用于在ROS配置內(nèi)部存儲(chǔ)和復(fù)用值。
示例
宏替換(Macro)
定義一個(gè)局部變量Description,并在創(chuàng)建VPC資源時(shí),將這個(gè)值作為資源的Description屬性。這種方式可以提高模板的可維護(hù)性和一致性,同時(shí)減少代碼冗余。
ROSTemplateFormatVersion: 2015-09-01 Locals: Description: Value: test Resources: Vpc: Type: ALIYUN::ECS::VPC Properties: Description: Ref: Description
定義了局部變量VpcCount,它的值是通過Fn::Add函數(shù)計(jì)算得出的,即參數(shù)P1和P2的值相加的結(jié)果。這些變量在模板內(nèi)部使用,但不是由用戶直接提供的。
ROSTemplateFormatVersion: 2015-09-01 Parameters: P1: Type: Number Default: 1 P2: Type: Number Default: 2 Locals: VpcCount: Value: Fn::Add: - Ref: P1 - Ref: P2 Resources: Vpc: Type: ALIYUN::ECS::VPC Count: Ref: VpcCount
值計(jì)算(Eval)
在本示例中,局部變量Vpcs
為數(shù)據(jù)源資源,用來查詢VpcName
為test
的數(shù)據(jù),并通過計(jì)算局部變量CreateVpc
的值來判斷是否創(chuàng)建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