EC2降级时的spot实例终止通知

3
我需要在我的竞价实例被调度终止时运行一个清理脚本。我有两个终止原因:
  1. 竞价实例的价格超过了我的出价
  2. 由自动扩展组的缩放策略引起的缩减(基于 5 分钟内平均集群 CPU 使用率,随机实例将被终止)。
我喜欢下面这篇this博客中的简单脚本。它涵盖了第一种情况,并在关机前给我 2 分钟的时间进行清理。
是否有一种简单的方法来获取第二种情况的这样 2 分钟的通知?
也许警告将通过相同的 URL 可用?
#!/bin/bash
while true
  do
    if [ -z $(curl -Is http://169.254.169.254/latest/meta-data/spot/termination-time | head -1 | grep 404 | cut -d \  -f 2) ]
      then
        logger "Running shutdown hook."
        # Call your shutdown script here.
        break
      else
        # Spot instance not yet marked for termination.
        sleep 5
    fi
  done

但是如果EC2实例不在自动扩展组中怎么办?在我的情况下,我正在使用EMR,在其中所有实例都是任务实例组下的spot实例。而且,在EMR中,没有自动扩展组的概念。我如何收到终止信号的通知? - devsda
1个回答

3

自动扩展钩子允许您创建一个事件通知,告知实例即将被终止(或启动)。

好处是:您会获得更多时间。默认时间为60分钟,您可以发送心跳消息以延长时间,或者在清理完成后通知服务。如果您没有回应,则事件超时并继续完成。

不足之处是:通知不会直接发送给实例本身,就像中断警告一样。它们会发送到SNS或SQS。您要么需要订阅实例的通知(例如,在实例启动时向SNS主题订阅每个实例),要么需要自己编写系统来管理消息并与实例通信。


1
我不相信它们会这样做,因为临时实例没有因定价原因而被“回收利用”,而这似乎是终止时间的目的... 但我可能错了。 - Michael - sqlbot
1
没问题,我会检查的。感谢你的时间。 - Artem Fedosov
@Michael-sqlbot [在上面的评论中添加] 我如何收到终止信号的通知? - devsda
@Michael-sqlbot,我已经进行了所有的调查。现在,我只需要回答“当EC2实例不在ASG下时,如何得到终止通知?” 一个有用的链接-https://aws.amazon.com/blogs/aws/new-ec2-spot-instance-termination-notices/ - devsda
1
@devsda,我并不是想暗示你没有这样做。如果我的评论让你有这种误解,请接受我的道歉。你提到的链接也出现在原始问题所提到的博客文章正文中。那是我所知道的唯一发现即将终止的spot实例的机制——轮询元数据端点。 - Michael - sqlbot
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接