公共參數(shù)最佳實(shí)踐
當(dāng)執(zhí)行不同的模板卻有部分相同的參數(shù)值時(shí),基本每次需要查詢(xún)相應(yīng)的參數(shù)值并分別填寫(xiě)在不同的執(zhí)行中。所以期望可以將部分的模板執(zhí)行參數(shù),存儲(chǔ)在某一位置中,以此來(lái)實(shí)現(xiàn)無(wú)論執(zhí)行任何模板都可以直接選擇存儲(chǔ)的參數(shù),不需要再次查詢(xún)。?
在OOS中使用
OOS提供公共參數(shù),相比較普通參數(shù)由用戶(hù)自己創(chuàng)建和管理,公共參數(shù)由阿里云統(tǒng)一管理,用戶(hù)可以直接使用。比如最新的系統(tǒng)鏡像參數(shù),以ECS所有最新的鏡像為例:
比如,用戶(hù)希望自己創(chuàng)建鏡像時(shí)永遠(yuǎn)使用最新的centos8版本。如果不使用公共參數(shù),那用戶(hù)必須自己手動(dòng)去查找當(dāng)前最新的鏡像,如centos_8_5_x64_20G_alibase_20220428.vhd,然后填入。
如果使用公共參數(shù),用戶(hù)可在OOS模板中直接引用鏡像的公共參數(shù),如以下模板,參數(shù)latestCentos8ImageId會(huì)用來(lái)接收用戶(hù)傳入的最新cenos8的公共參數(shù)。后續(xù)在latestCentos8ImageId參數(shù)部分填入公共參數(shù)名稱(chēng)即可,不需要用戶(hù)自己去查找具體鏡像的id,維護(hù)工作由阿里云完成。比如這里填入aliyun/services/ecs/images/linux/almalinux-latest/almalinux_9_2_x64,系統(tǒng)會(huì)自動(dòng)解析最新的centos8的具體鏡像。
Description: Example template, run instance
FormatVersion: OOS-2019-06-01
Parameters:
latestCentos8ImageId:
Type: String
regionId:
Type: String
Label:
en: RegionId
zh-cn: 地域ID
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
instanceType:
Label:
en: InstanceType
zh-cn: 實(shí)例類(lèi)型
Type: String
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
RegionId: regionId
securityGroupId:
Label:
en: SecurityGroupId
zh-cn: 安全組ID
Type: String
AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
AssociationPropertyMetadata:
RegionId: regionId
vSwitchId:
Label:
en: VSwitchId
zh-cn: 交換機(jī)ID
Type: String
AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
AssociationPropertyMetadata:
RegionId: regionId
Filters:
- SecurityGroupId: securityGroupId
Tasks:
- Name: runInstances
Action: ACS::ECS::RunInstances
Description:
en: Creates one or more ECS instances.
zh-cn: 創(chuàng)建實(shí)例。
Properties:
imageId: '{{ latestCentOS8ImageId }}'
instanceType: '{{ instanceType }}'
securityGroupId: '{{ securityGroupId }}'
vSwitchId: '{{ vSwitchId }}'
amount: 1
Outputs:
instanceId:
ValueSelector: instanceIds[0]
Type: String
具體填寫(xiě)方法:
在控制臺(tái),用戶(hù)可以按照OOS公共參數(shù)的格式,手動(dòng)填寫(xiě)。具體格式為 {{oos:公共參數(shù)名稱(chēng)}}, 如{{oos:aliyun/services/ecs/images/linux/almalinux-latest/almalinux_9_2_x64}}。
另外,控制臺(tái)也支持單擊右邊的加號(hào)按鈕,查詢(xún)希望的公共參數(shù)。
?
您也可以直接在模板中按照格式寫(xiě)入公共參數(shù),如:
Description: Example template, run instance
FormatVersion: OOS-2019-06-01
Parameters:
regionId:
Type: String
Label:
en: RegionId
zh-cn: 地域ID
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
instanceType:
Label:
en: InstanceType
zh-cn: 實(shí)例類(lèi)型
Type: String
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
AssociationPropertyMetadata:
RegionId: regionId
securityGroupId:
Label:
en: SecurityGroupId
zh-cn: 安全組ID
Type: String
AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
AssociationPropertyMetadata:
RegionId: regionId
vSwitchId:
Label:
en: VSwitchId
zh-cn: 交換機(jī)ID
Type: String
AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
AssociationPropertyMetadata:
RegionId: regionId
Filters:
- SecurityGroupId: securityGroupId
Tasks:
- Name: runInstances
Action: ACS::ECS::RunInstances
Description:
en: Creates one or more ECS instances.
zh-cn: 創(chuàng)建實(shí)例。
Properties:
imageId: '{{oos:aliyun/services/ecs/images/linux/almalinux-latest/almalinux_9_2_x64}}'
instanceType: '{{ instanceType }}'
securityGroupId: '{{ securityGroupId }}'
vSwitchId: '{{ vSwitchId }}'
amount: 1
Outputs:
instanceId:
ValueSelector: instanceIds[0]
Type: String
在ROS中使用
同樣,依據(jù)ROS模板的語(yǔ)法,也可以在ROS中引用公共參數(shù),比如可以在imageId參數(shù)這里填入aliyun/services/ecs/centos-latest/centos_8_5_64以引用centos8的最新鏡像
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
InstanceType:
Type: String
Default: ECS.c6.large
ImageId:
Type: 'ALIYUN::OOS::Parameter::Value'
Default: aliyun/services/ecs/centos-latest/centos_8_5_64
SecurityGroupId:
Type: String
AssociationProperty: 'ALIYUN::ECS::SecurityGroup::SecurityGroupId'
AssociationPropertyMetadata:
VpcId: '${VpcId}'
VpcId:
Type: String
AssociationProperty: 'ALIYUN::ECS::VPC::VPCId'
AssociationPropertyMetadata:
RegionId: '${RegionId}'
Resources:
ECS:
Type: 'ALIYUN::ECS::InstanceGroup'
Properties:
ImageId:
Ref: ImageId
InstanceType:
Ref: InstanceType
MaxAmount: 1
SecurityGroupId:
Ref: SecurityGroupId
VpcId:
Ref: VpcId
NetworkType: vpc
Outputs:
InstanceIds:
Value:
'Fn::GetAtt':
- ECS
- InstanceIds
控制臺(tái)的imageId這里,直接填入公共參數(shù)的名稱(chēng)
?
ROS也支持在Resources里面引用公共參數(shù)
按照格式{{resolve:oos:公共參數(shù)名稱(chēng)}}
比如這里imageId填寫(xiě){{resolve:oos:aliyun/services/ecs/centos-latest/centos_8_5_64}}
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
InstanceType:
Type: String
Default: ECS.c6.large
SecurityGroupId:
Type: String
AssociationProperty: 'ALIYUN::ECS::SecurityGroup::SecurityGroupId'
AssociationPropertyMetadata:
VpcId: '${VpcId}'
VpcId:
Type: String
AssociationProperty: 'ALIYUN::ECS::VPC::VPCId'
AssociationPropertyMetadata:
RegionId: '${RegionId}'
Resources:
ECS:
Type: 'ALIYUN::ECS::InstanceGroup'
Properties:
ImageId: '{{resolve:oos:aliyun/services/ecs/centos-latest/centos_8_5_64}}'
InstanceType:
Ref: InstanceType
MaxAmount: 1
SecurityGroupId:
Ref: SecurityGroupId
VpcId:
Ref: VpcId
NetworkType: vpc
Outputs:
InstanceIds:
Value:
'Fn::GetAtt':
- ECS
- InstanceIds