Запуск EC2 по расписанию - PullRequest
       65

Запуск EC2 по расписанию

22 голосов
/ 30 января 2012

Мне нужно запускать экземпляр EC2 в (скажем) 6 утра каждый день. Ограничения заключаются в том, что я хотел бы избежать запуска компьютера в течение всего дня для запуска или использования платного решения, такого как ylastic.

Решение на алестике является самым близким к настоящему моменту. Недостатком этого решения является то, что время запуска велико из-за времени, необходимого для установки пользовательского программного обеспечения и перемещения по данным.

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

Ответы [ 12 ]

10 голосов
/ 17 сентября 2013

Теперь вы можете сделать это с Amazon OpsWorks . После того, как вы настроили основной материал, просто создайте новый экземпляр и установите его тип масштабирования на «основанный на времени» (вы не можете изменить это по какой-то причине после создания экземпляра):

enter image description here

Теперь просто нажмите на категорию «Экземпляры> На основе времени» и настройте расписание:

enter image description here

9 голосов
/ 31 января 2012

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

  • Автоматическое масштабирование - - это веб-служба, предназначенная для автоматического запуска или завершения экземпляров Amazon Elastic Compute Cloud (Amazon EC2) на основе пользовательских политик, расписаний и проверок работоспособности.
  • AWS CloudFormation - предоставляет разработчикам и системным администраторам простой способ создавать и управлять коллекцией связанных ресурсов AWS, обеспечивать и обновлять ихупорядоченным и предсказуемым образом.

Когда запуск / остановка / перезагрузка экземпляра концептуально попадает в категорию manage последнего, он недоступен, так что (что, кстати, является причиной того, что мы предоставляем отдельное задание специально для этой функциональности в то время как устарело Плагин Bamboo AWS и его преемник Задачи для AWS ).

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

  • Хостинг-скрипты, например, были возможны довольнов то время как уже с помощью этих провайдеров заданий cron.

  • Учитывая текущий взрыв в решениях Платформа как услуга (PaaS) , есть довольно много провайдеров, которые позволятвам также нужно выполнять сценарии хоста и / или решения для непрерывной интеграции.

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

6 голосов
/ 04 декабря 2012

Существует еще один Java-инструмент EC2 Scheduler , который может помочь вам в этой проблеме.Для меня я хотел сделать сервер доступным для моей команды в рабочее время, даже если он никем не используется.Это приложение помогло мне достичь этой цели.Надеюсь, это тоже хорошо для тебя.

3 голосов
/ 14 июля 2016

Я бы предложил запланировать запуск EC2 с использованием AWS Lambda .

Рекомендация :
Проверить предложение с D.Svanlund , пользователь с Ace: 2000+ очков, на этой теме форума AWS .

Преимущество :
Вы надеваетеНе нужно ничего, кроме небольшого сценария или двух, которые вы запланировали.Нет экземпляра для запуска, просто быстрый вызов созданного вами скрипта.Выберите язык программирования по вашему выбору и используйте AWS SDK для выполнения операций с экземплярами.Довольно легкое решение,

Ориентировочная стоимость :
Задача, выполняемая два раза в день, обычно менее 3 секунд, с использованием памяти до 128 МБ, обычно стоит менее 0,0004 долларов США в месяц (См. Ссылка )

Планирование
В январе 2016 года запланированные события AWS Lambda были преобразованы в AWS CloudWatchСобытия * 1037 1038 * **.События CloudWatch имеют те же возможности планирования, что и запланированные события Lambda.Ограничение запланированных событий AWS Lambda в 5 запланированных событий на регион было увеличено до 50 правил CloudWatch Events.

Метод
Настройка типов EC2, подходящих для Пуск / СтопПланирование .Я рекомендую использовать EC2-VPC / EBS .Создайте IAM политику и роль .Доверительные отношения вновь созданной роли (см. Ссылка ).
Настройте триггер CloudWatch Events для Lambda с помощью Триггер функции какпоказано ниже.

CloudWatch Events - Schedule

Вот код функции start-server , для которой Runtime установлено на Node.js .
Измените YOUR_REGION и YOUR_INSTANCE_ID на ваши с Instance Console .

var AWS = require('aws-sdk');
exports.handler = function(event, context) {
 var ec2 = new AWS.EC2({region: 'YOUR_REGION'});
 ec2.startInstances({InstanceIds : ['YOUR_INSTANCE_ID'] },function (err, data) {
 if (err) console.log(err, err.stack); // an error occurred
 else console.log(data); // successful response
 context.done(err,data);
 });
};

Примечание. Если вам требуется функция stop-server , просто измените ec2.startInstances на ec2.stopInstances .Возможно, вам даже не понадобится функция остановки при использовании Автоматическое отключение при загрузке EC2

Ведение журнала
Если создана роль IAMс необходимыми разрешениями, тогда лямбда-функция будет создавать AWS CloudWatch Log Stream для каждого своего запуска.

AWS CloudWatch Log Stream

2 голосов
/ 14 марта 2013

Я только что столкнулся с той же проблемой и решил ее, используя Автоматическое масштабирование , как и многие из упомянутых здесь ответов. Для этого вам понадобится только образ AMI, который вы хотите запустить, и инструменты командной строки Autoscaling API .

После загрузки инструментов следуйте инструкциям в файле readme, чтобы установить переменные среды и добавить свои учетные данные AWS. Затем поместите следующие команды в командный файл (этот пример для Windows):

