У нас есть этот шаблон CFT.
Отображение для non-prod не существует, следовательно, условие 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
оценить, если условие ложно