You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何实现RDS实例定时自动扩缩容(EST时段切换db.m6g规格)

实现RDS定时自动扩缩容方案

核心方案

采用AWS EventBridge(定时触发)+ Lambda函数(执行实例规格修改)的无服务器方案,无需维护额外服务器,成本低且易运维。

步骤1:创建Lambda所需的IAM角色

  • 新建IAM角色,信任关系指定为Lambda服务
  • 附加最小权限策略(替换占位符为你的实际信息):
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "rds:ModifyDBInstance",
                    "rds:DescribeDBInstances"
                ],
                "Resource": "arn:aws:rds:你的区域ID:你的账号ID:db:你的RDS实例名"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "logs:CreateLogGroup",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents"
                ],
                "Resource": "arn:aws:logs:*:*:*"
            }
        ]
    }
    

步骤2:编写Lambda函数(Python示例)

同一个函数可处理升级、降级操作,通过EventBridge传递的参数区分目标规格:

import boto3

rds_client = boto3.client('rds')

def lambda_handler(event, context):
    db_instance_id = '你的RDS实例名'
    target_class = event.get('target_instance_class')
    
    if not target_class:
        raise ValueError("未传入目标实例规格参数")
    
    try:
        response = rds_client.modify_db_instance(
            DBInstanceIdentifier=db_instance_id,
            DBInstanceClass=target_class,
            ApplyImmediately=True  # 立即生效;若业务无法接受即时中断,可设为False,在维护窗口执行
        )
        print(f"规格修改请求提交成功,当前目标规格: {response['DBInstance']['DBInstanceClass']}")
        return {"status": "success", "message": f"正在切换至{target_class}"}
    except Exception as e:
        print(f"规格修改失败: {str(e)}")
        raise e

提示:ApplyImmediately=True会触发实例重启,业务会有30秒-2分钟的短暂中断;多AZ实例的中断时间通常更短。

步骤3:创建EventBridge定时规则

创建两个独立规则分别触发升级和降级:

规则1:EST每日5:00升级至db.m6g.8xlarge

  • 规则类型:计划
  • 调度表达式(转换为UTC时区,EST=UTC-5):cron(0 10 * * ? *)
  • 目标:选择你创建的Lambda函数
  • 配置常量输入JSON:
    {"target_instance_class": "db.m6g.8xlarge"}
    

规则2:EST每日17:00降级回db.m6g.xlarge

  • 规则类型:计划
  • 调度表达式(转换为UTC时区):cron(0 22 * * ? *)
  • 目标:选择同一个Lambda函数
  • 配置常量输入JSON:
    {"target_instance_class": "db.m6g.xlarge"}
    

关键注意事项

  • RDS实例必须处于可用状态才能执行规格修改,若有正在进行的备份、升级等操作会导致失败
  • 建议先手动触发Lambda函数测试修改逻辑,确认无问题后再启用定时规则
  • 通过CloudWatch日志监控Lambda执行状态,及时排查失败情况

内容的提问来源于stack exchange,提问作者Fahd Mirza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:13:30