88

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

4

5 回答 5

109

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

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

    echo "sudo halt" | at now + 55 minutes
    

不久前,我写了一篇关于其他选项的文章,以实现同样的“在一小时内结束”目标:

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

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

于 2012-05-10T21:32:14.067 回答
23

你可以这样做

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

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

于 2014-04-07T13:18:18.030 回答
11

希望这会奏效

instanceId=$(curl http://169.254.169.254/latest/meta-data/instance-id/)
region=$(curl http://169.254.169.254/latest/dynamic/instance-identity/document | grep region | awk '{print $3}' | sed  's/"//g'|sed 's/,//g')

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

希望这对你有帮助!!!

于 2016-02-03T11:09:05.047 回答
6

这是我的自我终止脚本

$ 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'

如果您想将其分配为Self-Stopping on Self-Terminating,您只能执行一次。

在您的EC2 控制台中,转到Instance Settings,将Shutdown Behavior更改 为Stop
配置/etc/cloud/cloud.cfg,您可以参考如何使用 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

重启你的实例,检查脚本是否被执行:

$ 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:对于每个想要使用Self-Stopping的人来说,您应该注意的一件事是,并非所有 EC2 类型在重启时都能自我恢复。我建议使用EC2-VPC/EBSOn/Off Schedule

于 2016-07-04T14:11:58.727 回答
-1

我也有类似的需求,让 Web 应用程序启动 EC2 实例。我无法相信 Web 应用程序会停止/终止实例,因此我创建了一个脚本以在称为“馈送器”的单独进程中运行。馈线负责停止/终止实例。Web 应用程序必须定期请求馈送器“馈送”实例。如果一个实例“饿死”(在超时期限内没有被喂食),喂食器将停止/终止它。两个进料器可以在不同的机器上同时运行,以防止一个进料器过程出现问题。换句话说,实例在压力开关上运行。当压力释放时,实例停止/终止。这也允许我在多个用户之间共享一个实例。

对于最初的问题,可以在 EC2 实例本身中运行的馈送器消除了事先知道任务将运行多长时间的需要,但是它给应用程序提供了定期馈送的负担。如果笔记本电脑关闭,实例将关闭。

feeder 住在这里:https ://github.com/alessandrocomodi/fpga-webserver并拥有一个宽松的开源许可证。

于 2019-08-04T13:50:49.240 回答