如何利用CloudWatch自动停止空闲EC2实例?求可行方案及参考资源
用CloudWatch告警实现EC2实例空闲判断的方案
完全可以通过CloudWatch告警解决多指标判断EC2实例空闲的问题,无需自行维护WebSocket和数据库,具体实现方案如下:
配置多指标复合告警
CloudWatch支持基于多个指标的组合条件触发告警,你可以设置类似这样的复合判断规则:- CPU利用率持续10分钟低于5%
- 网络入流量持续10分钟低于100KB/分钟
- 网络出流量持续10分钟低于100KB/分钟
- 自定义的「用户输入空闲时长」指标持续10分钟为0(需先将该数据推送到CloudWatch)
当所有条件同时满足时,判定实例为空闲并触发停止动作。
推送自定义指标到CloudWatch
你脚本中的「用户输入时长」可以作为自定义指标上报到CloudWatch,用boto3实现的示例代码如下:import boto3 cloudwatch = boto3.client('cloudwatch') def report_idle_duration(instance_id, idle_minutes): cloudwatch.put_metric_data( Namespace='EC2_Custom_Metrics', MetricData=[ { 'MetricName': 'UserInputIdleMinutes', 'Dimensions': [{'Name': 'InstanceId', 'Value': instance_id}], 'Value': idle_minutes, 'Unit': 'Minutes' }, ] )把这段代码集成到你原有的脚本中,定期上报用户输入空闲时长即可。
设置告警触发动作
当告警触发时,通过Lambda函数执行EC2实例停止操作,Lambda核心代码片段:import boto3 ec2 = boto3.client('ec2') def lambda_handler(event, context): instance_id = event['detail']['instance-id'] ec2.stop_instances(InstanceIds=[instance_id]) return f"Instance {instance_id} stopped due to idle condition"将该Lambda与CloudWatch告警关联,配置为告警触发时自动执行。
参考资源(AWS官方文档核心内容)
- 多指标复合告警:查看AWS文档中「CloudWatch Composite Alarms」章节,包含多条件组合的配置步骤和示例
- 自定义指标推送:参考「CloudWatch PutMetricData API」的参数说明和上报规范
- Lambda操作EC2:查阅「Lambda调用EC2 API」的官方示例,了解权限配置和执行逻辑
内容的提问来源于stack exchange,提问作者guidingfox
相关产品推荐
相关产品推荐

