本文以ALIYUN::ECS::InstanceGroup资源为例,向您介绍如何对资源的输出列表进行遍历拼接。
ALIYUN::ECS::InstanceGroup资源用于创建多个ECS实例,创建成功后返回的参数都是以列表的形式展开。更多信息,请参见ALIYUN::ECS::InstanceGroup。
例如,ALIYUN::ECS::InstanceGroup资源的返回参数HostNames为['name1', 'name2'],PrivateIps为['192.168.1.1', 192.168.1.2'],经过遍历拼接后的结果为['name1:192.168.1.1', 'name2:192.168.1.2']。
您可以在模板的Output部分先使用内部函数Fn::GetAtt获取对应资源的属性值,再使用内部函数Fn::MergeMapToList将多个Map合并为一个以Map为元素的列表,最后再使用内部函数Fn::Jq循环拼接成需要的格式。
ROSTemplateFormatVersion: '2015-09-01'
Outputs:
testMapping:
Value:
Fn::Jq:
- All
- .[] | "\(.a):\(.b)"
- Fn::MergeMapToList:
- a:
Fn::GetAtt:
- InstanceGroup # 模板中创建的资源部分已省略,下同。
- HostNames
- b:
Fn::GetAtt:
- InstanceGroup
- PrivateIps
完整模板示例
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
VpcId:
Description:
en: The VPC id to create ecs instance.
Default: Null
Required: false
Label:
zh-cn: 专有网络ID
en: VpcId
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
ImageId:
AssociationPropertyMetadata:
DefaultFilter:
OSType: linux
ImageName: aliyun_3_**
ImageOwnerAlias: system
InstanceType: ${InstanceType}
SupportedImageOwnerAlias:
- system
- self
- others
Description:
zh-cn: 用于启动ECS实例的镜像ID。包括公共镜像、自定义镜像和云市场镜像。
en: Image ID to create ecs instance.
Default: Null
Required: false
Label:
zh-cn: 用于启动ECS实例的镜像ID
en: ImageId
AssociationProperty: ALIYUN::ECS::Image::ImageId
Type: String
VSwitchId:
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
Description:
en: The vSwitch Id to create ecs instance.
Default: Null
Required: false
Label:
zh-cn: 交换机ID
en: VSwitchId
AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
Type: String
Password:
Description:
en: Password of created ecs instance. Must contain at least 3 types of special character, lower character, upper character, number.
Default: Null
Required: false
Label:
zh-cn: ECS实例登录密码
en: Password
AssociationProperty: ALIYUN::ECS::Instance::Password
Type: String
InstanceType:
AssociationPropertyMetadata:
ZoneId: ${ZoneId}
Description:
en: Ecs instance supported instance type, make sure it should be correct.
Default: ecs.g7.xlarge
Required: true
Label:
zh-cn: ECS实例规格
en: InstanceType
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
Type: String
MaxAmount:
Description:
en: Max number of instances to create, should be bigger than 'MinAmount' and smaller than 1000.
Default: 2
Required: true
MaxValue: 1000
Label:
zh-cn: 实例数量
MinValue: 0
Type: Number
SystemDiskCategory:
AssociationPropertyMetadata:
InstanceType: ${InstanceType}
ZoneId: ${ZoneId}
Description:
en: Category of system disk. Default is cloud_efficiency. support cloud|cloud_efficiency|cloud_ssd|cloud_essd|ephemeral_ssd|cloud_auto|cloud_essd_entry.Old instances will not be changed.
Default: cloud_essd
Required: false
Label:
zh-cn: 系统盘类型
en: SystemDiskCategory
AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
AllowedValues:
- cloud_essd
- cloud_efficiency
- cloud_ssd
- cloud
- cloud_auto
- cloud_essd_entry
Type: String
ZoneId:
Description:
en: |-
The ID of the zone to which the instance belongs. For more information,
call the DescribeZones operation to query the most recent zone list.
Default value is empty, which means random selection.
Default: Null
Required: false
Label:
zh-cn: 可用区ID
en: ZoneId
AssociationProperty: ZoneId
Type: String
SystemDiskSize:
Description:
en: 'Disk size of the system disk, range from 20 to 500 GB. If you specify with your own image, make sure the system disk size bigger than image size. '
Default: 40
Required: false
Label:
zh-cn: 系统盘大小
en: SystemDiskSize
MinValue: 20
Type: Number
SystemDiskPerformanceLevel:
AssociationPropertyMetadata:
Visible:
Condition:
Fn::Equals:
- ${SystemDiskCategory}
- cloud_essd
Description:
zh-cn: 创建ESSD云盘作为系统盘使用时,设置云盘的性能等级。
en: 'The performance level of the enhanced SSD used as the system disk.Default value: PL1. Valid values:PL0: A single enhanced SSD delivers up to 10,000 random read/write IOPS.PL1: A single enhanced SSD delivers up to 50,000 random read/write IOPS.PL2: A single enhanced SSD delivers up to 100,000 random read/write IOPS.PL3: A single enhanced SSD delivers up to 1,000,000 random read/write IOPS.'
Default: PL0
Required: false
AllowedValues:
- PL0
- PL1
- PL2
- PL3
Label:
zh-cn: ESSD系统盘性能等级
Type: String
SecurityGroupId:
Type: String
AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
AssociationPropertyMetadata:
VpcId: ${VpcId}
Resources:
InstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
Properties:
VpcId:
Ref: VpcId
ImageId:
Ref: ImageId
VSwitchId:
Ref: VSwitchId
Password:
Ref: Password
InstanceType:
Ref: InstanceType
MaxAmount:
Ref: MaxAmount
SecurityGroupId:
Ref: SecurityGroupId
SystemDiskCategory:
Ref: SystemDiskCategory
ZoneId:
Ref: ZoneId
SystemDiskSize:
Ref: SystemDiskSize
SystemDiskPerformanceLevel:
Ref: SystemDiskPerformanceLevel
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
- VpcId
- VSwitchId
- SecurityGroupId
Label:
default:
zh-cn: 网络配置
en: Network Configuration
- Parameters:
- InstanceType
- ImageId
- MaxAmount
Label:
default:
zh-cn: 实例与镜像
en: Instance and Image
- Parameters:
- SystemDiskCategory
- SystemDiskPerformanceLevel
- SystemDiskSize
Label:
default:
zh-cn: 系统盘设置
en: System Disk Configuration
- Parameters:
- Password
DefaultExpand: false
Label:
default:
zh-cn: 管理设置
en: Manage Configuration
Outputs:
testMapping:
Value:
Fn::Jq:
- All
- .[] | "\(.a):\(.b)"
- Fn::MergeMapToList:
- a:
Fn::GetAtt:
- InstanceGroup
- HostNames
- b:
Fn::GetAtt:
- InstanceGroup
- PrivateIps
文档内容是否对您有帮助?