REL08-BP04 使用不可变基础架构进行部署 - AWS Well-Architected 框架

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

REL08-BP04 使用不可变基础架构进行部署

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

遵循不可变基础设施部署策略,以提高工作负载部署的可靠性、一致性和可重复性。

期望结果:使用不可变基础设施,就禁止为了在工作负载中运行基础设施资源而进行就地修改。相反,当需要更改时,会将一组包含所有必要更改的新基础设施资源与现有资源并行部署。会自动验证此部署,如果成功,流量将逐渐转移到新的资源集。

此部署策略适用于软件更新、安全补丁、基础设施更改、配置更新和应用程序更新等。

常见反模式:

  • 对正在运行的基础设施资源实施就地更改。

建立此最佳实践的好处:

  • 提高环境间的一致性:由于环境间的基础设施资源没有差异,可以提高一致性并简化测试。

  • 减小配置偏差:通过使用已知且版本受控的配置替换基础设施资源,基础设施被设置为已知经过测试的可信状态,避免配置偏差。

  • 采用可靠的原子部署:部署要么成功完成,要么没有任何更改,从而提高部署过程的一致性和可靠性。

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

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

  • 增强的安全状况:通过不允许更改基础架构,可以禁用远程访问机制(例如SSH)。这样做可以减少攻击向量,改善组织的安全态势。

在未建立这种最佳实践的情况下暴露的风险等级:

实施指导

自动化

在定义不可变基础设施部署策略时,建议尽可能使用自动化功能来提高可重复性,并最大限度地减少出现人为错误的可能性。有关更多详细信息,请参阅 REL08-BP05 通过自动化部署变更和自动执行安全、无需动手的部署。

借助基础设施即代码(IaC),基础设施预置、编排和部署步骤以编程、描述性和声明性的方式进行定义,并存储在源代码控制系统中。利用基础设施即代码可以更轻松地自动化基础设施部署,并有助于实现基础设施的不可变性。

部署模式

当需要更改工作负载时,不可变基础设施部署策略要求部署一组新的基础设施资源,包括所有必要的更改。这组新资源必须遵循可最大限度地减少对用户影响的推出模式,这一点非常重要。此部署有两种主要策略:

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

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

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

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

偏差检测

偏差定义为导致基础设施资源的状态或配置与预期不同的任何更改。任何类型非受管配置更改都与不可变基础设施的概念背道而驰,因此应加以检测和修复,以便成功实施不可变基础设施。

实施步骤

  • 禁止就地修改正在运行的基础设施资源。

  • 自动部署基础设施资源,以提高可重复性并最大限度地减少出现人为错误的可能性。

    • AWS 白皮书简介中所述,自动化是服务的基石,并且在所有 AWS 服务、功能和产品中均得到内部支持。 DevOps

    • 预先烘焙您的 Amazon 系统映像 (AMI) 可以加快启动它们的时间。EC2Image Builder 是一项完全托管的 AWS 服务,可帮助您自动创建、维护、验证、共享和部署自定义、安全以及 up-to-date Linux 或 Windows 定制版AMI。

    • 一些支持自动化的服务包括:

      • AWS Elastic Beanstalk是一项用于快速部署和扩展使用 Java 开发的 Web 应用程序的服务。 NET、、Node.js PHP、Python、Ruby、Go 和 Docker 在熟悉的服务器上,例如 Apache、NGINX、Passenger 和。IIS

      • AWS Proton帮助平台团队连接和协调开发团队在基础设施配置、代码部署、监控和更新方面所需的所有不同工具。 AWS Proton 支持自动化基础设施即代码配置和部署无服务器和基于容器的应用程序。

    • 利用基础设施即代码可以轻松实现基础设施部署的自动化,并有助于实现基础架构的不可变性。 AWS 提供的服务支持以编程、描述性和声明性的方式创建、部署和维护基础架构。

      • AWS CloudFormation帮助开发人员以有序且可预测的方式创建 AWS 资源。资源使用JSON或YAML格式写入文本文件。模板需要特定的语法和结构,具体取决于创建和管理的资源类型。您可以在任何代码编辑器中JSON或YAML使用任何代码编辑器创作资源 AWS Cloud9,例如将其签入版本控制系统,然后以安全、可重复的方式 CloudFormation 构建指定的服务。

      • AWS Serverless Application Model (AWS SAM) 是一个开源框架,可用于在其上 AWS构建无服务器应用程序。 AWS SAM 与其他 AWS 服务集成,是的扩展 AWS CloudFormation。

      • AWS Cloud Development Kit (AWS CDK) 是一个开源软件开发框架,可使用熟悉的编程语言对云应用程序资源进行建模和预置。你可以使用 AWS CDK Python TypeScript、Java 和对应用程序基础架构进行建模。 NET。 AWS CDK AWS CloudFormation 在后台使用,以安全、可重复的方式配置资源。

      • AWS Cloud Control API引入了一组常用的 “创建”、“读取”、“更新”、“删除” 和 “列出” (CRUDL),APIs以帮助开发人员以简单一致的方式管理其云基础架构。Cloud Control API 通用版APIs允许开发人员统一管理第三方服务的 AWS 生命周期。

  • 实施能够最大限度减少对用户的影响的部署模式。

  • 检测配置或状态偏差。有关更多详细信息,请参阅检测堆栈和资源的非托管配置更改

资源

相关最佳实践:

相关文档:

相关视频: