AWS EC2实例自动关机后如何设置自动启动?含staging实例问题
解决AWS EC2实例自动关机后的自动启动方案及根源排查建议
嘿,针对你遇到的EC2实例(包括staging环境)莫名自动关机的问题,我来分享几种AWS官方提供的自动启动方案,同时也给你一些排查关机根源的思路——毕竟先解决“为什么关机”才能彻底避免反复踩坑嘛!
一、自动启动意外关机实例的可行方案
1. EC2 自动恢复(Auto Recovery)
这个方案专门针对硬件故障或AWS系统问题导致的实例停机,会自动在健康的硬件上重启你的实例(保留原实例ID、IP、存储等配置)。
- 设置方式:
- 控制台操作:选中目标实例 → 右键「实例设置」→ 「启用自动恢复」
- CLI命令:
aws ec2 modify-instance-attribute \ --instance-id i-xxxxxxxxxxxxxxxxx \ --attribute "disableApiTermination" --value "false" \ --attribute "instanceInitiatedShutdownBehavior" --value "stop"
2. EventBridge(原CloudWatch Events)+ Lambda 函数
这是最灵活的方案,不管什么原因导致实例变为stopped状态,都能自动触发启动操作,完全自定义逻辑。
- 步骤:
- 创建Lambda函数:使用Python的boto3库编写启动逻辑,示例代码:
import boto3 ec2_client = boto3.client('ec2') def lambda_handler(event, context): # 可以从事件中获取触发的实例ID,或者指定固定实例ID instance_ids = [event['detail']['instance-id']] ec2_client.start_instances(InstanceIds=instance_ids) return f"已启动实例: {instance_ids}" - 创建EventBridge规则:
- 事件模式选择「EC2实例状态变更」,过滤条件设置为状态为
stopped - 将目标配置为刚才创建的Lambda函数
优势:可以批量处理多个实例,还能扩展逻辑(比如发送告警通知后再启动)。
- 事件模式选择「EC2实例状态变更」,过滤条件设置为状态为
- 创建Lambda函数:使用Python的boto3库编写启动逻辑,示例代码:
3. 自动缩放组(Auto Scaling Group, ASG)
如果你的实例是部署在ASG中的,ASG会自动维持你设置的「期望实例数」——只要实例变为不健康状态(包括stopped),ASG就会自动替换或重启实例。
- 关键配置:
- 确保ASG的健康检查包含EC2实例状态检查(默认开启)
- 可以设置「实例重启策略」,针对不健康实例优先尝试重启,而非直接替换
适合需要高可用的业务场景,不仅能自动启动,还能应对实例终止的情况。
二、先排查自动关机的根源!
自动启动只是临时解决方案,找到关机原因才能一劳永逸:
- 查看系统日志/控制台输出:在EC2控制台选中实例 → 「监控」→ 「获取系统日志」「获取控制台输出」,排查是否有内核错误、OOM(内存不足)、系统脚本异常等问题
- 检查AWS账单状态:确认是否因为账户欠费导致实例被停机(AWS会在欠费时停止非关键实例)
- 查看CloudTrail日志:搜索
StopInstances或TerminateInstancesAPI调用,确认是用户操作、第三方工具还是AWS服务触发的关机 - 检查实例配置:确认实例的「实例启动时的关机行为」设置,以及用户数据中是否包含自动关机的脚本
内容的提问来源于stack exchange,提问作者josue
相关产品推荐
相关产品推荐

