当您需要多次查询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 | 加密参数 | Secret | MyPassword1 |
关于参数的更多信息,请参见ALIYUN::ECS::InstanceGroup。
步骤一:在运维编排控制台创建参数
步骤二:编写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}}", ... } } }
- 参数类型(必填)
模板中引用参数时支持大部分函数。更多信息,请参见函数(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实例。具体操作,请参见创建资源栈。
资源栈创建成功后,您可以在资源编排控制台左侧菜单栏单击资源栈,在资源栈列表页面找到目标资源栈并单击资源栈名称,在资源栈详情页单击参数页签查看参数及取值,验证模板参数引用是否正确。