您在建立模板時,使用局部變數(Locals)可以有效地對常用的功能邏輯或值計算規則進行抽象與封裝,提升模板的可維護性和一致性,同時減少了代碼冗餘。
文法
Locals由變數名稱以及變數屬性群組成。
變數名稱必須為英文字母、數字,並且在同一個模板中不能與其他局部變數、參數名以及資源名稱重複。
局部變數屬性如下表所示。
局部變數屬性
必須
描述
Type
否
局部變數的資料類型。取值:
Macro(預設值):宏替換,不會計算局部變數的實際值,直接進行宏替換。
Eval:值計算,計算局部變數的實際值,然後進行值替換。
資料來源資源類型:資料來源資源(DataSource)用於查詢雲端服務的資源資料,查詢後的資料只能被局部變數使用,如
Type: DATASOURCE::VPC::Vpcs。
Value
否
局部變數的值,在Macro和Eval類型下,Value是必填的。
Properties
否
資料來源資源的屬性。
在使用局部變數Locals時,存在以下限制:
嵌套資源棧不支援使用Locals。
Locals支援嵌套使用,最多支援5層嵌套。
只支援 Ref 引用局部變數,不支援 ${LocalName} 引用的方式。
Locals進行值計算時,設定的值只能引用參數(Parameters)和局部變數(Locals),支援使用函數。
參數(Parameters)和局部變數(Locals)的區別:Parameters是外部輸入,用於接收使用者或環境的配置,而Locals是內部計算的,用於在ROS配置內部儲存和複用值。
樣本
宏替換(Macro)
定義一個局部變數Description,並在建立VPC資源時,將這個值作為資源的Description屬性。這種方式可以提高模板的可維護性和一致性,同時減少代碼冗餘。
ROSTemplateFormatVersion: 2015-09-01 Locals: Description: Value: test Resources: Vpc: Type: ALIYUN::ECS::VPC Properties: Description: Ref: Description定義了局部變數VpcCount,它的值是通過Fn::AddFunction Compute得出的,即參數P1和P2的值相加的結果。這些變數在模板內部使用,但不是由使用者直接提供的。
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
值計算(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