2012-05-10 2 views
52

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

+1

Чтобы уточнить, мне нужен аварийный выключатель, если экземпляр длится больше X часов. Мой вариант использования заключается в том, что я использую EC2 Amazon для быстрого вращения экземпляра, запускаю некоторый процесс на Ubuntu (это занимает около 5 минут), а затем закрывается. Это контролируется приложением Windows для настольных компьютеров. В большинстве случаев это работает как шарм, однако иногда пользователь закрывает свой ноутбук и уходит на каникулы в течение недели и угадывает, что у меня есть плата за AWS за 168 часов, которые мне не нужны. Если кто-то хочет получить более подробную информацию, я могу рассказать вам все об этом. Steve – SteveB

ответ

72

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

  1. Запустите экземпляр с --instance-initiated-shutdown-behavior terminate или эквивалент на консоли или API вызова AWS.
  2. Пробег shutdown -h now как корень. В Ubuntu, вы можете установить это произойдет через 55 минут с помощью:

    echo "sudo halt" | at now + 55 minutes 
    

я написал статью некоторое время назад на другие варианты для достижения этой же «заканчиваются в час» Цель:

Автоматическое прекращение временных экземпляров на Amazon EC2
http://alestic.com/2010/09/ec2-instance-termination

статья была Origina lly, написанный до instance-initiated-shutdown-behavior, был доступен, но вы найдете обновления и другие драгоценные камни в комментариях.

+0

Эрик, спасибо, но я не вижу, где я могу сделать # 1 на консоли AWS. Я вижу настройку «Завершение работы» в «Мастере запросов экземпляров», но единственными параметрами являются «Завершить» и «Остановить». Это фактически не заставляет экземпляр останавливаться через час. Я собираюсь проверить API AWS .NET, который я использую, чтобы запустить экземпляр, чтобы увидеть, могу ли я сделать что-то подобное. – SteveB

+4

Вы устанавливаете «поведение выключения» на «завершение», а затем выполняете «остановку» или «выключение -h сейчас» в экземпляре, когда вы хотите, чтобы он завершился. Запланируйте заранее, используя «at». (1) и (2) требуются шаги в одном процессе, а не альтернативные подходы. –

+1

Любая причина для выполнения «shutdown -h now» в отличие от «shutdown -P now»? –

9

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

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

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

+3

Мне нравится этот метод ... но он требует, чтобы у вас были учетные данные, установленные в экземпляре для запуска terminate-экземпляров. Это не всегда так, и вы получите ошибку «Client.UnauthorizedOperation». – RaveTheTadpole

+0

Вы можете настроить профиль экземпляра, который устранит необходимость настройки учетных данных. – galva

5

Надеемся, что это будет работать

instanceId = $(curl http://169.254.169.254/latest/meta-data/instance-id/) 

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

Надежда это поможет вам !!!

2

Вот мой сценарий для самоограниченного

$ 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 Console Перейти к Instance Settings, изменить Shutdown Поведение к Stop.
Настроить /etc/cloud/cloud.cfg, вы можете обратиться к how to run a boot script using cloud-init.
Follow ответ от 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 

Reboot экземпляра, проверьте, если скрипт выполняется:

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

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

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

The system is going down for halt NOW! 

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