使用 AWS 故障注入服务和 AWS Lambda 自动化混沌实验 计算博客

使用 AWS 故障注入服务与 AWS Lambda 自动化混沌实验

作者: James Beswick日期: 2024 年 3 月 22 日分类: AWS Lambda永久链接

关键要点

混沌工程是一种构建系统弹性的有效方法,尤其在服务器无状态和分布式架构中。本文提供了一种在 AWS Lambda 运行混沌实验的方法,利用 Lambda 扩展,无需改动函数代码。使用 AWS 故障注入服务 (FIS) 可以自动化和管理不同 Lambda 函数的混沌实验,实现可重用的测试方法。

本文介绍了一种在 AWS Lambda 函数上运行混沌工程实验的技术,采用 Lambda 扩展来引入故障,而无需更改函数代码。借助 AWS 故障注入服务 (FIS),可以自动化和管理不同的 Lambda 函数的混沌实验,以提供可重用的测试方法。

概述

混沌实验通常应用于云应用程序,以发现潜在问题并防止服务中断。IT 团队通过混沌实验来建立系统的鲁棒性信心。然而,传统基于服务器的混沌工程方法在无服务器环境中并不适用,因为许多现有工具依赖于改变底层基础设施配置,例如集群节点或服务器实例。

在无服务器应用中,AWS 负责基础设施的管理,让你能够专注于提供商业价值。这也意味着工程团队对基础设施的控制有限,必须依赖于应用层工具来运行混沌实验。在无服务器社区中,通常用于在 Lambda 函数上进行混沌实验的两种技术是修改函数配置或使用特定于运行时的库。

修改 Lambda 函数配置

更改 Lambda 函数的配置可以引入基本的故障。例如,可以设置 保留并发 来模拟调用限制。或者,您可能会修改 函数执行角色权限 或 函数策略 来模拟 IAM 访问拒绝。这些类型的故障易于实现,但故障注入类型的范围有限。

使用运行时特定库注入混沌

另一种技术是通过专用的、特定于运行时的库来注入混沌。这种方法比较灵活,有多种开源库可以用于注入故障,例如增加延迟、抛出异常或磁盘耗尽等。常见的库有 Python 的 chaoslambda 和 Nodejs 的 failurelambda。但缺点是您需要修改每个需要进行混沌实验的函数代码。这些库特定于运行时,每个库的功能和配置各不相同,从而降低了跨不同语言实现的 Lambda 函数中的混沌实验的可重用性。

使用 Lambda 扩展注入混沌

通过使用 Lambda 扩展 实现混沌实验,可以解决先前提到的所有问题。Lambda 扩展通过添加功能来增强函数,例如捕获诊断信息或自动对代码进行监控。您可以将自己喜欢的监控、可观察性或安全工具深度集成到 Lambda 环境中,而无需复杂的安装或配置管理。Lambda 扩展通常打包为 Lambda 层,并在 Lambda 执行环境 中作为一个独立进程运行。

通过 Lambda 扩展,您可以实现一个混沌扩展,在 Lambda 环境中注入所需的故障。该混沌扩展采用 运行时 API 代理 模式,可以钩入函数调用请求和响应的生命周期。

使用 AWS 故障注入服务和 AWS Lambda 自动化混沌实验 计算博客

使用 AWS FIS 自动化实验模板

根据 混沌工程原则,应“自动化实验以持续运行”。为了实现这一目标,您可以使用 AWS 故障注入服务 (FIS)。

鲤鱼加速器官方

此服务允许您生成可重用的 实验模板。模板指定了在实验期间要运行的目标和操作,以及一个可选的停止条件,防止实验超出范围。您还可以执行支持自定义故障类型的 AWS Systems Manager 自动化运行簿。您可以编写自己的自定义 系统管理文档,以定义自动化中每个步骤的具体内容。

使用混沌扩展进行无服务器混沌实验的步骤如下:

为实验设置 Lambda 函数。将混沌扩展作为层添加,并配置实验,例如,添加环境变量指定故障类型及其对应值。暂停自动化并进行实验。使用 awssleep 自动化操作。在此期间,进行实验,测量并观察结果。清理实验。脚本将再次移除该层并重置环境变量。

运行您的第一个无服务器混沌实验

这个 示例库 为您提供了在 AWS 中运行第一个无服务器混沌实验所需的代码。实验使用 chaoslambdaextension 扩展来注入混沌。

该示例部署了 AWS FIS 实验模板、所需的 SSM 自动化 runbook,包括用于配置 Lambda 函数的 IAM 角色。该示例还为测试提供了 Lambda 函数,以及用于回滚实验的 Amazon CloudWatch 警报。

先决条件

您的 AWS 账户中已经部署了混沌扩展作为 Lambda 层。您已安装 AWS Cloud Development Kit (CDK) CLI。有关详细信息,请参见 开始使用 AWS CDK 指南。

通过运行git clone[ git@githubcomawssamples/serverlesschaosexperimentsgit](mailtogit@githubcomawssamples/serverlesschaosexperimentsgit) 将示例库克隆到本地。

确保您拥有足够的权限与 AWS FIS、Lambda 和 CloudWatch 警报进行交互。

运行实验

按照 库中的步骤 进行您的第一个实验。启动实验会触发自动化执行。

此自动化包含添加扩展和配置实验,暂停执行并观察系统,以及将所有更改恢复到初始状态。

如果在第二步期间调用目标 Lambda 函数,将会模拟故障在此情况下为人为延迟。

安全最佳实践

扩展在与函数相同的执行环境中运行,因此它们对文件系统、网络和环境变量等资源具有相同的访问级别。分配给函数的 IAM 权限会与扩展共享。AWS 建议为您的函数分配最少的权限。

始终只从可信来源安装扩展。使用基础设施即代码 (IaC) 和自动化工具,例如 CloudFormation 或 AWS Systems Manager,以简化将相同的扩展配置包括 AWS 身份和访问管理 (IAM) 权限附加到多个函数的过程。IaC 和自动化工具允许您保持扩展和以前使用的版本的审计记录。

在构建扩展时,请勿记录敏感数据。对有效负载和元数据进行清理后再进行日志记录或持久化存储。

结论

本文详细介绍了如何在基于 Lambda 的无服务器应用程序中运行混沌实验。所描述的方法利用 Lambda 扩展将故障注入到执行环境中,从而无需更改 Lambda 函数的运行时或配置即可使用相同的方法。

要自动化并成功进行实验,您可以使用 AWS 故障注入服务。通过创建实验模板,您可以指定在定义的目标上运行的操作,例如在实验期间添加扩展。由于扩展可以用于任何运行时,所以可以重用实验模板以将故障注入到不同的 Lambda 函数中。

访问 此库 部署您的第一个无服务器混沌实验,或观看此 视频指南 以学习更多关于构建扩展的知识。探索 AWS FIS 文档 以了解如何创建自己的实验。

有关更多无服务器学习资源,请访问 Serverless Land。

  • 2026-01-27 12:59:02
  • 6