You need to enable JavaScript to run this app. 如何根据活动情况以编程方式启停AWS EC2实例并在有访问请求时自动恢复?
优惠活动
大模型
产品
解决方案
定价
更多

如何根据活动情况以编程方式启停AWS EC2实例并在有访问请求时自动恢复?

自动恢复闲置EC2实例的实现方案

核心逻辑是在用户请求和后端EC2之间增加一层常驻的轻量流量入口,检测到请求时触发启动逻辑,实例就绪后再转发流量,整套方案和你现有闲置暂停的Lambda逻辑可以完全适配。

具体实现步骤

  • 部署前置流量入口
    优先选择*Application Load Balancer(ALB)*作为常驻入口,单ALB每月成本很低,远低于你节省的闲置EC2费用。配置规则:将所有流量转发到后端EC2所在的目标组,当目标组健康检查全部失败(即EC2处于停止状态)时,触发后续的启动逻辑,同时给用户返回「服务正在启动,请1~2分钟后刷新」的友好提示。
    如果你不想用ALB,也可以用1台t2.nano规格的EC2部署Nginx作为反向代理,成本和ALB接近。
  • 配置请求触发的EC2启动Lambda
    编写Lambda函数实现EC2启动逻辑,需要给Lambda配置最小启动权限,示例如下:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "ec2:StartInstances",
                "Resource": [
                    "arn:aws:ec2:<区域ID>:<账号ID>:instance/<普通Web实例ID>",
                    "arn:aws:ec2:<区域ID>:<账号ID>:instance/<CKAN实例ID>",
                    "arn:aws:ec2:<区域ID>:<账号ID>:instance/<DocumentDB关联实例ID>"
                ]
            }
        ]
    }
    
    触发方式:ALB侧配置监听器规则,当目标组健康检查状态为异常时,将请求转发给该Lambda函数,Lambda执行启动操作后直接返回等待提示页面即可。
  • 适配现有业务场景做优化
    结合你的实例配置调整逻辑:
    1. 普通t2.small Web实例:启动耗时通常在30~60秒,等待页面设置60秒自动刷新即可,实例启动后ALB健康检查会自动识别状态,后续请求直接转发到实例
    2. CKAN t2.xlarge实例:启动耗时稍长,可将等待页面的自动刷新时间调整为120秒,避免用户频繁手动刷新
    3. DocumentDB关联实例:Lambda启动该实例前可增加判断逻辑,先确认DocumentDB集群处于可用状态,再启动EC2,避免应用启动后数据库连接失败
  • 调整原有闲置暂停逻辑
    你之前的闲置暂停Lambda无需大改,只要把触发暂停的条件从「CPU/内存闲置」调整为「ALB连续15~30分钟无访问流量」即可,避免刚启动的实例被误暂停。

注意事项

所有静态资源建议提前存放到S3,等待提示页面的资源全部从S3加载,不需要依赖后端EC2,避免出现等待页面也无法打开的问题
可以根据业务的访问规律调整暂停的等待时长,比如工作时间延长到30分钟无访问再暂停,非工作时间缩短到15分钟,平衡成本和用户体验
t2实例启动速度快,大部分场景下用户感知的等待时间不会超过2分钟,对普通Web业务的体验影响极小

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:00:00