Amazon Web Services EC2实例是否可以自我终止?亚马逊运行了一个多小时后,是否有任何允许实例终止自身的内容(“ Hara-Kiri”)?我可以更改正在运行的实例上的脚本以自行执行此操作,但是这可能会失败,并且我不想编辑映像,因此我希望Amazon杀死该实例。
Amazon Web Services EC2实例是否可以自我终止?亚马逊运行了一个多小时后,是否有任何允许实例终止自身的内容(“ Hara-Kiri”)?我可以更改正在运行的实例上的脚本以自行执行此操作,但是这可能会失败,并且我不想编辑映像,因此我希望Amazon杀死该实例。
Answers:
要使实例自身终止,请执行以下两个步骤:
--instance-initiated-shutdown-behavior terminate
在AWS控制台或API调用上使用或等效名称启动实例。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
提供的,但是您会在评论中找到更新和其他宝石。
你可以这样做
ec2-terminate-instances $(curl -s http://169.254.169.254/latest/meta-data/instance-id)
ec2将获取其当前实例ID并自行终止。
希望这会起作用
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
希望这对您有帮助!
这是我的自我终结脚本
$ 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控制台中,转到“实例设置”,将“关机行为”更改 为“停止”。
配置/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 / EBS与On / Off Schedule一起使用。
我有类似的需求,当时我的Web应用程序启动了EC2实例。我不相信Web应用程序停止/终止实例,所以我创建了一个脚本来运行在一个单独的进程中,称为“ feeder”。Feeder负责停止/终止实例。Web应用程序必须定期请求供稿器“供稿”实例。如果实例“饿死”(在超时时间内未喂饱),则馈送器将停止/终止它。两个供料器可以在不同的机器上同时运行,以防止一个供料器过程出现问题。换句话说,实例在压力开关上运行。释放压力后,实例将停止/终止。这也使我可以在多个用户之间共享一个实例。
对于最初的问题,可以在EC2实例本身中运行的Feeder无需先验地知道任务将运行多长时间,但是这给应用程序提供了周期性的负担。如果笔记本电脑关闭,则实例将关闭。
该供稿器位于此处:https : //github.com/alessandrocomodi/fpga-webserver,并具有开放源代码许可。