Как включить / выключить облачные экземпляры в рабочее время

Я решил создать облачные экземпляры в AWS, Azure и Rackspace. Однако мне нужно выключить свои экземпляры в конце дня и утром, так как это будет вдвое меньше затрат на хостинг (они предназначены для разработки).

Я посмотрел на несколько управленческих служб, но они взорвали мне мозги. Есть ли простой способ сделать это?

8 ответов

Решение

Подход

Вы всегда можете накатить свое собственное решение, поскольку большинство облачных провайдеров предлагают соответствующий API для запуска / остановки экземпляров по требованию (или даже по расписанию), что, разумеется, и используют эти службы управления - Java-интерфейс AmazonEC2 предлагает все соответствующие методы, например (среди многих других), в частности:

Сценарии (EC2)

Наиболее простой подход для этого в отношении Amazon EC2 состоит в том, чтобы создать для себя некоторые скрипты Python с помощью превосходного boto (интегрированного интерфейса для текущих и будущих инфраструктурных сервисов, предлагаемых Amazon Web Services), которое предоставляет все методы EC2, упомянутые выше; затем вы можете запустить эти сценарии по запросу или через планировщик операционной системы.

Через непрерывную интеграцию / автоматизацию (EC2)

Другой вариант - облегчить работу сервера непрерывной интеграции в качестве механизма автоматизации (иногда это упускается из виду в этих системах) на тот случай, если вы все равно его запустите; это позволит вам запускать / останавливать экземпляры по требованию или по расписанию, аналогично cron.

Мы делаем именно это с помощью плагина Bamboo AWS (он с открытым исходным кодом и код доступен в Bitbucket), см. Мой ответ на Как запустить и остановить экземпляр Amazon EC2 программно в Java для получения дополнительной информации об этом подходе. Хотя Atlassian Bamboo является коммерческим предложением, должно быть что-то подобное для популярных решений с открытым исходным кодом, таких как, например, Jenkins.

лазурь

ОСТАЛЬНОЕ:

Это можно сделать для развертываний Azure с помощью REST API управления службами Windows Azure. Поскольку это REST, вы можете использовать большинство языков программирования для доступа к нему.

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

PowerShell:

Или вы можете управлять своими развертываниями таким же образом, но вместо использования REST вы можете использовать командлеты Azure PowerShell. Я сделал это сам, и это прекрасно работает.

Чтобы начать работу, есть хорошее руководство по использованию PowerShell для развертывания приложений Azure.

Кроме того, если вы еще не знали, я должен также упомянуть, что в Azure есть 3-месячная бесплатная пробная версия, если вы просто хотите сократить расходы во время разработки.

ПРИМЕЧАНИЕ. По состоянию на июнь 2013 года экземпляры IaaS могут быть переведены в состояние "остановлено (освобождено)". В этом состоянии вы платите только за хранение любых дисков, связанных с виртуальной машиной. Исходный ответ ниже описывает экземпляр виртуальной машины, которая находится в "остановленном", но не освобожденном состоянии. В настоящее время состояние освобождения является значением по умолчанию для действий остановки виртуальной машины, выполняемых через портал управления Azure.

Единственный способ сделать это сегодня в Widows Azure - это удалить развертывание.

Если вы останавливаете службу, вам все равно выставляется счет (например, за аренду офисных помещений, вы платите за нее, даже если ее нет), и вы не можете установить количество экземпляров равным нулю. Можно использовать один вариант - просто уменьшить количество экземпляров до абсолютного минимума (1), а затем увеличить его в течение необходимых часов. Но экономическая выгода от этого будет зависеть от размера ваших экземпляров.

Старый поток, я знаю, но в 2014 году Microsoft представила "Runbook" для Azure, которые можно использовать для автоматизации, включая запланированные запуски и завершения работы. Как упомянуто выше, убедитесь, что вы находитесь в остановленном (освобожденном) состоянии, в отличие от только что остановленного, чтобы предотвратить обвинения.

Больше информации:

Скрипт для остановки ваших виртуальных машин

Автоматизация Azure, официальные документы MS.

Да, есть Autobook Runbook, с помощью которого мы можем планировать работу. Я создал скрипт для остановки (выделенной) виртуальной машины Azure.

https://gallery.technet.microsoft.com/Deallocate-all-VM-under-79049c69

Пожалуйста, прочитайте о том, как использовать runbook http://azure.microsoft.com/blog/2014/06/19/azure-automation-runbook-management/

Распределение и остановка разные, так как остановка VM также будет нести расходы.

Лучшая статья об автоматизации + включение / выключение виртуальных машин, которую я нашел до сих пор. [05 февраля 2015]. http://clemmblog.azurewebsites.net/using-azure-automation-start-und-stop-virtual-machines-schedule/

Обратитесь к этой статье, там есть несколько вариантов включения / выключения ваших экземпляров внутри AWS.

  • AWS Datapipeline
  • AWS Lambda запланированные события
  • Запланированный Cron на экземпляре EC2
  • Запланированное масштабирование группы автоматического масштабирования

Так что в вашем случае я бы порекомендовал следующее:

Для AWS:

Через Команду Shell, как команды CLI AWS: См. Включение / выключение экземпляров Cloud с помощью AWS Pipeline этот метод будет инициировать отдельный экземпляр EC2, который будет запускаться и завершаться для каждого вызова API AWS, что время выполнения влияет на ваш счет.

Через такие языки программирования, как Node.js / Python: см. Включение / выключение экземпляров Cloud с помощью AWS Lambda. Задача, выполняемая два раза в день, обычно менее 3 секунд, с использованием памяти до 128 МБ, обычно стоит менее 0,0004 долларов США в месяц.

Для Azure и Rackspace (или других ваших платформ):
Используйте описанные выше инструменты для предоставления соответствующего API для запуска / остановки экземпляров по требованию.

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

Рекомендуемое решение для AWS:

AWS Data Pipeline идеально подходит для этой задачи. Data Pipeline использует технологии AWS и может быть настроен на выполнение команд CLI AWS по заданному расписанию без внешних зависимостей. Data Pipeline может записывать журналы в S3 и работает в контексте роли IAM, что исключает ключевые требования к управлению. Data Pipeline также является экономически эффективным; например, уровень бесплатного конвейера данных можно использовать для остановки и запуска экземпляров один раз в день.

https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-ec2-instances/

AWS

AWS SDK - ваш лучший выбор, но я использую TotalCloud.io для запуска и остановки инстансов на уровне бесплатного пользования. Очень настраиваемый.

Легко настроить.

Другие вопросы по тегам