AWS RDS Aurora 自动扩缩容时如何配置自定义只读副本实例类型
RDS只读副本自动扩缩容自定义实例类型实现方案
目前RDS原生自动扩缩容规则确实不支持自定义只读副本的实例类型,默认会继承主写入节点的规格,你可以通过以下两种方案实现需求:
方案一:原生自动扩缩容 + 后置规格修改触发器
该方案复用RDS原生的扩缩容阈值判断逻辑,仅在副本创建完成后自动修改规格,开发成本较低:
- 操作步骤:
- 先正常在RDS控制台配置原生只读副本自动扩缩容规则,无需处理实例类型继承问题
- 创建Lambda函数,核心逻辑为:接收RDS实例创建事件,判断实例是否为目标集群的只读副本,若符合条件则调用
modify_db_instance接口修改实例规格为目标值,参数ApplyImmediately设为true - 在EventBridge中创建事件规则,匹配RDS的
DB Instance Created事件,添加筛选条件限定所属集群、实例角色为只读副本,将触发目标设置为上述Lambda函数 - 为Lambda对应的IAM角色配置RDS实例修改权限、CloudWatch日志输出权限
- 优缺点:优点是逻辑简单、改动量小;缺点是副本创建后会有1-2分钟的规格调整窗口期,期间副本不可用,不适合对副本扩容速度要求极高的场景。
- 核心修改示例代码(Python boto3):
import boto3 rds_client = boto3.client('rds') rds_client.modify_db_instance( DBInstanceIdentifier='新创建的副本ID', DBInstanceClass='db.t3.medium', ApplyImmediately=True )
方案二:自定义自动扩缩容逻辑替代原生功能
该方案完全自研扩缩容逻辑,创建副本时直接指定目标规格,无二次调整的不可用窗口:
- 操作步骤:
- 关闭RDS原生的只读副本自动扩缩容规则
- 在CloudWatch中创建对应扩缩容触发指标的告警(例如CPU使用率、只读请求QPS、复制延迟等)
- 分别编写扩容、缩容Lambda函数:扩容逻辑调用
create_db_instance_read_replica接口时直接指定DBInstanceClass参数为db.t3.medium;缩容逻辑按照预设规则删除闲置只读副本 - 将CloudWatch告警的触发动作绑定到对应的扩缩容Lambda函数,额外添加冷却时间、副本数量校验逻辑避免重复触发扩缩容
- 为Lambda配置对应的RDS实例创建/删除权限、CloudWatch访问权限
- 优缺点:优点是副本创建完成即可用,无需二次调整规格,扩缩容逻辑可完全自定义;缺点是需要自行维护整套扩缩容的阈值判断、异常处理逻辑,开发维护成本更高。
- 核心创建副本示例代码(Python boto3):
import boto3 rds_client = boto3.client('rds') rds_client.create_db_instance_read_replica( DBInstanceIdentifier='自定义副本名称', SourceDBInstanceIdentifier='主实例ID', DBInstanceClass='db.t3.medium', ApplyImmediately=True )
注意:两种方案执行前都需要提前确认目标实例规格和你使用的RDS引擎版本、集群配置兼容,避免创建或修改实例时报错。
内容的提问来源于stack exchange,提问作者Hazard
相关产品推荐
相关产品推荐

