当您需要多次查询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
- InstanceIds
ROS模板引用的参数会基于OOS参数类型进行转换。当前OOS参数支持String和StringList类型,如果引用了StringList类型参数,ROS会将其转换为List类型在模板中使用。例如:类型为StringList的参数SecurityGroupIds,值为sg-group1,sg-group2。当您创建ALIYUN::ECS::InstanceGroup资源时,SecurityGroupIds取值将解析为["sg-group1", "sg-group2"]。
步骤三:在资源编排控制台创建资源栈
在资源编排控制台使用步骤二中的示例模板创建资源栈,创建一组ECS实例。具体操作,请参见创建资源栈。
资源栈创建成功后,您可以在资源编排控制台左侧菜单栏单击资源栈,在资源栈列表页面找到目标资源栈并单击资源栈名称,在资源栈详情页单击参数页签查看参数及取值,验证模板参数引用是否正确。