自终止AWS EC2实例?

Ste*_*3p0 69 amazon-ec2 terminate amazon-web-services

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

Eri*_*ond 88

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

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

    echo "sudo halt" | at now + 55 minutes
    
    Run Code Online (Sandbox Code Playgroud)

我在一段时间后写了一篇文章来完成同样的"一小时终止"目标:

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

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

  • 将"关闭行为"设置为"终止",然后在希望终止时在实例上执行"halt"或"shutdown -h now".使用"at"提前安排.(1)和(2)是单个过程中的必需步骤,而不是替代方法. (6认同)
  • 有什么理由要进行“ shutdown -h now”而不是“ shutdown -P now”? (2认同)
  • @EricHammond我问的原因是我的实例在大约5%的时间内无法关闭(它们陷入运行的楔形状态,但不会终止且无法ssh'd)。只是想知道这是否可能是原因。 (2认同)
  • @DustinBoswell可能是您使用的“停止”或“关闭-h”与关闭电源不同,具体取决于系统设置。尝试使用“ sudo poweroff”(或“ sudo shutdown -P now”,但是我很喜欢“ poweroff”的冗长性)。 (2认同)

Tom*_*mmy 17

你可以这样做

ec2-terminate-instances $(curl -s http://169.254.169.254/latest/meta-data/instance-id)
Run Code Online (Sandbox Code Playgroud)

ec2将获得其当前实例ID并终止自身.

  • 我喜欢这种方法......但它要求您在实例上设置凭据以运行terminate-instances.情况并非总是如此,您将收到"Client.UnauthorizedOperation"错误. (4认同)
  • 您可以设置实例配置文件,这将消除对设置凭据的需要。 (2认同)

小智 8

希望这会奏效

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
Run Code Online (Sandbox Code Playgroud)

希望这能帮到你!!!


Che*_*ana 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'
Run Code Online (Sandbox Code Playgroud)

如果要将其分配为“ 自终止自动停止 ” ,则只能执行一次。

在您的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
Run Code Online (Sandbox Code Playgroud)

重新启动您的实例,检查脚本是否已执行:

$ cat /tmp/per-boot.txt 
per-boot: Mon Jul 4 15:35:42 UTC 2016
Run Code Online (Sandbox Code Playgroud)

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

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

The system is going down for halt NOW!
Run Code Online (Sandbox Code Playgroud)

PS:对于每个想使用Self-Stopping的人,您应该注意一件事,并非所有EC2类型在重启时都是自我恢复的。我建议将EC2-VPC / EBSOn / Off Schedule一起使用