Самозавершающийся экземпляр AWS EC2?
Есть ли способ, чтобы экземпляры Amazon Web Services EC2 могли быть самозавериваемыми? Есть ли у Amazon что-нибудь, что позволяет экземпляру завершать себя ("Хара-Кири") после того, как он работает более одного часа? Я мог бы изменить сценарии на работающем экземпляре, чтобы сделать это сам, но это может не сработать, и я не хочу редактировать изображение, поэтому я бы хотел, чтобы Amazon убил экземпляр.
4 ответа
Чтобы завершить работу экземпляра, выполните оба эти шага:
- Начать экземпляр с
--instance-initiated-shutdown-behavior terminate
или эквивалент на консоли AWS или вызове API. Бежать
shutdown -h now
как корень. В 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 получит свой текущий идентификатор экземпляра и завершит свою работу.
Надеюсь, это сработает
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
Надеюсь, это поможет вам!
Вот мой сценарий для самоотключения
$ 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.
Следуйте ответу Эрика Хаммонда, поместите команду в файл и найдите ее в пути 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: для всех, кто хочет использовать функцию самостопора, следует заметить, что не все типы EC2 являются самовосстанавливающимися при перезапуске. Я рекомендую использовать EC2-VPC/EBS с расписанием включения / выключения.
У меня была аналогичная потребность, когда у меня были веб-приложения, запускающие экземпляры EC2. Я не мог доверять веб-приложению, которое остановит / завершит работу экземпляров, поэтому я создал сценарий для запуска в отдельном процессе, который называется "податчик". Фидер несет ответственность за остановку / завершение работы экземпляра. Веб-приложение должно периодически запрашивать, чтобы источник "кормил" экземпляр. Если экземпляр "умирает от голода" (не получает корм в течение периода тайм-аута), фидер остановит / завершит его. Два питателя могут работать одновременно на разных машинах для защиты от проблем с одним процессом подачи. Другими словами, экземпляр работает от реле давления. Когда давление сбрасывается, экземпляр останавливается / прекращается. Это также позволяет мне делиться экземпляром между несколькими пользователями.
Что касается исходного вопроса, фидер, который может работать в самом экземпляре EC2, устраняет необходимость заранее знать, как долго будет выполняться задача, но накладывает на приложение бремя обеспечения периодической загрузки. Если ноутбук закрыт, экземпляр выйдет из строя.
Фидер находится здесь: https://github.com/alessandrocomodi/fpga-webserver и имеет разрешительную лицензию с открытым исходным кодом.