如何测试AWS Spot实例启停?模拟停止重启行为测试自恢复应用
模拟AWS Spot实例停止重启行为的测试方法
嗨Ashish,我完全明白你的需求——你想测试应用在Spot实例被AWS自动停止后能否自动恢复,但AWS GUI里确实没有手动停止运行中Spot实例的选项(只能终止或取消请求)。下面几个方法可以帮你完美模拟这个场景:
方法一:用AWS CLI手动停止并重启Spot实例
这是最直接的方式,和AWS自动停止Spot实例的行为几乎完全一致:
- 先获取你的Spot实例ID(可以在EC2控制台的实例列表里找到)
- 打开终端,运行停止命令:
aws ec2 stop-instances --instance-ids <你的实例ID> - 等实例进入
stopped状态后,你可以手动启动它(或者设置自动启动规则)来测试应用恢复:aws ec2 start-instances --instance-ids <你的实例ID>
划重点:这个操作不会取消你的Spot请求,只要请求处于活跃状态,后续AWS满足价格/需求条件时,依然会自动重启实例,完全匹配你要测试的真实场景。
方法二:用AWS Systems Manager自动化完整流程
如果你想模拟“自动停止→等待→自动重启”的完整流程,可以用Systems Manager创建自动化文档:
- 进入AWS Systems Manager控制台,打开「自动化」页面,点击「创建自动化文档」
- 选择「新建文档」,输入以下YAML内容(替换实例ID):
description: 模拟Spot实例停止重启流程 schemaVersion: '0.3' parameters: InstanceId: type: String description: 目标Spot实例ID WaitTime: type: String description: 停止后等待的时间(比如PT5M表示5分钟) default: PT5M mainSteps: - name: StopInstance action: 'aws:executeAwsApi' inputs: Service: ec2 Api: StopInstances InstanceIds: - '{{ InstanceId }}' - name: WaitForStopped action: 'aws:waitForAwsResourceProperty' inputs: Service: ec2 Api: DescribeInstances InstanceIds: - '{{ InstanceId }}' PropertySelector: '$.Reservations[0].Instances[0].State.Name' DesiredValues: - stopped - name: WaitBeforeStart action: 'aws:sleep' inputs: Duration: '{{ WaitTime }}' - name: StartInstance action: 'aws:executeAwsApi' inputs: Service: ec2 Api: StartInstances InstanceIds: - '{{ InstanceId }}' - 保存文档后,点击「执行自动化」,输入你的实例ID和等待时间,就能一键触发完整的停止重启流程,完美模拟AWS的自动行为。
注意事项
- 确保你的Spot实例使用的是EBS根卷:如果是实例存储卷,停止实例会丢失所有数据,这和AWS自动停止Spot实例的行为一致(实例存储卷的Spot实例被停止后数据会丢失),测试时要注意这一点。
- 测试后检查Spot请求状态:确保你的Spot请求仍处于「活跃」状态,这样AWS后续才会自动重启实例。
内容的提问来源于stack exchange,提问作者Ashish Mittal
相关产品推荐
相关产品推荐

