模板是描述基礎設施和架構的藍圖,您可以在模板中部署云產品及其依賴關系,然后通過ROS完成部署。本文為您介紹如何編寫并測試模板、在模板中定義資源及其依賴關系等操作,幫助您快速使用模板。
背景信息
當您了解ROS的模板結構后,可以嘗試編寫您的第一個模板。更多信息,請參見模板編寫快速入門。
本文從簡入難,為您介紹如何編寫和測試一個簡單的模板(創(chuàng)建VPC),然后深入講解如何在模板中定義多個資源及其依賴關系、在模板中定義參數(shù),從而滿足您在多個部署場景的需求,具體如下:
編寫模板
編寫模板最為重要的部分是在資源(Resources)中聲明需要創(chuàng)建的資源,您可以在資源類型索引中查看ROS支持的所有資源類型,然后單擊特定資源類型查看該資源類型支持的屬性和返回值信息。關于如何編寫模板,請參見模板編寫快速入門。創(chuàng)建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
測試模板
編寫模板完成后,您可以使用模板創(chuàng)建資源棧,測試通過該模板是否可以創(chuàng)建預期的資源。
登錄資源編排控制臺。
創(chuàng)建資源棧。
在左側導航欄,單擊資源棧。
在頂部菜單欄的地域下拉列表,選擇資源棧的所在地域,例如:華東1(杭州)。
在資源棧列表頁面,單擊創(chuàng)建資源棧,然后在下拉列表中選擇使用ROS。
在選擇模板頁面,在指定模板區(qū)域單擊選擇已有模板、選擇模板錄入方式為輸入模板,然后在模板內容區(qū)域的ROS頁簽輸入編寫模板章節(jié)中編寫的YAML格式的模板,最后單擊下一步。
在配置參數(shù)頁面,輸入資源棧名稱。
在配置資源棧區(qū)塊,配置失敗時回滾、超時設置、標簽、資源組、資源棧策略、資源最大并發(fā)數(shù)、刪除保護、RAM角色、資源棧事件回調地址和手動支付,然后單擊下一步。
在檢查并確認頁面,單擊預覽模板資源,然后在預覽對話框查看經(jīng)過ROS校驗的模板中的資源名稱、資源類型和資源屬性,最后單擊確定。
在檢查并確認頁面,單擊創(chuàng)建。
查看資源棧。
在資源棧管理頁面,單擊事件頁簽,查看模板中不同資源的事件列表。
單擊資源頁簽,查看已創(chuàng)建的資源詳情。
說明您也可以單擊模板資源ID,然后在資源相應的控制臺查看更多資源信息,進一步確認資源是否符合預期。
單擊輸出頁簽,查看在模板Outputs中定義的輸出。
在模板中定義多個資源及其依賴關系
了解如何編寫基礎的VPC資源相關模板后,您可能需要根據(jù)實際部署場景定義多個資源,以及資源之間的依賴關系。例如:交換機vSwitch依賴于VPC,您需要在特定的VPC中創(chuàng)建vSwitch。通過模板定義VPC、vSwitch資源及其依賴關系,然后創(chuàng)建資源棧,可以滿足更為復雜的部署場景。
使用函數(shù)(Functions)函數(shù)獲取資源輸出屬性值。
例如:假設Resources中定義了VPC,可以通過
{"Fn::GetAtt": ["VPC", "VpcId"]}
獲取VPC資源的輸出屬性VpcId。使用函數(shù)(Functions)函數(shù)獲取資源ID或參數(shù)值。
例如:假設Resources中定義了VPC,可以通過
{"Ref": "VPC"}
引用VPC資源ID。說明{"Ref": "VPC"}
與{"Fn::GetAtt": ["VPC", "VpcId"]}
作用相同,但前者更為便捷。Ref和Fn::GetAtt函數(shù)隱式聲明了資源間的依賴關系,您也可以通過DependsOn屬性顯式聲明資源間的依賴關系。
優(yōu)化模板。
以下模板示例,新增聲明一個vSwitch,其可用區(qū)為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
在模板中定義參數(shù)取值和參數(shù)屬性
參數(shù)(Parameters)可以提高模板的靈活性和可復用性,您可以通過定義參數(shù)取值和參數(shù)屬性實現(xiàn)動態(tài)展示參數(shù)取值列表、為參數(shù)分組等需求。
定義參數(shù)
在模板中為資源屬性指定固定值的方式比較便捷,但是不夠靈活。例如:ZoneId為cn-beijing-f,只能在北京地域創(chuàng)建資源棧,如果要更換地域需手動修改模板中的ZoneId取值。此時您可以將常用的或共同的屬性提取出來定義為參數(shù),以便在不修改模板的前提下,通過指定不同的參數(shù)來創(chuàng)建不同屬性的資源。模板中定義的參數(shù)和模板示例代碼如下:
模板中定義的多個參數(shù)
參數(shù)
說明
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
使用模板示例代碼創(chuàng)建資源棧時,您可以在資源編排控制臺根據(jù)需要靈活設置參數(shù)取值。
其中,ROS將分析模板中參數(shù)和資源屬性的關聯(lián)關系,獲取參數(shù)的取值范圍。例如:模板中的ZoneId參數(shù)關聯(lián)了vSwitch資源的ZoneId屬性,ROS將獲取支持vSwitch的可用區(qū)列表,并在控制臺展示。
動態(tài)設置取值列表
參數(shù)(Parameters)支持多個屬性,您可以通過定義屬性,在控制臺靈活呈現(xiàn)參數(shù)屬性及取值。模板中定義的參數(shù)屬性和模板示例代碼如下:
參數(shù)中定義的多個屬性
屬性
說明
AllowedValues
定義取值列表,ROS控制臺會為參數(shù)顯示該列表。例如:VpcCidrBlock取值為10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。
Label
定義參數(shù)別名,ROS控制臺將顯示此別名。例如:ZoneId顯示為可用區(qū)ID。
模板示例代碼
ROSTemplateFormatVersion: '2015-09-01' Parameters: ZoneId: Type: String Label: 可用區(qū)ID VpcCidrBlock: Type: String Label: 專有網(wǎng)絡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
使用模板示例代碼創(chuàng)建資源棧時,您可以在資源編排控制臺直接選擇參數(shù)取值。
基于參數(shù)關聯(lián)關系動態(tài)呈現(xiàn)參數(shù)
定義參數(shù)的關聯(lián)屬性(AssociationProperty和AssociationPropertyMetadata)后,ROS控制臺將動態(tài)查詢參數(shù)的取值列表。更多信息,請參見AssociationProperty和AssociationPropertyMetadata。
例如:假設模板中要創(chuàng)建ECS實例,其中VpcId和vSwitchId作為參數(shù)傳入,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}
使用模板示例代碼創(chuàng)建資源棧時,您可以在資源編排控制臺將動態(tài)呈現(xiàn)參數(shù)。
集中設置同類參數(shù)
元數(shù)據(jù)(Metadata)支持為參數(shù)分組。當模板中的參數(shù)較多時,可以根據(jù)參數(shù)的特征為其分組,以便在控制臺集中配置參數(shù)。
例如:將模板中的ZoneId、VpcCidrBlock、
VSwitchCidrBlock
參數(shù)分組到基礎設置和資源設置,其中基礎設置為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: 資源設置
使用模板示例代碼創(chuàng)建資源棧時,您可以在資源編排控制臺的基礎設置和資源設置分組中集中設置參數(shù)。
相關操作
關于如何快速的編寫模板,請參見手把手編寫模板。
將模板保存為我的模板,請參見創(chuàng)建模板。
設置模板為共享模板,請參見將模板共享給阿里云賬號和將模板共享給資源目錄中的成員。
通過模板預估待部署資源價格,請參見預估資源價格。
相關的模板語法,請參見模板語法。
使用模板自定義資源,請參見自定義資源。
在模板中嵌套模塊,請參見使用模塊。