You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CloudFormation模板中能否对引用的参数值执行加减运算?

结论

你想要的直接在Parameter的Default字段通过内置函数引用其他参数做计算的需求,原生CloudFormation不支持。
原因是CloudFormation的参数解析阶段优先级最高,参数的默认值必须是静态字面量,这时候其他参数的取值还未完成校验、内置函数也还没到执行时机,因此无法在Default字段中使用!Ref、!Add这类动态逻辑。


替代方案

场景1:不需要让使用者自定义MaxPreparedCapacity值

不用单独定义MaxPreparedCapacity为Parameter,直接在你需要用到该值的资源属性中内联计算逻辑即可:

# 示例:在Auto Scaling组配置中直接计算使用
Resources:
  MyAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      DesiredCapacity: !Ref DesiredCapacity
      MaxPreparedCapacity: !Add
        - !Ref DesiredCapacity
        - 2
      # 其余属性省略

场景2:需要允许使用者自定义MaxPreparedCapacity,同时保留默认等于DesiredCapacity+2的逻辑

可以结合可选参数+模板规则+条件判断实现,需要先开启AWS::LanguageExtensions扩展支持规则校验:

# 开启语言扩展支持
Transform: AWS::LanguageExtensions

Parameters:
  DesiredCapacity:
    Type: Number
    Default: 2
  MaxPreparedCapacity:
    Type: Number
    Description: 可选参数,输入值必须大于等于DesiredCapacity+2,留空则默认取DesiredCapacity+2
    Default: ''

# 校验规则:如果用户输入了MaxPreparedCapacity,必须满足最小值要求
Rules:
  ValidateMaxCapacityRule:
    RuleCondition: !Not [!Equals [!Ref MaxPreparedCapacity, '']]
    Assertions:
      - Assert: !GreaterOrEqual [!Ref MaxPreparedCapacity, !Add [!Ref DesiredCapacity, 2]]
        AssertDescription: MaxPreparedCapacity不能小于DesiredCapacity+2

# 条件判断:用户是否输入了自定义的MaxPreparedCapacity
Conditions:
  HasCustomMaxCapacity: !Not [!Equals [!Ref MaxPreparedCapacity, '']]

# 在资源中使用该值
Resources:
  MyAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      DesiredCapacity: !Ref DesiredCapacity
      MaxPreparedCapacity: !If
        - HasCustomMaxCapacity
        - !Ref MaxPreparedCapacity
        - !Add [!Ref DesiredCapacity, 2]
      # 其余属性省略

内容的提问来源于stack exchange,提问作者Bert Cushman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:45:00