为什么我已终止的 EC2 实例会自动重新启动?

上次更新时间:2022 年 1 月 12 日

我终止了一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例。随后,我的账户中自动启动了另一个相同类型的实例。为什么会这样,如何才能阻止新实例重新启动?

简短描述

某些服务允许自动启动实例以代替已终止的实例。这样可以提高应用程序的容错能力。

例如:

  • 您可以将 Amazon EC2 Auto Scaling 组配置为启动替换正在进行维护的实例的实例。
  • AWS Elastic Beanstalk 环境通常默认包括 Auto Scaling 组。
  • 您可以使用请求类型“维护”来配置 EC2 队列。在此使用场景中,EC2 队列将会针对您的所需容量发出异步请求,并通过自动补充任何中断的 Spot 实例来保持容量。
  • 您可以将 Spot 队列请求类型配置为“维护”。在此使用场景中,Spot 队列将会针对您的所需容量发出异步请求,并通过自动补充任何中断的 Spot 实例来保持容量。

要阻止服务启动替换实例,请执行以下操作:

解决方法

注意:以下操作将永久删除选定的 AWS 资源。在继续执行此解决方案之前,请先创建 EC2 实例的备份。如有必要,备份允许您恢复到以前的工作状态。

删除 Auto Scaling 组

1.    记下重新启动的实例的实例 ID。

2.    确认是哪个 Auto Scaling 组导致重新启动:
打开 Amazon EC2 控制台。Amazon EC2 资源是特定于区域的。请确保您位于正确的区域。如果所在区域不正确,请从屏幕顶部的导航栏中选择正确的区域。
在左侧导航窗格中选择 Auto Scaling 组,然后在新窗口中将其打开。
选择 Auto Scaling 组,然后选择活动历史记录选项卡。
验证重新启动的实例的实例 ID。
注意:如果实例 ID 不匹配或您在此区域中没有任何 Auto Scaling 组,请跳至下列终止 Elastic Beanstalk 环境部分。

3.    依次选择 Actions(操作)、Delete(删除)。

4.    选择 Yes, delete(是,删除)。

5.    从左侧导航窗格中选择 Instances(实例)。实例将终止,且不会启动新实例。

终止 Elastic Beanstalk 环境

1.    打开 AWS Elastic Beanstalk 控制台。Amazon EC2 资源是特定于区域的。确保您位于正确的区域,如果所在区域不正确,请从屏幕顶部的导航栏中选择正确的区域。

2.    选择 Environments(环境),然后从列表中选择环境的名称。

3.    验证重新启动的 EC2 实例的名称与 Elastic Beanstalk 环境的名称相同。

注意:如果实例 ID 不匹配,请跳至下面的 Delete the EC2 Fleet(删除 EC2 队列)部分。

4.    选择 Environment actions(环境操作),然后选择 Terminate environment(终止环境)。

5.    确认环境终止。Elastic Beanstalk 可能需要几分钟时间才能终止在环境中运行的 AWS 资源。

删除 EC2 队列

EC2 队列只能通过 API 或 AWS CLI 可用。此处我们使用 AWS CLI 删除队列。

1.    确保您已在计算机上安装配置 AWS CLI。

2.    在继续操作之前,请确保您位于正确的区域中,如果不是,请通过运行以下命令设置正确的区域:

aws configure

3.    通过运行以下命令确认您是否已有 EC2 队列:

aws ec2 describe-fleets

4.    如需验证要重新启动的 EC2 实例 ID,请运行以下命令,以检查与特定 EC2 队列相关的信息。在以下命令中,将 fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE 替换为您的 EC2 队列 ID。

aws ec2 describe-fleet-instances --fleet-id fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE

注意:如果实例 ID 不匹配,请跳至下面的 Cancel the Spot Fleet(取消 Spot 队列)部分。

5.    运行以下命令以删除 EC2 队列,并终止队列中当前正在运行的实例。在以下命令中,将 fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE 替换为您的 EC2 队列 ID。

aws ec2 delete-fleets --fleet-ids fleet-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE --terminate-instance

取消 Spot 队列

1.    打开 Amazon EC2 控制台 Amazon EC2 资源是特定于区域的。确保您位于正确的区域,如果所在区域不正确,请从屏幕顶部的导航栏中选择正确的区域。

2.    选择 Spot Requests(Spot 请求)。

3.    确认是哪个 Spot 队列请求导致重新启动。选择您的 Spot 队列请求。要查看配置详细信息,请参阅订阅

4.    要验证 Spot 队列中的 Spot 实例,请选择 Instances(实例)。

5.    选择您的 Spot 队列请求。

6.    依次选择 Actions(操作)、Cancel spot request(取消 Spot 请求)。

7.    在 Cancel spot request(取消 Spot 请求)中,确认您想要取消 Spot 队列。如果您想要终止当前实例以及由此 Spot 队列重新启动的实例,请确保已选中 Terminate instances (终止实例)。准备就绪后,选择 Confirm(确认)。

或者

您可以使用以下 cancel-spot-fleet-requests 命令取消指定的 Spot 队列请求并终止实例。在以下命令中,将 sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE 替换为您的 Spot 队列 ID。

aws ec2 cancel-spot-fleet-requests --spot-fleet-request-ids sfr-73fbd2ce-aa30-494c-8788-1cee4EXAMPLE \--terminate-instances

这篇文章对您有帮助吗?


您是否需要账单或技术支持?