如何通过AWS CDK实现RDS与EC2实例CPU超阈值自动重启?
CDK配置CloudWatch告警自动重启EC2/RDS实现方案
核心实现不需要在实例内部写shell命令,直接通过CloudWatch告警绑定AWS Systems Manager(SSM)预置的官方自动化执行文档即可,所有重启操作在AWS控制面完成,无需登录实例操作。
EC2实例自动重启配置
你不需要使用InitCommand在实例内部写入重启脚本,直接给CPU使用率告警绑定SSM预置的EC2重启动作即可:
// 引入依赖 import * as cw_actions from 'aws-cdk-lib/aws-cloudwatch-actions'; import * as ssm from 'aws-cdk-lib/aws-ssm'; // 创建EC2 CPU使用率告警,匹配4%阈值、2个评估周期的规则 const ec2CpuAlarm = new cw.Alarm(this, 'EC2CPUUsage', { metric: yourEc2Instance.metricCPUUtilization(), threshold: 4, evaluationPeriods: 2, alarmName: 'EC2 CPU Usage Over 4%', }); // 加载AWS官方预置的EC2重启自动化文档 const ec2RestartAutomation = ssm.AutomationDocument.fromAutomationDocumentName( this, 'Ec2RestartDoc', 'AWS-RestartEC2Instance' ); // 给告警绑定重启动作 ec2CpuAlarm.addAlarmAction(new cw_actions.SsmAutomationAction(ec2RestartAutomation, { parameters: { InstanceId: [yourEc2Instance.instanceId], // 填入提前创建的SSM执行角色ARN,角色需要授予ec2:RebootInstances权限,信任SSM服务代入 AutomationAssumeRole: [ssmExecutionRole.roleArn] } }));
RDS实例自动重启配置
CDK没有直接提供告警触发RDS重启的原生构造,同样通过SSM预置的RDS重启文档实现即可,可以直接复用你已经创建好的RDS CPU告警:
// 加载AWS官方预置的RDS重启自动化文档 const rdsRestartAutomation = ssm.AutomationDocument.fromAutomationDocumentName( this, 'RdsRestartDoc', 'AWS-RestartDBInstance' ); // 给已有的RDS CPU告警绑定重启动作 CPUUsage.addAlarmAction(new cw_actions.SsmAutomationAction(rdsRestartAutomation, { parameters: { DBInstanceIdentifier: [yourRdsInstance.instanceIdentifier], // 复用同一个SSM执行角色即可,需要额外给角色授予rds:RebootDBInstance权限 AutomationAssumeRole: [ssmExecutionRole.roleArn] } }));
配置注意事项
- SSM执行角色的权限可以收敛到对应EC2、RDS实例的ARN,不需要授予全量资源操作权限,符合最小权限原则
- 多可用区部署的RDS触发重启时会自动执行故障切换,重启中断时间通常在几十秒级别,比单可用区重启影响更小
- 所有触发记录可以直接在CloudWatch告警历史、SSM自动化执行日志中查询,方便后续排查CPU高的根因
- 整个流程完全不需要在EC2内部写入自定义shell命令,不存在实例内脚本失效、权限不足的问题
内容的提问来源于stack exchange,提问作者Nelson
相关产品推荐
相关产品推荐

