![如果您无法更改 AWS Beanstalk 实例的 RDS 端点,如何进行蓝/绿部署?](https://linux22.com/image/675954/%E5%A6%82%E6%9E%9C%E6%82%A8%E6%97%A0%E6%B3%95%E6%9B%B4%E6%94%B9%20AWS%20Beanstalk%20%E5%AE%9E%E4%BE%8B%E7%9A%84%20RDS%20%E7%AB%AF%E7%82%B9%EF%BC%8C%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E8%93%9D%2F%E7%BB%BF%E9%83%A8%E7%BD%B2%EF%BC%9F.png)
据我所知,无法更改现有 Elastic Beanstalk (EB) 实例的 Amazon RDS (RDS) 端点?
如果是这样的话,那么您就不能将您的代码部署到阶段服务器、阶段数据库、进行测试,然后提升为使用生产数据库吗?
那么,如何部署阶段而不需要针对产品数据库进行测试呢?
考虑到产品和阶段,我认为策略应该是这样的:
- 快照产品 RDS
- 使用新代码创建阶段并将其指向快照
- 质量保证阶段
- 将阶段指向生产 RDS
- 更改负载均衡器以将流量发送到阶段
答案1
我对 Beanstalk 不太熟悉,因此对此持怀疑态度。
据我了解,A/B 部署策略的工作原理如下:
- A 正在生产中。
- B 正在准备中。
- 部署到 B 直到您喜欢它。
- 制作 B 产品,将 A 转入阶段。
- 转到 1
数据库的状态非常复杂,不适合进行这样的交换。据我所知,上面的第 3 步的完成方式有点像...
- 将 A 点快照放入 B 点。
- 在 B 上运行迁移。
- 运行测试系列来验证其是否有效。
- 如果测试失败,则转到 1 并重复。否则,继续。
- 在 B 集群提升期间,将已知良好的迁移步骤应用到生产数据库。
这里比较棘手的部分是数据库间接访问。为此,我建议使用 Route53。在部署过程中:
- 停止所有测试活动,并对 B 集群进行代码更新。
- 更新 B-Database 记录以指向 prod-database。
- 在部署期间,运行迁移。
- 将 B 集群带入生产环境,它将使用现已更新的集群。
- 停止A集群。
- 更新 A 数据库记录以指向 Staging。
- 将产品快照放到测试数据库上。
你明白了。
答案2
在我看来,您的想法是 CI/CD 工作流。使用 AWS Beanstalk,您可以使用 来实现该功能(您的想法)env.yml
。以下是关于env.yml
进一步阅读的内容https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environment-cfg-manifest.html
我希望这对你有帮助。