关闭自动扩展组的 EC2 实例有什么缺点吗?

关闭自动扩展组的 EC2 实例有什么缺点吗?

我希望 EC2 实例在 24 小时后自动终止。

我使用在实例启动时执行的脚本来执行此操作:

shutdown | at now + 24 hours

实例终止时,实例会关闭并且 EBS 卷也会终止,所以这没问题。

在控制台中,实例在一段时间内被指示为不可访问,直到被声明为终止。我想知道以这种方式关闭实例是否是坏习惯,以及使用 AWS CLI 终止它是否更好。

文档说:

当使用terminate-instances命令终止EC2实例时,将在操作系统级别注册以下内容:

  • API 请求将向客人发送按钮按下事件。

  • 按钮按下事件会导致各种系统服务停止。systemd 处理系统的正常关机。正常关机由来自虚拟机管理程序的 ACPI 关机按钮按下事件触发。

  • 将启动 ACPI 关闭。
  • 实例将在正常关机过程退出时关闭。没有可配置的操作系统关机时间。

该实例位于运行 REST Web 服务的自动扩展组中,因此很可能正在执行请求。

  • 仍在执行的请求会发生什么?(REST 服务的超时时间为 30 秒,因此请求的运行时间不会超过该时间。)
  • shutdown与使用 AWS CLI 或自动扩展组终止相比,使用终止的有序性是否较低?

答案1

在关闭前 1-2 分钟,使用 detach-instances api 将实例从自动缩放组中删除。如果已连接,detach-instances api 还会从负载均衡器中删除实例,请参阅https://docs.aws.amazon.com/en_pv/autoscaling/ec2/userguide/detach-instance-asg.html了解更多信息。

例如:

aws 自动缩放分离实例 --实例 ID i-05b4f7d5be44822a6 \ --自动缩放组名称 my-asg --should-decrement-desired-capacity

如果不从负载均衡器中删除该实例,则在该实例上运行的任何进行中的请求都将出现错误,因为当侦听过程终止时,实例的操作系统关闭 tcp 连接时,负载均衡器将看到连接关闭事件。

所以是的,通过关闭来终止比脱离 ASG 更不有序。

相关内容