资源(resources) V3
描述堆栈中每一个资源的属性和依赖关系。一个资源可以被其他资源所引用。
语法
资源部分由资源名称和资源描述组成。所有资源描述都被括在括号里。如果您声明多个资源,则可用逗号将它们分隔开。以下代码段描述了 resources 的语法结构:
"resources" : {
"resource1": {
"type": "资源类型",
"count": 资源数量,
"properties": {
资源属性
},
"dependsOn": [资源依赖列表]
},
"resource2": {
"type": "资源类型",
"count": 资源数量,
"properties": {
资源属性
},
"dependsOn": [资源依赖列表]
}
}
资源名称
资源名称 在模板中具有唯一性。可使用资源名称在模板的其他部分中引用资源。
资源类型
资源类型标识您正在声明的资源的类型。有关所有资源的列表,请参阅 云编排资源。
资源数量
此为可选字段,利用此字段可以创建多份相同规格的资源实例,需要注意的是,指定count后COS会对模板进行预处理,把该资源展开成多个资源。 操作资源栈时使用处理后的模板。 例如:资源名为A,其count值为3。在处理后的模板中,没有A资源,取而代之的是A[0]、A[1]和A[2]这3个资源。
// 处理前的模板
"resources" : {
"A": {
count: 3
}
}
// 处理后的模板
"resources" : {
"A[0]": {
...
},
"A[1]": {
...
}
"A[2]": {
...
}
}
指定了count的资源的属性(properties)中可以使用伪参数BCE::Index,在预处理的时候会被替换为相应的数值。例如,A[0]使用的BCE::Index会被替换为0,A[1]使用的BCE::Index会被替换为1。模板其他地方不能使用BCE::Index。 如果指定了count的资源出现在dependsOn、Ref中,会被展开。 下面描述一个场景:创建了2个EIP和2台BCC,并把EIP与BCC逐一绑定。
"bcc": {
"type": "BCE::BCC::Instance",
"count": 2,
"properties": {
"imageId": "m-xxx",
"billing": {
"paymentTiming": "Postpaid"
},
"spec": "bcc.g3.c1m1",
"rootDiskSizeInGb": 40,
"rootDiskStorageType": "ssd",
"name": "bcc_instance_name"
}
},
"eip": {
"type": "BCE::EIP::Instance",
"count": 2,
"properties": {
"bandwidthInMbps": 5
}
},
"bcc_eip": {
"type": "BCE::BCC::EipAttachment",
"count": 2,
"properties": {
"bccInstanceId": {
"Ref": "bcc[BCE::Index].bccInstanceId"
},
"eip": {
"Ref": "eip[BCE::Index].eip"
}
},
// 此处显式声明依赖可以不写
"dependsOn": ["bcc[BCE::Index]", "eip[BCE::Index]"]
}
根据上面描述的展开规则处理之后的模板如下:
"bcc[0]": {
"type": "BCE::BCC::Instance",
"properties": {
"imageId": "m-8S2nu8s3",
"billing": {
"paymentTiming": "Postpaid"
},
"spec": "bcc.g3.c1m1",
"rootDiskSizeInGb": 40,
"rootDiskStorageType": "ssd",
"name": "bcc_instance_name"
}
},
"bcc[1]": {
"type": "BCE::BCC::Instance",
"properties": {
// 省略
}
},
"eip[0]": {
"type": "BCE::EIP::Instance",
"properties": {
"bandwidthInMbps": 5
}
},
"eip[1]": {
"type": "BCE::EIP::Instance",
"properties": {
// 省略
}
},
"bcc_eip[0]": {
"type": "BCE::BCC::EipAttachment",
"properties": {
"bccInstanceId": {
"Ref": "bcc[0].bccInstanceId"
}
"eip": {
"Ref": "eip[0].eip"
}
},
"dependsOn": ["bcc[0]", "eip[0]"]
},
"bcc_eip[1]": {
"type": "BCE::BCC::EipAttachment",
"properties": {
"bccInstanceId": {
"Ref": "bcc[1].bccInstanceId"
}
"eip": {
"Ref": "eip[1].eip"
}
},
"dependsOn": ["bcc[1]", "eip[1]"]
}
资源属性
资源属性是可以为资源指定的附加选项。例如,对于每个百度云BCC实例,必须为该实例指定一个 Image ID和spec。如以下代码段所示:
"resources" : {
"bcc": {
"type": "BCE::BCC::Instance",
"properties": {
"imageId": {
"Ref": "imageId"
},
"spec": {
"Ref": "spec"
}
}
}
}
如果资源不需要声明任何属性,那么您可以忽略该资源的属性部分。
资源依赖列表
此字段是可选字段,用来定义此资源依赖的其他资源名称;依赖其他资源,代表本资源会在其他资源创建完成后再创建。 例如:
// 代表只有当B和C都创建完成后,A才会创建。
"resources" : {
"A": {
...
"dependsOn": ["B","C"]
},
"B":{...},
"C":{...},
}
除了用户显式的定义依赖关系,COS也会通过Ref等函数自动推断依赖关系。 下面描述一个场景:创建了EIP和BCC,并把EIP与BCC绑定;本场景中虽然并未显式的定义bcc_eip 依赖 bcc和eip,但是由于Ref函数引用了bcc和eip,COS服务预处理模版会自动添加依赖。
// 代表只有当B和C都创建完成后,A才会创建。
"resources" : {
"bcc": {
"type": "BCE::BCC::Instance",
"properties": {
"imageId": "m-xxx",
"spec": "bcc.g3.c1m1",
"billing": {
"paymentTiming": "Postpaid"
}
}
},
"eip": {
"type": "BCE::EIP::Instance",
"properties": {
"bandwidthInMbps": 5
}
},
"bcc_eip":{
"type": "BCE::BCC::EipAttachment",
"properties":{
"bccInstanceId":{
"Ref": "bcc.id"
},
"eip": {
"Ref": "eip.eip"
}
}
}
}
示例
以下示例显示的是典型的资源声明。
{
"resources": {
"bcc": {
"type": "BCE::BCC::Instance",
"properties": {
"imageId": {
"Ref": "imageId"
},
"spec": {
"Ref": "spec"
},
"name": {
"Ref": "bccName"
},
"hostname": {
"Ref": "hostname"
},
"rootDiskStorageType": {
"Ref": "rootDiskStorageType"
},
"rootDiskSizeInGb": {
"Ref": "rootDiskSizeInGb"
},
"zoneName": {
"Ref": "zoneName"
},
"billing": {
"Ref": "bccBilling"
},
"subnetId": {
"Ref": "subnetId"
},
"securityGroupIds": {
"Ref": "securityGroupIds"
},
"keypairId": {
"Ref": "keypairId"
}
}
}
}
}