案例中心
首页 > 案例中心 > 按计划停止和启动 Amazon RDS Multi

按计划停止和启动 Amazon RDS Multi

2026 .01 .27

Amazon RDS 多可用区数据库集群的定时停止与启动

关键要点

在本篇文章中,我们介绍了如何在不使用 Amazon RDS 多可用区MultiAZ数据库集群时,通过定时停止和启动节省成本。此解决方案利用 AWS Lambda 和 Amazon EventBridge 实现对数据库集群的自动管理。

Amazon RDS 多可用区数据库集群是一种高可用性部署模式,提供更低的写入延迟和更高的读请求能力。通过本文的指导,您能够掌控基础设施资源,以降低开发或测试环境的费用。

解决方案概述

此解决方案采用 AWS Lambda 和 Amazon EventBridge 的组合,提供 RDS 多可用区数据库集群部署的自管理解决方案,并模拟停止和启动操作。我们采用删除并恢复数据集群的方式实现这一目的。

本文中演示的解决方案 从 RDS 快照恢复多可用区数据库集群。一旦状态可用,您可以立即使用恢复后的 RDS 多可用区数据库集群。恢复的集群会在后台继续加载数据,此过程称为 懒加载。为减少懒加载对需要快速访问的表的影响,您可以执行全表扫描等操作,例如 SELECT FROM Table,这样可促进 Amazon RDS 从 Amazon Simple Storage Service 下载所有备份的表数据。

以下是我们解决方案的架构图:

EventBridge 按用户定义的计划调用 Lambda 函数,进行快照并立即删除多可用区数据库集群。此 RDS 快照可作为恢复多可用区数据库集群的来源。此方法不仅帮助您控制整体 Amazon RDS 成本,还提供了安全性,因为在不需要集群时,该集群无法接受新的连接。

前提条件

要实现此解决方案,您需要完成以下高层次步骤:

创建一个 RDS 多可用区数据库集群。创建一个 Lambda 执行角色 并附加 AWS 身份与访问管理IAM策略。创建两个 Lambda 函数:一个用于拍摄快照并立即删除 RDS 多可用区数据库集群,另一个用以根据快照创建新的 RDS 多可用区数据库集群。创建一个 EventBridge 规则以按计划调用 Lambda 函数。

创建 IAM 策略和角色为 Lambda

您需要创建 IAM 策略和角色,使 Lambda 函数能够执行删除和恢复操作。完成以下步骤以 创建 IAM 策略:

在 IAM 控制台的导航面板中,选择 Policies。选择 Create policy。在 JSON 标签中,输入以下策略:

{ Version 20121017 Statement [ { Action [ rdsAddTagsToResource rdsCopyDBSnapshot rdsCopyDBClusterSnapshot rdsDeleteDBInstance rdsDeleteDBSnapshot rdsDeleteDBCluster rdsRestoreDBClusterFromSnapshot rdsRestoreDBInstanceFromDBSnapshot rdsCreateDBInstance rdsCreateDBCluster rdsDescribe rdsListTagsForResource ] Effect Allow Resource } ]}

从安全角度来看,建议限制解决方案的范围,仅针对少数实例使用 Resource 参数。

选择 Review policy。在 Policy Name 中,输入一个名称例如:RDSMAZDBAutomation。选择 Create policy。

接下来,您可以 创建 IAM 角色。

在导航面板中选择 Roles。选择 Create role。在 Select type of trusted entity 中,选择 AWS service。对于 Use case,选择 Lambda。选择 Next。在 IAM policy name中输入名称例如:RDSMAZDBAutomation。在 Permissions policies 下,选择您创建的策略。选择 Next。在 Role name 中输入名称例如:RDSMAZDBAutomationRole。选择 Create role。

您的 IAM 角色现已准备就绪,可以附件到 Lambda 函数上。

创建 Lambda 函数以删除 RDS 多可用区数据库集群

完成以下步骤以创建删除多可用区数据库集群的 Lambda 函数:

在 Lambda 控制台中,选择导航面板中的 Functions。选择 Create function。在 Function name 中输入名称例如:DeleteMAZDBCluster。在 Runtime 中选择 Python 312。在 Execution role 中选择 Use an existing role。在 Existing role 下选择您之前创建的角色。选择 Create function。在 Lambda 函数详细信息页面,转到函数代码部分,将示例代码替换为如下内容请更改 dbcluster 值为您想要创建自动化的数据库集群标识符,区域值更改为您数据库集群的所在区域:

pythonimport boto3import loggingimport osimport datetimeimport timeimport sys

logger = logginggetLogger(name)loggersetLevel(loggingINFO)

cluster = osgetenv(CLUSTERmacluster1)region = osgetenv(AWSREGION uswest2)

def lambdahandler(event context) try date=timestrftime(dmY) snapshotname = clusterdate source = boto3client(rds regionname=region) sourcedeletedbcluster(DBClusterIdentifier=cluster SkipFinalSnapshot=False FinalDBSnapshotIdentifier=snapshotname) loggerinfo(fSnapshot {snapshotname} deleted) if sourcedescribedbclusters(DBClusterIdentifier=cluster) loggerinfo(fCluster {cluster} still exists) return False else loggerinfo(fCluster {cluster} deleted) return True except Exception as e loggererror(fSomething went wrong {e}) return False

选择 Save。选择 Test 来测试该函数。在 Event name 中输入一个名称例如:DeleteDBCluster。选择 Test 再次测试函数。

注意:当您第二次选择 Test 时,如果成功,它将删除数据库集群。

