當您需要多次查詢ROS模板中某個參數時,可以將參數值儲存在阿里雲營運編排服務OOS(Operation Orchestration Service)的參數倉庫中,然後在ROS模板中輸入該參數名稱即可。
背景資訊
OOS參數倉庫中可以儲存普通參數或加密參數,加密參數可以將儲存的值通過KMS服務進行加密。本文以建立一組ECS執行個體為例,為您介紹使用OOS參數倉庫建立參數,並編寫ROS模板引用這些參數的方法。本樣本將會建立以下參數:
參數 | 參數名稱 | 參數種類 | 參數類型 | 參數值 |
ImageId | my_image | 普通參數 | String | centos_7_9_x64_20G_alibase_2020****.vhd |
SecurityGroupIds | security_group_ids | 普通參數 | StringList | sg-group1,sg-group2 |
Password | Password | 加密參數 | String | MyPassword1 |
關於參數的更多資訊,請參見ALIYUN::ECS::InstanceGroup。
建立參數時,您需要選擇與資源棧相同的地區。例如:您將使用模板在華東1(杭州)建立資源棧,則需要將參數儲存到相同地區。
步驟一:在營運編排控制台建立參數
登入營運編排控制台。
在左側導覽列,單擊參數倉庫。
在頂部功能表列的地區下拉式清單,選擇參數的所在地區。
說明參數的所在地區需要和資源棧所在地區相同,本樣本為華東1(杭州)。
建立普通參數ImageId。
在參數倉庫頁面,單擊普通參數,然後單擊建立普通參數。
在建立普通參數頁面,配置參數名稱和值,選擇參數類型。
本樣本中,您需要進行如下配置:
參數名稱:my_image。
參數類型:String。
值:centos_7_9_x64_20G_alibase_2020****.vhd。
單擊建立。
建立完成後,您可以在普通參數頁簽,單擊ImageId參數名稱,在描述頁簽查看名稱、版本、類型、值等資訊。
建立普通參數SecurityGroupIds。
在參數倉庫頁面,單擊普通參數,然後單擊建立普通參數。
在建立普通參數頁面,配置參數名稱和值,選擇參數類型。
本樣本中,您需要進行如下配置:
參數名稱:security_group_ids。
參數類型:StringList。
值:sg-group1,sg-group2。
單擊建立。
建立完成後,您可以在普通參數頁簽,單擊SecurityGroupIds參數名稱,在描述頁簽查看名稱、版本、類型、值等資訊。
建立加密參數Password。
在參數倉庫頁面,單擊加密參數,然後單擊建立加密參數。
在建立加密參數頁面,配置參數名稱和值,選擇KMS密鑰ID。
本樣本中,您需要進行如下配置:
參數名稱:Password。
KMS密鑰ID:Default Service CMK。
值:MyPassword1。
單擊建立。
建立完成後,您可以在加密參數頁簽,單擊Password參數名稱,在描述頁簽單擊值右側的顯示,擷取Password取值。
步驟二:編寫ROS模板
當您建立參數後,可以編寫ROS模板,在Parameters或Resources中引用參數:
在Parameters中引用
您需要將Type設定為ALIYUN::OOS::Parameter::Value(普通參數)或ALIYUN::OOS::SecretParameter::Value(加密參數)。
例如:您可以通過如下代碼引用普通參數ImageId的最新版本取值。
Parameters: ImageId: Type: ALIYUN::OOS::Parameter::Value Default: my_image您也可以將參數設定為my_image:1,表示引用版本1的取值。
在Resources中引用
您可以在Resource的Properties中引用參數,格式為:
{{resolve:<參數類型>:<參數名稱>:<參數版本號碼>}}。參數類型(必填)
儲存參數的服務。取值:
oos:普通參數。
oos-secret:加密參數。
參數名稱(必填)
參數的名稱。
參數版本號碼(選填)
參數的版本,若不填寫則為最新版本。
例如:您可以通過如下代碼引用普通參數ImageId的最新版本取值、加密參數Password版本2的取值。
Resources: ECS: Type: ALIYUN::ECS::Instance Properties: ImageId: '{{resolve:oos:my_image}}' Password: '{{resolve:oos-secret:Password:2}}' ...: null
模板中引用參數時支援大部分函數。更多資訊,請參見函數(Functions)。不支援的函數為:Ref、Fn::GetAtt、Fn::GetStackOutput、Fn::Calculate。
本樣本中模板如下:
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
InstanceType:
Type: String
Default: ecs.c6.large
ImageId:
Type: ALIYUN::OOS::Parameter::Value
Default: my_image
Vpc:
Type: String
VSwitch:
Type: String
Resources:
ECS:
Type: ALIYUN::ECS::InstanceGroup
Properties:
ImageId:
Ref: ImageId
InstanceType:
Ref: InstanceType
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
SecurityGroupIds: '{{resolve:oos:security_group_ids:1}}'
Password: '{{resolve:oos-secret:Password}}'
MaxAmount: 1
Outputs:
InstanceIds:
Value:
Fn::GetAtt:
- ECS
- InstanceIdsROS模板引用的參數會基於OOS參數類型進行轉換。當前OOS參數支援String和StringList類型,如果引用了StringList型別參數,ROS會將其轉換為List類型在模板中使用。例如:類型為StringList的參數SecurityGroupIds,值為sg-group1,sg-group2。當您建立ALIYUN::ECS::InstanceGroup資源時,SecurityGroupIds取值將解析為["sg-group1", "sg-group2"]。
步驟三:在Resource Orchestration Service控制台建立資源棧
在Resource Orchestration Service控制台使用步驟二中的樣本模板建立資源棧,建立一組ECS執行個體。具體操作,請參見建立資源棧。
資源棧建立成功後,您可以在Resource Orchestration Service控制台左側功能表列單擊資源棧,在資源棧列表頁面找到目標資源棧並單擊資源棧名稱,在資源棧詳情頁單擊參數頁簽查看參數及取值,驗證模板參數引用是否正確。