本文以使用Count批量创建EIP和SLB实例为例向您介绍如何在引用Count后正确使用ALIYUN::Index。
当您在模板中为资源指定Count后,ROS会对模板进行预处理,把对应资源展开为多个资源,操作资源栈时使用处理后的模板。更多信息,请参见资源(Resources)。
模板中定义的资源名为Eip,Count值为2,在ROS处理后的模板中不再有Eip资源,只有Eip[0]和Eip[1]两个资源。同理处理后的模板中只包含Slb[0]和Slb[1]资源、EipBind[0]和EipBind[1]资源,而在EipBind[0]中的ALIYUN::Index会自动转换为0,其中Fn::GetAtt:Slb,引用的资源为列表[Slb[0],Slb[1]],会转换成如下内容。InstanceId使用Fn::Select就能引用到Slb[0],同理AllocationId能引用到Eip[0],自此就把Slb[0]和Eip[0]绑定到一起。
InstanceId:
Fn::Select:
- 0
- [Slb[0],Slb[1]]
完整示例如下:
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
Count:
Type: Number
Default: 2
ZoneId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance:ZoneId
Resources:
Vpc:
Type: ALIYUN::ECS::VPC
Properties:
CidrBlock: 10.0.0.0/8
VpcName: test-resource-count
VSwitch:
Type: ALIYUN::ECS::VSwitch
Properties:
CidrBlock: 10.0.10.0/24
ZoneId:
Ref: ZoneId
VpcId:
Ref: Vpc
Eip:
Type: ALIYUN::VPC::EIP
Count:
Ref: Count
Properties:
Bandwidth: 5
Slb:
Type: ALIYUN::SLB::LoadBalancer
Count:
Ref: Count
Properties:
LoadBalancerSpec: slb.s1.small
VpcId:
Ref: Vpc
VSwitchId:
Ref: VSwitch
LoadBalancerName: test
MasterZoneId:
Ref: ZoneId
AddressType: intranet
EipBind:
Type: ALIYUN::VPC::EIPAssociation
Count:
Ref: Count
Properties:
InstanceId:
Fn::Select:
- Ref: ALIYUN::Index
- Fn::GetAtt:
- Slb
- LoadBalancerId
AllocationId:
Fn::Select:
- Ref: ALIYUN::Index
- Ref: Eip
Outputs:
LoadBalancerId:
Value:
Fn::GetAtt:
- Slb
- LoadBalancerId
EipAddresses:
Value:
Fn::GetAtt:
- Eip
- EipAddress
文档内容是否对您有帮助?