as-create-launch-config --key "MYLAUNCHCONFIGNAME" --instance-type t1.micro --image-id MYAMI-IMAGEID --launch-config "MYLAUNCHCONFIGNAME"
as-create-auto-scaling-group --auto-scaling-group "MYSCALINGGROUPNAME" --launch-configuration "MYLAUNCHCONFIGNAME" --availability-zones "us-east-1a,us-east-1b,us-east-1c,us-east-1d" --min-size 0 --max-size 0

rem Don't restart instance after shutdown
as-suspend-processes "MYSCALINGGROUPNAME" --processes ReplaceUnhealthy

rem Start instance at 22:15
as-put-scheduled-update-group-action --name "startMyInstance" --auto-scaling-group "MYSCALINGGROUPNAME" --min-size 1 --max-size 1   --recurrence "15 22 * * *"

rem Stop instance at 23:05
as-put-scheduled-update-group-action --name "stopMyInstance" --auto-scaling-group "MYSCALINGGROUPNAME" --min-size 0 --max-size 0 --recurrence "05 23 * * *"

Замените заглавные имена на выбранные вами и установите правильный AMI-ID для вашего изображения AMI. Новый экземпляр на основе вашего образа AMI начнется в 22:15 и завершится в 23:05. Конечно, вы также можете изменить тип экземпляра и зоны доступности.

1 голос
/ 04 июня 2016

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/

1 голос
/ 04 января 2014

ИМХО добавление расписания в группу автоматического масштабирования - лучший подход, подобный облачному, как упоминалось ранее.

Но если вы не можете завершить свои экземпляры и использовать новые, например, если у вас есть связанные с Elastic IP-адреса и т. Д.

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

#!/usr/bin/env ruby

# based on https://github.com/phstc/amazon_start_stop

require 'fog'
require 'tzinfo'

START_HOUR = 6 # Start 6AM
STOP_HOUR  = 0 # Stop  0AM (midnight)

conn = Fog::Compute::AWS.new(aws_access_key_id:     ENV['AWS_ACCESS_KEY_ID'],
                             aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])

server = conn.servers.get('instance-id')

tz = TZInfo::Timezone.get('America/Sao_Paulo')

now = tz.now

stopped_range = (now.hour >= STOP_HOUR && now.hour < START_HOUR)
running_range = !stopped_range

if stopped_range && server.state != 'stopped'
  server.stop
end

if running_range && server.state != 'running'
  server.start

  # if you need an Elastic IP
  # (everytime you stop an instance Amazon dissociates Elastic IPs)
  #
  # server.wait_for { state == 'running' }
  # conn.associate_address server.id, 127.0.0.0
end

Взгляните на amazon_start_stop , чтобы бесплатно создать планировщик, используя Планировщик Heroku .

0 голосов
/ 16 ноября 2017

Amazon недавно анонсировала две новые функции для достижения этой цели без специальных реализаций непосредственно в виде конфигурации из раздела AWS Web Console EC2.

  • Использование запланированного масштабирования для автоматического масштабирования приложения (после создания группы автоматического масштабирования имеется вкладка, на которой можно добавить дополнительные правила автоматического масштабирования на основе времени) enter image description here

  • Резервирование запланированных экземпляров EC2 (В консоли EC2 в разделе Экземпляры есть возможность резервировать запланированные экземпляры EC2) enter image description here

0 голосов
/ 16 мая 2016
  • То же самое здесь! В шоке от того, что Amazon не предоставляет встроенного способа просто запланировать запуск и остановку EC2 в определенное время. (Ну, не так шокирован, поскольку они, вероятно, не хотят, чтобы вы могли просто выключить его, верно?: -)

  • ОТВЕТ : Я нашел метод автоматического масштабирования лучшим способом для автоматизации и бесплатного, без необходимости использования сторонних приложений или отдельного сервера, работающего 24/7. Здесь необходимо хорошее понимание AS, AMI и EC2.

    Перейдите по ссылке URL ниже, чтобы увидеть, как вы можете добавить «РАСПИСАННЫЕ ДЕЙСТВИЯ» в группы автоматического масштабирования. Прекрасно работает!

    Теперь я могу запустить свой сервер EC2 в 12 часов дня и убавить обороты (на самом деле это прекращается) в 8 вечера. Очень круто. Удачи!

  • Ниже приведен скриншот моих настроек. Эти настройки будут создавать и запускать EC2 каждый день в течение часа. CHEERS!

http://docs.aws.amazon.com/autoscaling/latest/userguide/schedule_time.html#sch-actions_rules

Автоматическое масштабирование запланированных действий:

0 голосов
/ 30 марта 2016

У Amazon теперь есть запланированные зарезервированные экземпляры

Запланированные зарезервированные экземпляры : Эти экземпляры доступны для запуска в зарезервированные вами временные окна. Эта опция позволяет вам сопоставьте резервирование вашей емкости с предсказуемым повторяющимся графиком на это требуется лишь доля дня, недели или месяца. За Например, если у вас есть предсказуемая рабочая нагрузка, например, ежемесячно Анализ финансового риска, вы можете запланировать его запуск на первые пять дни месяца. Другим примером будет планирование ночных счетов обработка с 16.00 до 12.00 каждый будний день.

но также

Срок : Запланированные зарезервированные экземпляры имеют 1 год.

Способ оплаты : запланированные зарезервированные экземпляры начислять сборы ежечасно, оплачивается ежемесячно с шагом в течение срока.

Читать дальше https://aws.amazon.com/ec2/purchasing-options/reserved-instances/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...