模板是描述基礎設施和架構的藍圖,您可以在模板中部署雲產品及其依賴關係,然後通過ROS完成部署。本文為您介紹如何編寫並測試模板、在模板中定義資源及其依賴關係等操作,協助您快速使用模板。
背景資訊
當您瞭解ROS的模板結構後,可以嘗試編寫您的第一個模板。更多資訊,請參見模板編寫快速入門。
本文從簡入難,為您介紹如何編寫和測試一個簡單的模板(建立VPC),然後深入講解如何在模板中定義多個資源及其依賴關係、在模板中定義參數,從而滿足您在多個部署情境的需求,具體如下:
編寫和測試一個簡單的模板
編寫模板
編寫模板最為重要的部分是在資源(Resources)中聲明需要建立的資源,您可以在資源類型索引中查看ROS支援的所有資源類型,然後單擊特定資源類型查看該資源類型支援的屬性和傳回值資訊。關於如何編寫模板,請參見模板編寫快速入門。建立VPC的模板樣本如下:
ROSTemplateFormatVersion: '2015-09-01'
Resources:
VPC:
Type: ALIYUN::ECS::VPC
Properties:
VpcName: myvpc
CidrBlock: 192.168.0.0/16
Outputs:
VpcId:
Value:
Ref: VPC
VRouterId:
Value:
Fn::GetAtt:
- VPC
- VRouterId
測試模板
編寫模板完成後,您可以使用模板建立資源棧,測試通過該模板是否可以建立預期的資源。
建立資源棧。
在左側導覽列,單擊資源棧。
在頂部功能表列的地區下拉式清單,選擇資源棧的所在地區,例如:華東1(杭州)。
在資源棧列表頁面,單擊建立資源棧,然後在下拉式清單中選擇使用ROS。
在選擇模板頁面,在指定模板地區單擊選擇已有模板、選擇模板錄入方式為輸入模板,然後在模板內容地區的ROS頁簽輸入編寫模板章節中編寫的YAML格式的模板,最後單擊下一步。
在配置參數頁面,輸入資源棧名稱。
在配置資源棧區塊,配置失敗時復原、逾時設定、標籤、資源群組、資源棧策略、資源最大並發數、刪除保護、RAM角色、資源棧事件回調地址和手動支付,然後單擊下一步。
在檢查並確認頁面,單擊預覽模板資源,然後在預覽對話方塊查看經過ROS校正的模板中的資源名稱、資源類型和資源屬性,最後單擊確定。
在檢查並確認頁面,單擊建立。
查看資源棧。
在資源棧管理頁面,單擊事件頁簽,查看模板中不同資源的事件列表。
單擊資源頁簽,查看已建立的資源詳情。
說明您也可以單擊模板資源ID,然後在資源相應的控制台查看更多資源資訊,進一步確認資源是否符合預期。
單擊輸出頁簽,查看在模板Outputs中定義的輸出。
在模板中定義多個資源及其依賴關係
瞭解如何編寫基礎的VPC資源相關模板後,您可能需要根據實際部署情境定義多個資源,以及資源之間的依賴關係。例如:交換器vSwitch依賴於VPC,您需要在特定的VPC中建立vSwitch。通過模板定義VPC、vSwitch資源及其依賴關係,然後建立資源棧,可以滿足更為複雜的部署情境。
使用函數(Functions)函數擷取資源輸出屬性值。
例如:假設Resources中定義了VPC,可以通過
{"Fn::GetAtt": ["VPC", "VpcId"]}
擷取VPC資源的輸出屬性VpcId。使用函數(Functions)函數擷取資源ID或參數值。
例如:假設Resources中定義了VPC,可以通過
{"Ref": "VPC"}
引用VPC資源ID。說明{"Ref": "VPC"}
與{"Fn::GetAtt": ["VPC", "VpcId"]}
作用相同,但前者更為便捷。Ref和Fn::GetAtt函數隱式聲明了資源間的依賴關係,您也可以通過DependsOn屬性顯式聲明資源間的依賴關係。
最佳化模板。
以下模板樣本,新增聲明一個vSwitch,其可用性區域為cn-beijing-f、名稱為myvsw、CidrBlock為192.168.0.0/24,並引用VPC。此外,在Outputs中定義了vSwitch的輸出為交換器ID。
ROSTemplateFormatVersion: '2015-09-01' Resources: VPC: Type: ALIYUN::ECS::VPC Properties: VpcName: myvpc CidrBlock: 192.168.0.0/16 VSwitch: Type: ALIYUN::ECS::VSwitch Properties: VpcId: Ref: VPC ZoneId: cn-beijing-f VSwitchName: myvsw CidrBlock: 192.168.0.0/24 Outputs: VpcId: Value: Fn::GetAtt: - VPC - VpcId VRouterId: Value: Fn::GetAtt: - VPC - VRouterId VSwitchId: Value: Ref: VSwitch
在模板中定義參數取值和參數屬性
參數(Parameters)可以提高模板的靈活性和可複用性,您可以通過定義參數取值和參數屬性實現動態展示參數取值列表、為參數分組等需求。
定義參數
在模板中為資源屬性指定固定值的方式比較便捷,但是不夠靈活。例如:ZoneId為cn-beijing-f,只能在北京地區建立資源棧,如果要更換地區需手動修改模板中的ZoneId取值。此時您可以將常用的或共同的屬性提取出來定義為參數,以便在不修改模板的前提下,通過指定不同的參數來建立不同屬性的資源。模板中定義的參數和模板範例程式碼如下:
模板中定義的多個參數
參數
說明
ZoneId
被vSwitch的ZoneId屬性引用。
VpcCidrBlock
預設值為192.168.0.0/16,被VPC的CidrBlock屬性引用。
VSwitchCidrBlock
預設值為192.168.0.0/24,被vSwitch的CidrBlock屬性引用
模板範例程式碼
ROSTemplateFormatVersion: '2015-09-01' Parameters: ZoneId: Type: String VpcCidrBlock: Type: String Default: 192.168.0.0/16 VSwitchCidrBlock: Type: String Default: 192.168.0.0/24 Resources: VPC: Type: ALIYUN::ECS::VPC Properties: VpcName: myvpc CidrBlock: Ref: VpcCidrBlock VSwitch: Type: ALIYUN::ECS::VSwitch Properties: VpcId: Ref: VPC ZoneId: Ref: ZoneId VSwitchName: myvsw CidrBlock: Ref: VSwitchCidrBlock Outputs: VpcId: Value: Ref: VPC VRouterId: Value: Fn::GetAtt: - VPC - VRouterId VSwitchId: Value: Ref: VSwitch
使用模板範例程式碼建立資源棧時,您可以在Resource Orchestration Service控制台根據需要靈活設定參數取值。
其中,ROS將分析模板中參數和資源屬性的關聯關係,擷取參數的取值範圍。例如:模板中的ZoneId參數關聯了vSwitch資源的ZoneId屬性,ROS將擷取支援vSwitch的可用性區域列表,並在控制台展示。
動態設定取值列表
參數(Parameters)支援多個屬性,您可以通過定義屬性,在控制台靈活呈現參數屬性及取值。模板中定義的參數屬性和模板範例程式碼如下:
參數中定義的多個屬性
屬性
說明
AllowedValues
定義取值列表,ROS控制台會為參數顯示該列表。例如:VpcCidrBlock取值為10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。
Label
定義參數別名,ROS控制台將顯示此別名。例如:ZoneId顯示為可用性區域ID。
模板範例程式碼
ROSTemplateFormatVersion: '2015-09-01' Parameters: ZoneId: Type: String Label: 可用性區域ID VpcCidrBlock: Type: String Label: 專用網路CIDR Default: 192.168.0.0/16 AllowedValues: - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 VSwitchCidrBlock: Type: String Label: 交換器CIDR Default: 192.168.0.0/24
使用模板範例程式碼建立資源棧時,您可以在Resource Orchestration Service控制台直接選擇參數取值。
基於參數關聯關係動態呈現參數
定義參數的關聯屬性(AssociationProperty和AssociationPropertyMetadata)後,ROS控制台將動態查詢參數的取值列表。更多資訊,請參見AssociationProperty和AssociationPropertyMetadata。
例如:假設模板中要建立ECS執行個體,其中VpcId和vSwitchId作為參數傳入,ROS控制台可以自動顯示VpcId和vSwitchId的取值下拉式清單。模板範例程式碼如下:
ROSTemplateFormatVersion: '2015-09-01' Parameters: VpcId: Type: String AssociationProperty: ALIYUN::ECS::VPC::VPCId ZoneId: Type: String AssociationProperty: ALIYUN::ECS::ZoneId VSwitchId: Type: String AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId AssociationPropertyMetadata: ZoneId: ${ZoneId} VpcId: ${VpcId}
使用模板範例程式碼建立資源棧時,您可以在Resource Orchestration Service控制台將動態呈現參數。
集中設定同類參數
中繼資料(Metadata)支援為參數分組。當模板中的參數較多時,可以根據參數的特徵為其分組,以便在控制台集中配置參數。
例如:將模板中的ZoneId、VpcCidrBlock、
VSwitchCidrBlock
參數分組到基礎設定和資源設定,其中基礎設定為ZoneId,資源設定為VpcCidrBlock、VSwitchCidrBlock
。您可以在Metadata的ParameterGroups中定義這兩個分組。模板範例程式碼如下:ROSTemplateFormatVersion: '2015-09-01' Parameters: ZoneId: Type: String VpcCidrBlock: Type: String Default: 192.168.0.0/16 VSwitchCidrBlock: Type: String Default: 192.168.0.0/24 Metadata: ALIYUN::ROS::Interface: ParameterGroups: - Parameters: - ZoneId Label: default: 基礎設定 - Parameters: - VpcCidrBlock - VSwitchCidrBlock Label: default: 資源設定
使用模板範例程式碼建立資源棧時,您可以在Resource Orchestration Service控制台的基礎設定和資源設定分組中集中設定參數。
相關操作
關於如何快速的編寫模板,請參見手把手編寫模板。
將模板儲存為我的模板,請參見建立模板。
設定模板為共用模板,請參見將模板共用給阿里雲帳號和將模板共用給資來源目錄中的成員。
通過模板預估待部署資源價格,請參見預估資源價格。
相關的模板文法,請參見模板文法。
使用模板自訂資源,請參見自訂資源。
在模板中嵌套模組,請參見使用模組。