CloudFormation多If条件实现:匹配Color参数枚举值为Name属性动态赋值
方案1:嵌套!If实现多分支判断
CloudFormation 原生未提供 switch/case 类的多分支语法,你可以通过嵌套 !If 函数的方式覆盖所有条件,每个!If的假值参数位置填写下一层条件判断即可,对应你的需求写法如下:
Properties: # 换行写法可读性更高 Name: !If - Red - "I choose Red" - !If - Blue - "I choose Blue" - !If - Green - "I choose Green" - "I choose Orange"
你也可以写成行内格式:
Properties: Name: !If [Red, "I choose Red", !If [Blue, "I choose Blue", !If [Green, "I choose Green", "I choose Orange"]]]
方案2:简化写法(返回值与参数强关联场景)
如果你的返回值规则固定为I choose + 颜色参数值,完全不需要写多分支判断,直接用!Sub函数拼接参数即可,后续新增颜色选项也不需要修改这段逻辑,维护成本更低:
Properties: Name: !Sub "I choose ${Color}"
可选方案:映射表实现自定义多值映射
如果不同颜色对应的返回值是自定义内容、不是简单的参数拼接,比如Red对应「生产环境资源」、Blue对应「测试环境资源」这类规则,可以用!FindInMap实现,可读性比嵌套!If更高:
- 先在模板顶层定义映射表:
Mappings: ColorNameMap: Red: ResName: "生产环境-业务服务" Blue: ResName: "测试环境-业务服务" Green: ResName: "预发环境-业务服务" Orange: ResName: "沙箱环境-业务服务"
- 资源属性直接调用映射表:
Properties: Name: !FindInMap [ColorNameMap, !Ref Color, ResName]
内容的提问来源于stack exchange,提问作者NinjaGaiden
相关产品推荐
相关产品推荐

