自终止AWS EC2实例?

时间:2012-05-10 20:08:24

标签: amazon-ec2 amazon-web-services terminate

Amazon Web Services EC2实例是否可以自行终止?亚马逊是否有任何允许实例在运行超过一小时后终止自身(“Hara-Kiri”)的东西?我可以更改正在运行的实例上的脚本来执行此操作,但这可能会失败,我不想编辑图像,所以我希望亚马逊能够杀死该实例。

5 个答案:

答案 0 :(得分:85)

要让实例自行终止,请执行以下两个步骤:

  1. 使用--instance-initiated-shutdown-behavior terminate或AWS控制台或API调用上的等效项启动实例。
  2. 以root身份运行shutdown -h now。在Ubuntu上,您可以使用以下命令将其设置为55分钟:

    echo "sudo halt" | at now + 55 minutes
    
  3. 我在其他选项上写了一篇文章,以实现同样的“一小时终止”目标:

      

    在Amazon EC2上自动终止临时实例
      http://alestic.com/2010/09/ec2-instance-termination

    这篇文章最初是在instance-initiated-shutdown-behavior可用之前编写的,但你会在评论中找到更新和其他宝石。

答案 1 :(得分:14)

你可以这样做

ec2-terminate-instances $(curl -s http://169.254.169.254/latest/meta-data/instance-id)

ec2将获取其当前实例ID并自行终止。

答案 2 :(得分:7)

希望这会起作用

instanceId = $(curl http://169.254.169.254/latest/meta-data/instance-id/)

/usr/bin/aws ec2 terminate-instances --instance-ids $instanceId --region us-east-1

希望这能帮到你!!!

答案 3 :(得分:3)

以下是 自我终止

的脚本
$ EC2_INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
$ echo "ec2-terminate-instances $EC2_INSTANCE_ID" | at now + 55 min || die 'cannot obtain instance-id'

如果您想在自我终止上将其指定为 自我停止 ,则只能进行一次。

EC2 Console 中转到实例设置,将关机行为更改为停止。<登记/> 配置 /etc/cloud/cloud.cfg ,您可以参考 how to run a boot script using cloud-init
按照Eric Hammond的回答,将命令放在一个文件中,并在scripts-per-boot路径中找到它:

$ echo '#!/bin/sh' > per-boot.sh
$ echo 'echo "halt" | at now + 55 min' >> per-boot.sh
$ echo 'echo per-boot: `date` >> /tmp/per-boot.txt' >> per-boot.sh
$ chmod +x per-boot.sh
$ sudo chown -R root per-boot.sh
$ sudo mv -viu per-boot.sh /var/lib/cloud/scripts/per-boot

Reboot您的实例,检查脚本是否已执行:

$ cat /tmp/per-boot.txt 
per-boot: Mon Jul 4 15:35:42 UTC 2016

如果是这样,以防您忘记停止实例,它会向您保证,当实例运行55分钟或您在脚本中设置的任何时间停止时,实例将自动终止。

Broadcast message from root@ip-10-0-0-32
        (unknown) at 16:30 ...

The system is going down for halt NOW!

PS:对于每个人都想使用自动停止,有一件事你应该注意,并非所有EC2类型都在重启时自我恢复。我建议将EC2-VPC/EBS On/Off Schedule 一起使用。

答案 4 :(得分:-1)

我有类似的需求,当时我的Web应用程序启动了EC2实例。我不相信Web应用程序停止/终止实例,所以我创建了一个脚本来运行在一个单独的进程中,称为“ feeder”。 Feeder负责停止/终止实例。 Web应用程序必须定期请求供稿器“供稿”实例。如果实例“饿死”(在超时时间内未喂饱),则馈送器将停止/终止它。可以在不同的机器上同时运行两个进纸器,以防止一个进纸器过程出现问题。换句话说,实例在压力开关上运行。释放压力后,实例将停止/终止。这也使我可以在多个用户之间共享一个实例。

对于最初的问题,可以在EC2实例本身中运行的feeder无需先验地知道任务将运行多长时间,但是这给应用程序提供了周期性的负担。如果笔记本电脑关闭,则实例将关闭。

Feeder住在这里:https://github.com/alessandrocomodi/fpga-webserver,并具有开放源代码许可。