从覆盖回退到默认参数未被视为变更?
假设我有一个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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。