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

添加CloudFormation Transform段为何导致规则断言停止执行?

CloudFormation添加AWS::CodeDeployBlueGreen Transform后断言规则失效的原因

问题场景

我有一个不含Transform段的CloudFormation模板,其验证断言规则可正常执行:当BlueGreen与Lambda参数值相等时,会显示AssertDescription,且CloudFormation控制台无法点击“下一步”。模板代码如下:

AWSTemplateFormatVersion: "2010-09-09"

Parameters:
  BlueGreen:
    Type: String
    Default: Yes
    AllowedValues:
      - Yes
      - No

  Lambda:
    Type: String
    Default: No
    AllowedValues:
      - Yes
      - No

Rules:
  ValidateBlueGreenOrLambda:
    Assertions:
      - AssertDescription: "Select BlueGreen or Lambda"
        Assert: !Not [!Equals [!Ref BlueGreen, !Ref Lambda]]

Resources:
  MyBucket:
    Type: AWS::S3::Bucket

但当我为模板添加Transform: "AWS::CodeDeployBlueGreen"段后,规则断言不再执行,控制台可继续创建堆栈。请问为何添加Transform段会导致规则断言停止执行?

原因分析

当你添加AWS::CodeDeployBlueGreen Transform时,CloudFormation会将原模板转换为嵌套栈结构,以此实现蓝绿部署的资源切换逻辑。在这个转换过程中,原模板中的Rules段不会被纳入最终执行的有效模板中——该Transform的设计聚焦于蓝绿部署的资源编排,默认会跳过原模板的参数断言规则验证。

具体来说,CloudFormation在处理带有AWS::CodeDeployBlueGreen的模板时,会优先执行Transform的模板转换逻辑,原模板的Rules参数验证步骤会被直接忽略,导致你设置的断言规则不再生效。

替代方案

如果需要保留参数验证逻辑,可以尝试以下两种方式:

  • 将Rules段的验证逻辑迁移到蓝绿部署的目标栈模板中(即被AWS::CodeDeployBlueGreen引用的实际资源模板);
  • 通过Lambda自定义资源在堆栈创建/更新前实现参数验证逻辑,以此替代原生的Rules断言。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:01:55