亚马逊AWS官方博客

使用 AWS Resilience Hub 衡量和提升应用程序弹性

很高兴向大家宣布,我们会立即推出 AWS Resilience Hub。这是一项新的 AWS 服务,旨在帮助您定义、跟踪和管理应用程序的弹性。

您正在构建和管理弹性应用程序来为客户提供服务。但构建分布式系统很困难,将它们维持在运行状态则更加困难。问题不在于系统是否会出故障,而是何时会出故障。您需要为此做好准备。

弹性目标通常用两个指标来衡量:恢复时间目标 (RTO),即从故障中恢复所需的时间,以及恢复点目标 (RPO),即事件发生后数据可能丢失的最长时段。根据您的业务和应用程序,这些指标能够以秒、分、小时或天为单位进行衡量。

借助 titletitleAWS Resilience Hub,您可以为每个应用程序定义 RTO 和 RPO 目标。然后,该服务会评估应用程序的配置,确保其符合您的要求。该服务可提供切实可行的建议和弹性评分,帮助您跟踪应用程序在一段时间内的弹性进度。Resilience Hub 提供能通过 AWS 管理控制台访问的可自定义单一控制面板体验。用户可在其中运行评估、执行预构建的测试以及配置告警,以便发现问题并提醒操作员。

AWS Resilience Hub 可发现由 AWS CloudFormation 部署的应用程序(包括 SAMCDK 应用程序),包括跨区域和跨账户堆栈。Resilience Hub 还可从 Resource Groups标签中发现应用程序,或者从 AWS Service Catalog AppRegistry 已定义的应用程序中进行选择。

此处的术语“应用程序”不仅指应用程序软件或代码,还指托管应用程序的整个基础设施堆栈:网络、虚拟机、数据库等。

弹性评估和建议
AWS Resilience Hub 的弹性评估功能利用 AWS Well-Architected Framework 中的最佳实践来分析应用程序的组件,发现由基础设施设置不完整、配置错误导致的潜在弹性弱点,或发现进一步改进配置的机会。Resilience Hub 提供切实可行的建议来提升应用程序的弹性。

例如,Resilience Hub 可验证应用程序的 Amazon Relational Database Service (RDS)Amazon Elastic Block Store (EBS)Amazon Elastic File System (Amazon EFS) 备份计划是否足以实现您在弹性策略中定义的应用程序的 RPO 和 RTO 目标。如果无法实现,该服务会提出改进建议来实现 RPO 和 RTO 目标。

弹性评估功能会生成代码片段,帮助您创建恢复程序,作为应用程序的 AWS Systems Manager 文档,即标准操作程序 (SOP)。此外,Resilience Hub 还会生成建议的 Amazon CloudWatch 监视器和告警列表,帮助您在部署后快速识别应用程序弹性状态的任何变化。

持续弹性验证
在更新应用程序和 SOP 以纳入弹性评估的建议之后,您可以使用 Resilience Hub 测试和验证应用程序是否实现了弹性目标,然后再将其发布到生产环境。Resilience Hub 已与 AWS Fault Injection Simulator (FIS) 集成。后者是一项完全托管式服务,用于在 AWS 上运行故障注入实验。FIS 提供真实故障的故障注入模拟,例如网络错误或与数据库的开放连接过多。Resilience Hub 还为开发团队提供 API,让其弹性评估和测试集成到 CI/CD 管道中,以便进行持续的弹性验证。将弹性验证集成到 CI/CD 管道中,有助于确保应用程序底层基础设施的每一次更改都不会损害其弹性。

可见性
AWS Resilience Hub 通过其控制面板提供整体应用程序组合弹性状态的
综合视图。为帮助您跟踪应用程序的弹性,Resilience Hub 会聚合并
整理来自 Amazon CloudWatchAWS Fault Injection Simulator (FIS) 等服务的弹性事件(例如,数据库不可用或弹性验证失败)、提示以及洞察。Resilience Hub 还会生成弹性评分,指出建议的弹性测试、告警和恢复 SOP 的实施水平。此评分可用于衡量弹性随着时间变化而提高的情况。

直观的控制面板可发送问题提示,建议补救步骤并提供管理应用程序弹性的单一位置。例如,当 CloudWatch 告警触发时,Resilience Hub 会提醒您并建议要部署的恢复程序。

AWS Resilience Hub 实际应用
我开发了由单个 EC2 实例和 RDS 数据库组成的非弹性应用程序。我希望利用 Resilience Hub 来评估此应用程序。在我的 GitHub 存储库中,可以找到用于在您的 AWS 账户上部署此应用程序的 CDK 脚本。只需安装 CDK v2 (npm install -g aws-cdk@next) 并部署堆栈 (cdk bootstrap && cdk deploy --all)。

