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

如何利用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:36:05