当执行不同的模板却有部分相同的参数值时,基本每次需要查询相应的参数值并分别填写在不同的执行中。所以期望可以将部分的模板执行参数,存储在某一位置中,以此来实现无论执行任何模板都可以直接选择存储的参数,不需要再次查询。
在OOS中使用
OOS提供公共参数,相比较普通参数由用户自己创建和管理,公共参数由阿里云统一管理,用户可以直接使用。比如最新的系统镜像参数,以ECS所有最新的镜像为例:
比如,用户希望自己创建镜像时永远使用最新的centos8版本。如果不使用公共参数,那用户必须自己手动去查找当前最新的镜像,如centos_8_5_x64_20G_alibase_20220428.vhd,然后填入。
如果使用公共参数,用户可在OOS模板中直接引用镜像的公共参数,如以下模板,参数latestCentos8ImageId会用来接收用户传入的最新cenos8的公共参数。后续在latestCentos8ImageId参数部分填入公共参数名称即可,不需要用户自己去查找具体镜像的id,维护工作由阿里云完成。比如这里填入aliyun/services/ecs/images/linux/almalinux-latest/almalinux_9_2_x64,系统会自动解析最新的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: 实例类型
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: 交换机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: 创建实例。
Properties:
imageId: '{{ latestCentOS8ImageId }}'
instanceType: '{{ instanceType }}'
securityGroupId: '{{ securityGroupId }}'
vSwitchId: '{{ vSwitchId }}'
amount: 1
Outputs:
instanceId:
ValueSelector: instanceIds[0]
Type: String
具体填写方法:
在控制台,用户可以按照OOS公共参数的格式,手动填写。具体格式为 {{oos:公共参数名称}}, 如{{oos:aliyun/services/ecs/images/linux/almalinux-latest/almalinux_9_2_x64}}。
另外,控制台也支持单击右边的加号按钮,查询希望的公共参数。
您也可以直接在模板中按照格式写入公共参数,如:
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: 实例类型
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: 交换机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: 创建实例。
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中使用
同样,依据ROS模板的语法,也可以在ROS中引用公共参数,比如可以在imageId参数这里填入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
控制台的imageId这里,直接填入公共参数的名称
ROS也支持在Resources里面引用公共参数
按照格式{{resolve:oos:公共参数名称}}
比如这里imageId填写{{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