我一直在尝试思考使用 Terraform 时遇到的问题(尽管任何基础语言都可以,比如 CloudFormation、ARM 或 Google 使用的任何语言,因为据我所知,这不是一个适用于云的问题)。我在软件工程中经常使用金丝雀,除了红/黑(或蓝/绿,随便你怎么说)之外,它几乎是必备品。要构建一个场景,假设我们已经有了网络层,并且不会更改。我将使用 AWS 将其划分为可管理的块。
假设我们的 VPC 具有以下属性
- 是随机 AWS 区域中的多层 VPC
- 包含特定 VPC CIDR 中的 2 个私有子网和 1 个公共子网
- 具有连接到适当子网的路由表
- 具有 ASG(自动扩展组)的 NAT 实例,用作私有子网的默认网关
- 与可能创建的 EC2 实例一起使用的安全组
- 上述 Auto Scaling 事件的 SNS 通知
相当标准。好的,我们有了基准,假设我们的应用程序将利用 AWS 特定的服务。
- 一些已定义 LC 和 ASG 的 EC2
- 使用老式 ELB 进行负载平衡
- Redis 用于内存缓存
- 适用于任何用途的 Postgre RDS
你会如何实施这个?假设我们想测试 ALB 而不是 ELB,或者完全移除 Redis 并用 Elasticache 替换它。我们显然不想直接将其投入生产,否则就是自杀。
我是否考虑将第二个 Route53 与 Traffic Flow(据我所知是 AWS 版本的流量整形)和一组所需的基础设施结合起来,以逐渐提供负载,看看它何时或如何中断?我相信 R53 部分特别是流量加权和故障转移策略?请让我知道你的想法,几个月来一直困扰着我。