测试成功后,您将收到如下所示的响应。

风驰加速器官方版

创建 Lambda 函数以从最新 DB 快照恢复 RDS 多可用区数据库集群

在这一步骤中,您创建一个 Lambda 函数来使用最新快照恢复 RDS 多可用区数据库集群。请按照前一部分中的相同步骤创建一个 Lambda 函数。为本篇文章,我们命名为 RestoreDBCluster,并使用以下代码:

pythonimport osimport loggingimport boto3import datetime

配置日志记录

logger = logginggetLogger()loggersetLevel(loggingINFO)

def bytimestamp(snap) if SnapshotCreateTime in snap # 将 SnapshotCreateTime 转换为UTC datetime对象 snapshottime = snap[SnapshotCreateTime]replace(tzinfo=datetimetimezoneutc) return snapshottime return datetimedatetimenow(tz=datetimetimezoneutc)

按计划停止和启动 Amazon RDS Multi

def lambdahandler(event context) # 从环境变量中检索值 dbcluster = osenvironget(DBCLUSTER macluster1) engine = osenvironget(ENGINE mysql) awsregion = osenvironget(AWSREGION uswest2) dbinstanceclass = osenvironget(DBINSTANCECLASS dbm5dlarge) subnetgroupname = osenvironget(SUBNETGROUPNAME default) storagetype = osenvironget(STORAGETYPE gp3) try # 创建 RDS 客户端 rds = boto3client(rds regionname=awsregion) sourcesnaps = rdsdescribedbclustersnapshots(DBClusterIdentifier=dbcluster)[DBClusterSnapshots] sortedsnaps = sorted(sourcesnaps key=bytimestamp reverse=True) loggerinfo(fDB cluster snapshots {sortedsnaps}) sourcesnap = sortedsnaps[0][DBClusterSnapshotIdentifier] loggerinfo(fRestoring {sourcesnap} to {dbcluster}) response = rdsrestoredbclusterfromsnapshot( DBClusterIdentifier=dbcluster SnapshotIdentifier=sourcesnap Engine=engine DBClusterInstanceClass=dbinstanceclass StorageType=storagetype DBSubnetGroupName=subnetgroupname PubliclyAccessible=False DeletionProtection=False ) except Exception as e loggererror(fAn error occurred {e}) raise e loggerinfo(fRestore response {response}) return { statusCode 200 body fSuccessfully restored {sourcesnap} to {dbcluster} }

如果在 Lambda 函数测试运行中遇到超时错误,可以执行以下操作:

在函数详细信息页面,选择 Configuration。在左侧面板中选择 General configuration。选择 Edit。增加超时时间默认超时为 3 秒。选择 Save。

创建 EventBridge 规则

在本文中,我们计划每天在 UTC 时间2100删除 RDS 多可用区数据库集群,并在每天 UTC 时间0900恢复它。完成以下步骤以在 EventBridge 中创建此规则:

在 EventBridge 控制台中,选择导航面板中的 Schedules。选择 Create schedule。在 Name 中输入名称例如:DeleteMAZDBCluster。在 Occurrence 中选择 Recurring schedule。在 Time zone 中选择 UTC。在 Schedule type 中,选择 Cronbased schedule。

在 Cron expression 中输入以下值:分钟 00小时 21每月天数 月份 星期天

选择 Next。

在 Target API 中选择 Templated targets。选择 AWS Lambda Invoke。

选择要调用的 DeleteMAZDBCluster Lambda 函数,然后选择 Next。在 Settings 页上选择 Next。选择 Create schedule。重复这些步骤以创建另一个计划,用于每天在 UTC 时间0900调用 RestoreDBCluster Lambda 函数。

清理

要清理您的资源,请完成以下步骤:

删除 RDS 多可用区数据库集群。删除 Lambda 函数。删除 EventBridge 规则。

结论

在本文中,我们分享了通过停止删除和启动重新创建RDS 多可用区数据库集群来节省账单和管理开销的解决方案。您可以根据本帖中概述的自动化流程进行调整,以适应您的用例并与您的特定业务需求保持一致。欢迎在评论区提供您的反馈。

作者介绍

Kaustubh Wani 是 AWS 的技术客户经理,致力于与来自北美的教育及教育科技客户紧密合作。在 AWS 工作超过 5 年,曾作为 RDS 数据库团队的云支持工程师开始他的旅程。Kaustubh 还是 Amazon RDS 核心系统的主题专家,广泛涉及开源引擎如 MySQL 和 PostgreSQL。他获得了 AWS 解决方案架构师助理、数据库专业以及安全专业认证,主要为企业客户提供技术支持,帮助改善数据库操作性能,分享数据库最佳实践。

Nirupam Datta 是 AWS 的高级云支持数据库工程师,加入 AWS 超过 4 年,拥有超过 12 年的数据库工程及基础架构经验,是 Amazon RDS 核心系统和 Amazon RDS for SQL Server 的主题专家。他为客户提供技术支持,指导他们进行迁移、优化,并顺利走过 AWS 云之旅。

标签 RDS 多可用区数据库集群

将 Amazon Bedrock 知识库与 Microsoft SharePoint 集成作为数据源

设计基于 Amazon EMR 的数据湖数据网格模式,使用 AWS Lake Formation 和

联系我们
留言

Copyright © 欢迎来到风驰加速器官網|风驰加速器 版权所有 网站地图

WeChat
WeChat

留言框-

欢迎来到风驰加速器官網|风驰加速器

13594780068