使用 Resilience Hub 有四个步骤:

  • 首先需添加要评估的应用程序。可以从 CloudFormation 堆栈、AppRegistryResource Groups 或其他现有应用程序开始。
  • 其次,定义弹性策略。该策略文档介绍了可能影响应用程序、基础设施、整个可用区或整个 AWS 区域的事件的 RTO 和 RPO 目标。
  • 第三,评估应用程序。该评估会列出策略违例(如有)并提供一系列建议,例如创建 CloudWatch 告警、标准操作程序文档或故障注入实验模板。
  • 最后,可以设置提出的任何建议或定期运行实验,以此验证应用程序的弹性状况。

准备
首先,打开浏览器并导航到 AWS 管理控制台。选择 AWS Resilience Hub,然后选择 Add application(添加应用程序)。

Resilience Hub 添加应用程序

我的示例应用程序使用三个 CloudFormation 堆栈进行部署:网络、数据库和 EC2 实例。 选择这三个堆栈,然后在屏幕底部选择 Next(下一步):

Resilience Hub 添加 CloudFormation 堆栈

Resilience Hub 会检测到由这些堆栈创建的资源,这些资源可能会影响应用程序的弹性。然后选择要纳入评估或从中排除的资源,然后单击 Next(下一步)。在此示例中,我选择了 NAT 网关、数据库实例和 EC2 实例。

Resilience Hub 选择资源

我创建了弹性策略并将其关联到此应用程序。可以从策略模板中进行选择,也可以从头开始创建策略。策略包括四种类型的事件的名称以及 RTO 和 RPO 值:影响应用程序本身的事件,例如部署错误或代码级别的错误;影响应用程序基础设施的事件,例如 EC2 实例崩溃;影响可用区的事件;以及影响整个区域的事件。这些值以秒、分、小时或天表示。

Resilience Hub 创建策略

最后,查看选择,然后选择Publish(发布)。

评估
发布此应用程序及其策略后,选择 Assess resiliency(评估弹性)开始评估。

Resilience Hub 评估弹性

毫不意外,Resilience Hub 报告我的弹性策略违例。

Resilience Hub 策略违例

选择报告以获取详细信息。 控制面板显示了区域、可用区、基础设施和应用程序级事件预期的 RTO/RPO 与我策略的比较情况。

Resilience Hub 评估控制面板

我可以访问 Resiliency recommendations(弹性建议)和 Operational recommendations(运营建议)部分。

Resiliency recommendations(弹性建议)中,可以查看应用程序的组件是否符合弹性策略。此外,我还看到了有关 Optimize for availability zone RTO/RPO(可用区 RTO/RPO 优化)、Optimize for cost(成本优化)或 Optimize for minimal changes(最小更改优化)的建议。

Resilience Hub 优化

在第一个选项卡的 Operational recommendations(运营建议)中,可以看到要在 CloudWatch 中创建的建议告警的列表。

Resilience Hub 告警

第二个选项卡列出了建议的标准操作程序。这些是我可以在基础设施上运行的 Systems Manager 文档,例如从备份还原

Resilience Hub SOP

第三个选项卡,即Fault injection experiment templates(故障注入实验模板),建议了在我的基础设施上运行的、用于测试其弹性的实验。实验使用 FIS 进行。建议的实验是注入内存加载注入进程终止

Resilience Hub:FIS

选择 Set up recommendations(设置建议)时,Resilience Hub 会生成 CloudFormation 模板来创建告警或执行建议的 SOP 或实验。

Resilience Hub:设置建议

后续屏幕简洁明了,无需赘述。生成模板后,即可在 Templates(模板)选项卡中执行。我会应用模板并观察其如何影响应用程序的弹性评分。

Resilience Hub 弹性评分

用于部署示例应用程序的 CDK 脚本还会为同一应用程序创建高度可用的基础设施。其有一个负载均衡器、一个 Auto Scaling 组和一个带有两个节点的数据库集群。作为练习,请对此应用程序堆栈运行相同的评估报告并比较结果。

定价和可用性
AWS Resilience Hub 现已在美国东部(俄亥俄)美国东部(弗吉尼亚北部)美国西部(俄勒冈)亚太地区(新加坡)亚太地区(东京)欧洲(爱尔兰)欧洲(法兰克福)推出。我们将来会增加更多区域。

像往常一样,您只需按实际使用量付费。没有预付费用或最低费用要求。您只需根据您在 Resilience Hub 中说明的应用程序数量付费。您可以免费试用 Resilience Hub 6 个月,且最多使用 3 个应用程序。若超出此规定,Resilience Hub 的价格为每个应用程序每月 15.00 美元。在 titletitleResilience Hub运行第一次弹性评估后,计量便会开始。请记住,Resilience Hub 可能会为您预置服务(例如 CloudWatch 告警),因此可能需要支付额外费用。访问定价页面了解详细信息。

欢迎向我们提供反馈,立即构建您的第一个弹性控制面板吧

:seb