REL08-BP04 使用不可变基础设施进行部署 - AWS Well-Architected Framework

REL08-BP04 使用不可变基础设施进行部署

不可变基础设施模式要求在生产系统上不会出现就地更新、安全补丁或配置更改。需要更改时,会在新的基础设施上构建架构,并将其部署到生产环境中。

最常被实施的不可变基础设施范式为 不可变服务器.这意味着,若服务器需要更新或修复,将部署新的服务器,而不是对使用中的服务器进行更新。因此,相对于通过 SSH 登录到服务器并更新软件版本,应用程序的每次更改都会在开始时将软件推送到代码库,如 git 推送。由于在不可变基础设施中不允许更改,您可以确定已部署系统的状态。不可变基础设施在本质上具有更稳定、可靠和可预测的特性,它们对软件开发和运行的多个方面进行了简化。

当您在不可变基础设施中部署应用程序时,使用 Canary 或蓝绿部署。

金丝雀部署 是将您的少量客户引导到新版本的做法,它通常在单个服务实例 (Canary) 上运行。然后,您可以深入检查生成的任何行为更改或错误。如果遇到了严重问题,您可以将 Canary 中的流量删除,并将用户发回到以前的版本。如果部署成功,您可以继续以期望的速度进行部署,同时监控更改以便发现错误,直到所有部署完成。AWS CodeDeploy 的部署配置可以配置为启用金丝雀部署。

蓝绿部署 与金丝雀部署类似,只是会并行部署一整套应用程序。您可以在两个堆栈(蓝和绿)之间轮流部署。同样,您可以将流量发送到新版本中,如果发现部署中存在问题,可以对其进行故障恢复,然后送回旧版本中。通常来说,所有流量会被一次性切换,但您也可以通过 Amazon Route 53 的加权 DNS 路由功能向每个版本发送部分流量,以加快采用新版本的速度。AWS CodeDeploy 和 AWS Elastic Beanstalk 的部署配置可以配置为启用蓝绿部署。

图中显示了使用 AWS Elastic Beanstalk 和 Amazon Route 53 进行的蓝绿部署

图 8:使用 AWS Elastic Beanstalk 和 Amazon Route 53 进行蓝绿部署

不可变基础设施的优点:

  • 减小配置偏差: 通过从基本、已知,而且版本受控的配置频繁替换服务器,基础设施会被 重置 为已知状态,以避免配置偏差。

  • 简化部署:由于无需支持升级,部署得到简化。升级即意味着新的部署。

  • 可靠的原子部署: 成功完成部署,或没有任何更改。它让您更信任部署流程。

  • 采用快速回滚和恢复流程的更安全部署: 由于之前运行的版本未发生更改,因此部署变得更安全。您可以在检测到错误时进行回滚。

  • 一致的测试和调试环境: 由于所有服务器都使用相同的映像,因此环境之间没有任何差异。同一个版本被部署到多个环境。它还防止出现不一致的环境,并且简化测试与调试。

  • 增强可扩展性: 服务器都使用一个基础映像,它们是一致、可重复的,自动扩展并不重要。

  • 简化工具链:您无需采用配置管理工具对生产软件升级进行管理,因此工具链也得到简化。也不需要在服务器上安装其他工具或代理。对基础映像进行更改,然后在经过测试后实施。

  • 提高安全性: 通过拒绝对服务器的所有更改,您可以在实例上禁用 SSH 并移除密钥。这样做可以减少攻击载体,改善您的组织的安全状况。

未建立此最佳实践暴露的风险等级:

实施指导

资源

相关文档: