我希望 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 更不有序。