我们有这个CFT模板。
不存在非产品的映射,因此存在If
条件。但是,当我们应用脚本时,如果condIsProd
的计算结果为false,则FindInMap函数仍会计算并且使CreateChangeSet
进程崩溃。
SecurityGroupEgress:
Fn::If:
- condIsProd
- - IpProtocol: tcp
FromPort: !FindInMap [ mapSplunkEndpoints, !Ref paramEnvironmentType, port1 ]
ToPort: !FindInMap [ mapSplunkEndpoints, !Ref paramEnvironmentType, port1 ]
CidrIp: !Join ["/", [ !FindInMap [ mapSplunkEndpoints, !Ref paramEnvironmentType, port1 ], "32"]]
- - IpProtocol: tcp
FromPort: !FindInMap [ mapSplunkEndpoints, !Ref paramEnvironmentType, port2 ]
ToPort: !FindInMap [ mapSplunkEndpoints, !Ref paramEnvironmentType, port2 ]
CidrIp: !Join ["/", [ !FindInMap [ mapSplunkEndpoints, !Ref paramEnvironmentType, port2 ], "32"]]
这没有意义,因为条件为假,所以为什么仍然要评估嵌套函数。
有什么方法可以防止FindInMap
评估条件是否为假?