Amazon ec2 自动终止AWS EC2实例?

Amazon ec2 自动终止AWS EC2实例?,amazon-ec2,amazon-web-services,terminate,Amazon Ec2,Amazon Web Services,Terminate,有没有一种方法可以使AmazonWebServicesEC2实例自动终止?Amazon是否有允许实例在运行超过一小时后自行终止(“Hara Kiri”)的功能?我可以更改正在运行的实例上的脚本以自行执行此操作,但这可能会失败,并且我不想编辑映像,因此我希望Amazon杀死该实例。要让实例自行终止,请执行以下两个步骤: 在AWS控制台或API调用上使用--实例启动的关机行为terminate或等效工具启动实例 以root用户身份运行shutdown-h。在Ubuntu上,您可以使用以下方法将此设置

有没有一种方法可以使AmazonWebServicesEC2实例自动终止?Amazon是否有允许实例在运行超过一小时后自行终止(“Hara Kiri”)的功能?我可以更改正在运行的实例上的脚本以自行执行此操作,但这可能会失败,并且我不想编辑映像,因此我希望Amazon杀死该实例。

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

  • 在AWS控制台或API调用上使用
    --实例启动的关机行为terminate
    或等效工具启动实例
  • 以root用户身份运行
    shutdown-h。在Ubuntu上,您可以使用以下方法将此设置为在55分钟内完成:

    echo "sudo halt" | at now + 55 minutes
    
  • 不久前,我写了一篇关于其他选项的文章,以实现同样的“一小时内终止”目标:

    自动终止Amazon EC2上的临时实例

    这篇文章最初是在
    实例启动的关机行为可用之前撰写的,但是您可以在评论中找到更新和其他精华。

    您可以这样做

    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
    

    希望这对你有帮助

    这是我的自我终止脚本

    如果要在自终止时将其指定为自停止,则只能执行一次

    在“转到实例”设置中,将关机行为更改为“停止”。
    配置/etc/cloud/cloud.cfg,您可以参考。
    按照中的答案,将命令放入文件中,并在路径中找到它:

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

    $ 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类型在重启时都是自动恢复的。我建议与您一起使用

    我也有类似的需求,我需要web应用程序启动EC2实例。我不能信任web应用程序停止/终止实例,所以我创建了一个脚本,在一个单独的进程中运行,称为“feeder”。馈线负责停止/终止实例。web应用程序必须定期请求feeder“馈送”实例。如果实例“饥饿”(未在超时时间内馈送),馈送器将停止/终止它。两台给料机可以在不同的机器上同时运行,以防止一台给料机工艺出现问题。换句话说,实例在压力开关上运行。释放压力时,实例停止/终止。这还允许我在多个用户之间共享一个实例

    对于最初的问题,可能在EC2实例本身中运行的feeder不需要事先知道任务将运行多长时间,但它会给应用程序带来提供定期feeds的负担。如果笔记本电脑关闭,实例将关闭


    馈线住在这里:并且拥有许可的开源许可证。

    只是澄清一下,如果实例持续时间超过X小时,我需要一个紧急关闭开关。我的使用案例是,我使用Amazon的EC2快速旋转一个实例,在Ubuntu上运行一些进程(大约需要5分钟),然后关闭自己。这由windows桌面应用程序控制。大多数时候,它就像一个符咒,然而,有时用户关闭他们的笔记本电脑,去度假一周,你猜怎么着,我有168小时的AWS费用,我不需要。如果有人想知道更多的细节,我可以告诉你。SteveEric,谢谢,但我不知道在AWS控制台上我能做什么。我在“请求实例向导”中看到了“关机行为”设置,但唯一的选项是“终止”和“停止”。这实际上并没有安排实例在一小时内停止。我将检查用于启动实例的AWS.NET API,看看是否可以执行类似的操作。将“关机行为”设置为“终止”,然后在希望实例终止时对其执行“暂停”或“立即关机”。使用“at”提前安排。(1) 和(2)是单个流程中必需的步骤,而不是替代方法。是否有理由使用“立即关闭-h”而不是“立即关闭-P”?@EricHammond我问的原因是我的实例在大约5%的时间内无法关闭(它们被卡在一个楔入状态中,在该状态下它们正在运行,但不会终止,也无法使用ssh)。我只是想知道这是否是原因。@DustinBoswell可能是因为您使用的“暂停”或“关机-h”与关机不同,具体取决于系统设置。试试“sudo poweroff”(或者“sudo shutdown-P now”,但我喜欢“poweroff”,因为它太冗长了)。。。但它要求您在实例上设置凭据以运行terminate实例。情况并非总是如此,您将收到一个“Client.UnauthorizedOperation”错误。您可以设置实例配置文件,这样就不需要设置凭据。@RaveTheTapple如果希望实例自行终止,它需要有权限自行终止。这是一个隐含的条件。谢谢!我稍微修改了一下,我不知道你是否使用jq,但我想我会分享其中的任何一种方式。region=$(curl-s | jq-r.region)
    $ cat /tmp/per-boot.txt 
    per-boot: Mon Jul 4 15:35:42 UTC 2016
    
    Broadcast message from root@ip-10-0-0-32
            (unknown) at 16:30 ...
    
    The system is going down for halt NOW!