自动缩放 Amazon RDS 存储使用 Amazon CloudWatch 和 AWS Lambd
自动扩展 Amazon RDS 存储使用 Amazon CloudWatch 和 AWS Lambda
关键要点
关键要点
在这篇文章中,我们探讨了一种利用 Amazon CloudWatch 和 AWS Lambda 自动扩展 Amazon RDS 存储的解决方案。随着客户数据库不断增长,存储管理变得越来越重要。当 RDS 存储被填满时,自动扩展可能无法及时满足需求,因此本文提供了一种通过 CloudWatch 监控空间使用情况并触发 Lambda 函数实现自动扩展的方法。这种解决方案能有效减少数据库达到存储限制时的风险。
客户的数据库正在持续增长。当你在 Amazon Relational Database Service (Amazon RDS) 中增加存储时,无法在接下来的 6 小时内或直至存储优化完成之前进行进一步的存储修改,取其较长时间。Amazon RDS 存储自动扩展 会根据当前已分配的存储容量、历史使用情况预测下一个 7 小时的存储增长,增加 10 GiB、已分配存储的 10 或预测的增长量中的最大值。尽管这种机制适用于大多数数据库和使用模式,但对于定期进行大量数据加载的情况,它可能无法提供足够的空间,这可能导致数据库长时间处于存储已满状态,从而影响写入和连接。
在本文中,我们展示了一个自动化的解决方案,利用 Amazon CloudWatch 和 AWS Lambda 来灵活调整数据库的存储空间,以应对存储不足的问题。通过合理地扩大存储比例,可以有效降低存储再度不足的几率。需要注意的是,此解决方案并不替代存储自动扩展,而是为需要更高扩展比例的客户提供了额外的支持。
解决方案概述
在此解决方案中,我们运用 CloudWatch 监控 RDS 数据库的可用存储空间,并在其低于特定阈值时发送通知至 Amazon Simple Notification Service (Amazon SNS)。接着,SNS 会调用 Lambda 函数,通过事件包含数据库的名称和空间信息,增加存储量。随着数据库存储的增加,CloudWatch 警报将恢复到正常状态,如果存储再次超过预设阈值,整个过程将重启。
以下是解决方案架构的示意图:
在接下来的部分,我们将探讨如何设置实施此 Amazon RDS 存储扩展解决方案所需的所有资源。
前提条件
在本操作指南中,你需要满足以下前提条件:
一个有效的 AWS 账户一个现有的 RDS 数据库,以便监控和扩展使用 AWS CloudFormation 创建解决方案资源
我们使用 AWS CloudFormation 模板来设置解决方案资源。CloudFormation 堆栈将创建一个 Lambda 函数、Lambda AWS 身份与访问管理 (IAM) 执行角色、SNS 主题和 SNS 订阅。请按照以下步骤操作,或查看本文末尾的视频演示。
下载 CloudFormation 模板 (YAML 文件)。在 AWS CloudFormation 控制台 中,选择你希望部署此解决方案的区域。创建一个新资源的堆栈。上传 YAML 文件。输入堆栈名称,并选择一个 IAM 角色可选。如果未选择 IAM 角色,AWS CloudFormation 将使用当前用户的凭证。
创建 CloudWatch 警报
在创建 CloudFormation 堆栈后,可以创建 CloudWatch 警报:
在 CloudWatch 控制台中,选择导航面板中的 Alarms。选择 Create alarm。在搜索栏中输入数据库标识符,然后选择 RDS gt DBInstanceIdentifier。选择 FreeStorageSpace 作为指标,并选择 Select Metric。设定 CloudWatch 警报触发的条件,特别是数据库需要扩展的可用存储空间。为了让 CloudWatch 警报在存储自动扩展之前触发,建议将警报设置为在总存储空间的 15 时触发动作。如果你的数据库为 100 GB,15 即 15 GB。Lambda 函数将根据数据库存储量同样增加 CloudWatch 警报阈值,因此如果数据库从 100 GB 增长到 200 GB,警报将在 30 GB 的可用存储空间时触发,而不是 15 GB。
通过将可用存储空间设置为总存储的 15,可以在解决方案失败时保持 Amazon RDS 存储自动扩展在 10 可用空间的启用状态,以便作为后备选项。
如果保持存储自动扩展处于启用状态推荐,请确保提高 Amazon RDS 最大存储阈值的值,因为即使有此自动化解决方案,你的 RDS 数据库也无法超出该值进行扩展。
在接下来的步骤中,选择 Select an existing SNS topic,并输入主题 RDSSNSStorageScaler,以便在 CloudWatch 警报处于警报状态时进行通知。输入任意名称为 CloudWatch 警报并创建。Lambda 函数代码
随着 CloudWatch 警报的创建,任何时候可用存储达到你选择的阈值,系统都会向 SNS 主题发送通知,进而调用 Lambda 函数。Lambda 函数将增加 RDS 数据库的存储。让我们详细查看 Lambda 代码的一部分:
小熊加速器下载官网pythonimport sys botocore boto3 json mathdef lambdahandler(event context) ScalingUnder1000GB = 12 Scaling1000GBto5000GB = 115 ScalingOver5000GB = 110
在第 3 到 5 行,我们定义了三个用于 scaling 百分比的变量,这些可以根据你的需求进行修改:
ScalingUnder1000GB = 12Scaling1000GBto5000GB = 115ScalingOver5000GB = 110默认情况下,该 Lambda 函数为小于 1000 GB 的数据库扩展 20,为 1000 到 5000 GB 的数据库扩展 15,而为超过 5000 GB 的数据库扩展 10。不过,你可以在 Lambda 函数中修改这些值,以便扩展数据库的存储。如果希望扩展的最低值为 10。
我们提供的 CloudFormation 模板足以支持单区域部署。如果你希望将此解决方案部署到多个区域,需要使用 下列 CloudFormation 模板,该模板只创建 Lambda 函数和 SNS 主题。对于多个区域的部署无需重建 IAM 角色,因为 IAM 是一个全球服务。

清理
如果希望取消此解决方案以不再扩展 RDS 实例的存储,可以删除 CloudFormation 堆栈,这将删除 Lambda 函数、SNS 主题、Lambda 执行角色和策略。最后,你还需要删除你创建的 CloudWatch 警报。
结论
本文展示了一种使用 CloudWatch 警报监控 RDS 数据库可用存储空间的解决方案,当存储即将用尽时向 SNS 主题发送通知。 后续 SNS 主题将调用 Lambda 函数按你选择的比例增加 RDS 数据库的存储空间,并可根据需要随时修改扩展比例。通过创建多个 CloudWatch 警报,你可以使用同一个 SNS 主题和 Lambda 函数来监控和扩展多个数据库。下载 CloudFormation 模板,以便开始使用此解决方案,并欢迎在本文评论中提出任何问题或反馈。
作者简介
Yassin Abouel Seoud 是 Amazon Web Services 的企业支持负责人。他帮助客户改善工作负载的性能和弹性,并解决阻碍问题。在加入 AWS 之前,Yassin 在麦吉尔大学获得机械工程学士学位,并曾致力于扩展 Alexa 的理解和国际回应能力。
更高级的 Zloader 恶意软件变种出现 媒体
Zloader 恶意软件升级与增强隐蔽性关键要点Zloader也称为 DELoader、Terdot 或 Silent Night已通过定制 DNS 隧道集成进一步优化,提升了指挥和控制通信的隐蔽性。新版 Zloader 支持任意二进制执行、数据提取、进程终止等多种功能。它利用域生成算法并进行环境检...