从覆盖回退到默认参数未被视为变更?

编程语言 2026-07-10

假设我有一个YAML模板ex1.yaml:

---
Parameters:
  AdminCIDR:
    Description: Hole in firewall for SSH on port 22
    Type: String
    MinLength: '9'
    MaxLength: '18'
    Default: 127.0.0.1/32
    AllowedPattern: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})
    ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.

Resources:
  SSHSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Enable SSH access via port 22
      SecurityGroupIngress:
        - CidrIp: !Ref AdminCIDR
          FromPort: 22
          IpProtocol: tcp
          ToPort: 22

我通过命令行部署一个堆栈,并覆盖参数AdminCIDR:

aws cloudformation deploy --stack-name ex1 --template ex1.yaml --parameter-overrides AdminCIDR=$(curl -s https://api.ipify.org)/32

如果随后再次部署,但不进行覆盖,是否不会检测到变更?预期的行为是CIDR会回落到默认值吗?

aws cloudformation deploy --stack-name ex1 --template ex1.yaml

这个预期行为是不合理吗,还是说一旦我使用了覆盖,即使我把它改回默认值,也被迫始终进行覆盖?

我知道有很多服务可以回答这个问题,但那样问题就会变成私密的。

解决方案

CloudFormation是一种声明式的DSL,也就是说你声明你打算让它发生的事情。一旦你使用自定义CIDR块创建了堆栈,就不可能不表达某些变更而期望有变化。正如你所指出的,一旦堆栈创建完成,改变参数值的唯一方法是使用参数覆盖标志。
如文档所述,默认值是……
A value of the appropriate type for the template to use if no value is specified when a stack is created.

希望这对你有帮助。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章