使用 AWS 故障注入服务和 AWS L

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

作者:
日期: 2024 年 3 月 22 日
分类: 、[无服务器架构](https://aws.amazon.com/blogs/compute/category/serverless/"查看所有无服务器架构内容")


关键要点

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

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

概述

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

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

修改 Lambda 函数配置

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

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

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

使用 Lambda 扩展注入混沌

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

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

![使用 Lambda删除)

使用 AWS FIS 自动化实验模板

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

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

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

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

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

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

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

先决条件

  • 您的 AWS 账户中已经部署了混沌扩展作为 Lambda 层。
  • 您已安装 (CDK) CLI。有关详细信息,请参见 指南。
  • 通过运行
    _git clone_
    将示例库克隆到本地。
  • 确保您拥有足够的权限与 AWS FIS、Lambda 和 CloudWatch 警报进行交互。

运行实验

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

删除)

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

删除)

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

删除)

安全最佳实践

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

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

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

结论

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

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

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

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

Leave a Reply

Required fields are marked *