我正在使用 Cloudformation 来构建负载平衡堆栈。
我担心的是,每次重新创建堆栈时,ELB 公共 URL 都会发生变化,这将需要更改网站的路由 53 域别名,以指向新的 ELB URL。
我可以添加 Cloudformation 配置来自动执行此操作,但我担心由于 DNS 传播问题,每次重新创建堆栈时站点都会停机几分钟。
据我了解,R53 将在大约 60 秒内更新别名,但缓存 DNS 服务器可能不遵守 TTL,可能需要几分钟才能更新。
一种选择是一起运行新旧堆栈,但每个 VPC 中的 RDS 实例都需要以某种方式同步。
此外,Cloudformation 中似乎没有将现有 ELB 与堆栈关联的选项,因此将 ELB 与堆栈分开似乎不是一个选择。
那么正确的解决方案是什么?在使用新建的 CF 堆栈替换生产堆栈时,如何避免任何明显的停机时间。
答案1
您可以使用堆栈策略来阻止堆栈更新来更新 ELB 资源。
文档在这里:http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/protect-stack-resources.html
例子:
{
"Statement" : [
{
"Effect" : "Deny",
"Action" : "Update:*",
"Principal": "*",
"Resource" : "*",
"Condition" : {
"StringEquals" : {
"ResourceType" : ["AWS::ElasticLoadBalancing::LoadBalancer"]
}
}
},
{
"Effect" : "Allow",
"Action" : "Update:*",
"Principal": "*",
"Resource" : "*"
}
]
}