使用aws ec2 run-instances创建Spot实例,如何避免被AWS终止后自动重启?
解决Spot实例被AWS终止后自动重启的问题
Spot实例被AWS终止后自动重启,通常是两种情况导致的,对应解决方法如下:
1. 实例属于Auto Scaling组(ASG)
如果你的Spot实例是Auto Scaling组的一部分——哪怕是用run-instances创建后手动加入ASG的——ASG会自动维持设定的实例数量,终止的实例会被立刻替换。要停止这种自动重启:
- 降低ASG的期望容量到目标值(比如设为0,就不会再启动新实例)
- 或者直接将该实例从ASG中移除
用AWS CLI调整期望容量的命令:
aws autoscaling update-auto-scaling-group --auto-scaling-group-name YOUR_ASG_NAME --desired-capacity 0
2. 单独创建的Spot实例(未加入ASG)
如果是单独用run-instances创建的Spot实例,自动重启大概率是因为开启了实例恢复功能(AWS会在实例因硬件故障等问题终止后自动恢复)。要关闭这个功能:
aws ec2 modify-instance-attribute --instance-id YOUR_INSTANCE_ID --instance-recovery disabled
另外,创建Spot实例时可以直接指定禁用实例恢复,从根源避免自动重启:
aws ec2 run-instances \ --image-id YOUR_AMI_ID \ --instance-type YOUR_INSTANCE_TYPE \ --spot-price "YOUR_SPOT_PRICE" \ --instance-market-options '{"MarketType": "spot", "SpotOptions": {"SpotInstanceType": "one-time", "InstanceRecovery": "disabled"}}' \ # 加上你的其他参数,比如密钥对、安全组等
这里SpotInstanceType=one-time指定该Spot实例是一次性的,中断后会被终止且不会重新请求;如果用persistent类型,默认可能会尝试重新请求实例,但一般不会自动重启,除非搭配了ASG。
额外注意
如果实例开启了终止保护,AWS无法正常终止实例,但如果是手动终止后出现异常重启,可先关闭终止保护:
aws ec2 modify-instance-attribute --instance-id YOUR_INSTANCE_ID --no-disable-api-termination
内容的提问来源于stack exchange,提问作者AJ222
相关产品推荐
相关产品推荐

