調用內建函式Fn::MergeMapToList,將多個Map合并成一個以Map為元素的列表。
函式宣告
JSON
{ "Fn::MergeMapToList": [ { "key_1": ["key_1_item_1", "key_1_item_2", ...] }, { "key_2": ["key_2_item_1", "key_2_item_2", ...], }, ... ] }YAML
完整函數的文法。
Fn::MergeMapToList: - key_1: - key_1_item_1 - key_1_item_2 - ... - key_2: - key_2_item_1 - key_2_item_2 - ... - ...縮寫形式。
!MergeMapToList [{key_1: [key_1_item_1, key_1_item_2, ..]}, {key_2: [key_2_item_1, key_2_item_2, ...]}, ...]
參數資訊
[{key_1: [key_1_item_1, key_1_item_2, ..]}, {key_2: [key_2_item_1, key_2_item_2, ...]},...]:將要合并的源列表,列表中包含多個Map,每個Map的Value都必須是一個列表。
合并規則:
分別取源列表中每個Map中的Key和第一個Value,放入合并後列表的第一個Map中。
再分別取源列表中每個Map中的Key和第二個Value,放入合并後列表的第二個Map中;以此類推。
最終合并後的列表長度是由源列表中Map的最大Value的長度決定。如果存在源列表中Map的Value長度不一致時,會重複取Value長度較小的列表的最後一個元素, 使最終合并之後列表中每個Map的元素個數都一樣。
傳回值
以合并後的Map為元素的列表。
使用樣本
合并三個Map,每個Map中索引值對應的列表長度一致。
Fn::MergeMapToList: - key_1: - key_1_item_1 - key_1_item_2 - key_2: - key_2_item_1 - key_2_item_2 - key_3: - key_3_item_1 - key_3_item_2合并結果如下:
- key_1: key_1_item_1 key_2: key_2_item_1 key_3: key_3_item_1 - key_1: key_1_item_2 key_2: key_2_item_2 key_3: key_3_item_2合并三個Map,每個Map中索引值對應的列表長度不一致。
Fn::MergeMapToList: - key_1: - key_1_item_1 - key_1_item_2 - key_2: - key_2_item_1 - key_2_item_2 - key_2_item_3 - key_3: - key_3_item_1 - key_3_item_2合并結果如下:
- key_1: key_1_item_1 key_2: key_2_item_1 key_3: key_3_item_1 - key_1: key_1_item_2 key_2: key_2_item_2 key_3: key_3_item_2 - key_1: key_1_item_2 key_2: key_2_item_3 key_3: key_3_item_2
完整樣本
以下模板樣本中,把WebServer中建立的所有執行個體,都加入到一個負載平衡的虛擬伺服器組中。
ROSTemplateFormatVersion: '2015-09-01'
Resources:
WebServer:
Type: ALIYUN::ECS::InstanceGroupClone
Properties:
SourceInstanceId: i-xxxxx
Password: Hello****
MinAmount: 1
MaxAmount: 1
CreateVServerGroup:
Type: ALIYUN::SLB::VServerGroup
Properties:
LoadBalancerId: lb-****
VServerGroupName: VServerGroup-****
BackendServers:
!MergeMapToList
- Port:
- 6666
- 9090
- 8080
- ServerId: !GetAtt WebServer.InstanceIds
- Weight:
- 20
- 100