Self-Terminating AWS EC2 Instance?

Есть ли способ, которым экземпляры Amazon Web Services EC2 могут быть завершающими? Есть ли у Amazon что-нибудь, что позволяет экземпляру прекратить себя ( "Хара-Кири" ) после запуска более часа? Я мог бы изменить сценарии на исполняемом экземпляре, чтобы сделать это сам, но это может потерпеть неудачу, и я не хочу редактировать изображение, поэтому я хотел бы, чтобы Amazon убил экземпляр.

Ответ 1

Чтобы выполнить завершение экземпляра, выполните оба этих шага:

  • Запустите экземпляр с --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 был доступен, но вы найдете обновления и другие драгоценные камни в комментариях.

Ответ 2

Вы можете сделать это

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

ec2 получит свой текущий идентификатор экземпляра и завершит сам.

Ответ 3

Надеюсь, это сработает

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

Надеюсь, это поможет вам!

Ответ 4

Вот мой script для Self-Terminating

$ 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 в Self-Terminating, вы можете сделать это только один раз.

В Консоль EC2 перейдите к настройкам экземпляра, измените поведение выключения для остановки.
Настройте /etc/cloud/cloud.cfg, вы можете обратиться к как запустить загрузку script с помощью cloud-init.
Следуйте ответам Эрика Хаммонда, поместите команду в файл и найдите ее в скриптах за загрузку.

$ 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

Перезагрузите свой экземпляр, проверьте, выполняется ли script:

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

Если это так, на всякий случай, когда вы забыли остановить свой экземпляр, он заверяет вас в том, что экземпляр сам запустится как остановка, когда он запустится в течение 55 минут или в любое другое время, установленное в script.

Broadcast message from [email protected]
        (unknown) at 16:30 ...

The system is going down for halt NOW!

PS: Для всех желающих использовать Self-Stopping, нужно отметить, что не все типы EC2 являются самовосстановлением при перезапуске. Я рекомендую использовать EC2-VPC/EBS с Вкл./Выкл. Расписание.