Запуск EC2 по расписанию
Мне нужно запускать экземпляр EC2 на (скажем) 6 утра каждый день. Ограничения состоят в том, что я бы хотел, чтобы компьютер не работал весь день для запуска или использования платного решения, такого как ylastic.
решение в alestic, является самым близким до сих пор. Недостатком этого решения является то, что время запуска является высоким из-за времени, необходимого для установки пользовательского программного обеспечения и перемещения данных.
Есть ли способ просто загружать экземпляр вместо создания нового экземпляра каждый раз, как показано в этом примере?
Ответы
Ответ 1
Учитывая ваши ограничения, желаемая функциональность, к сожалению, не распространяется на два специальных механизма автоматизации, доступных Продукты и услуги AWS прямо сейчас:
- Автоматическое масштабирование - это веб-сервис, предназначенный для автоматического запуска или завершения Amazon Elastic Compute Cloud (Amazon EC2), основанные на пользовательских политиках, расписаниях и проверках работоспособности.
- AWS CloudFormation - дает разработчикам и системным администраторам простой способ создавать и управлять коллекцией связанных AWS ресурсов, подготовки и обновления их упорядоченным и предсказуемым образом.
При запуске/остановке/перезагрузке экземпляр концептуально попадает в категорию управления последнего, он недоступен так (что, кстати, является причиной того, что мы предоставляем отдельную Задачу специально для этой функциональности, в то время как устаревшие Bamboo AWS Plugin и его преемник Задачи для AWS).
Следовательно, подходы, изложенные в моем ответе на Как включить/выключить облачные экземпляры в рабочие часы, по-прежнему применимы, хотя и с дополнительным ограничением, которое вам нужно будет найдите провайдера, принимающего решение script или непрерывное интеграционное решение бесплатно:
-
Сценарии хостинга имеют, например, возможно, уже с помощью этих поставщиков услуг cron.
-
Учитывая текущий взрыв в Платформа как услуга (PaaS), есть довольно некоторые провайдеры, которые позволят вам делать сценарии хоста и/или решения непрерывной интеграции так или иначе.
Очевидно, вам нужно проверить, подходит ли использование бесплатных уровней для целей, подобных этому, в соответствии с соответствующим Условиями использования. данного поставщика.
Ответ 2
Теперь вы можете сделать это с помощью Amazon OpsWorks. После того, как вы настроили основной материал, просто создайте новый экземпляр и установите его тип масштабирования на "основанное на времени" (вы не можете изменить это по какой-либо причине после создания экземпляра):
![enter image description here]()
Теперь просто нажмите категорию "Экземпляры > Время" и настройте расписание:
![enter image description here]()
Ответ 3
Существует еще один Java-инструмент EC2 Scheduler, который может помочь вам в решении этой проблемы. Для меня я хотел сделать сервер доступным для моей команды во время работы в офисе, даже если он не используется кем-либо. Это приложение помогло мне достичь этой цели. Надеюсь, это тоже хорошо для вас.
Ответ 4
Я предлагаю запланировать запуск EC2 с помощью AWS Lambda.
Рекомендация:
Проверьте предложение D. Svanlund, пользователь с Ace: 2000+ pts, на этом Тема форума AWS.
Преимущество:
Вам не нужно ничего больше, чем небольшой script или два, которые вы планируете. Нет экземпляра для запуска, просто быстрый вызов script, который вы создали. Выберите язык программирования по вашему выбору и используйте AWS SDK для выполнения операций с экземплярами. Довольно легкое решение,
Ориентировочная стоимость:
Задача, выполняемая два раза в день, обычно менее 3 секунд с потреблением памяти до 128 МБ, обычно стоит менее $0,0004 USD/месяц (см. Ссылка)
Планирование
В январе 2016 года запланированные мероприятия AWS Lambda были преобразованы в AWS CloudWatch Events. События CloudWatch имеют те же возможности планирования, что и запланированные события Lambda. Ограничение запланированных событий AWS Lambda по 5 запланированным событиям в каждом регионе было отменено до 50 правил CloudWatch Events.
Метод
Установите типы EC2, которые подходят для Планирование запуска/остановки. Я рекомендую использовать EC2-VPC/EBS.
Создайте IAM policy и role. Доверие Отношения вновь созданной роли (см. Ссылка).
Настройте запуск CloudWatch Events для Lambda через Function Trigger, как показано ниже.
![CloudWatch Events - Schedule]()
Вот код функции start-server, для которой для Runtime установлено значение Node.js.
Измените YOUR_REGION и YOUR_INSTANCE_ID на Консоль экземпляров.
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 создается с необходимыми разрешениями, то функция Lambda создаст поток потока AWS CloudWatch для каждого запуска.
![AWS CloudWatch Log Stream]()
Ответ 5
Я столкнулся с той же проблемой и решил ее, используя Autoscaling так же, как и многие из упомянутых здесь ответов. Единственное, что вам нужно для этого - это изображение AMI, которое вы хотите запустить, и Инструменты командной строки API Autoscaling.
После загрузки инструментов следуйте инструкциям в 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. Конечно, вы также можете изменить зоны и типы экземпляров.
Ответ 6
ИМХО Добавление расписания в группу автоматического масштабирования - лучший подход к "облачным", как упоминалось ранее.
Но в случае, если вы не можете прервать свои экземпляры и использовать новые, например, если у вас есть Elastic IPs, связанные с ним.
Вы можете создать Ruby script, чтобы запустить и остановить свои экземпляры на основе диапазона дат.
#!/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.
Ответ 7
AWS Data Pipeline уникально подходит для этой задачи. Конвейер данных использует технологии AWS и может быть настроен для запуска команд AWS CLI на заданное расписание без внешних зависимостей. Трубопровод данных может писать регистрируется на S3 и запускается в контексте роли IAM, что устраняет ключевые требования к управлению. Протокол данных также экономически эффективен; для Например, свободный уровень данных Pipeline может использоваться для остановки и запуска экземпляры один раз в день.
https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-ec2-instances/
Ответ 8
Автосканирование кажется лучшим решением для вашей проблемы, и AWS предоставляет такую функцию. Если вы ищете стороннее решение, такое как ylastic, но вы не хотите платить за него, единственная альтернатива, которую я знаю, это Scalr, где я работаю. Scalr является открытым исходным кодом, поэтому вам нужно загрузить исходный код и install самостоятельно.
Другие альтернативы включают RightScale и enStratus. На мой взгляд, бесплатная учетная запись RightScale не включает автомасштабирование, в то время как "бесплатный" план enStratus взимает автомасштабирование на основе 0,20 долл. США/час на сервере.
Ответ 9
Лучший бесплатный метод, о котором я знаю, http://www.exostack.com
Я использую его для планирования экземпляров для включения или выключения в заданное время - используя его для 400+ экземпляров прямо сейчас, и он отлично работает. Также у них есть планировщик для моментальных снимков и AMI, которые я использую для DR. У них также есть довольно гладкий ec2 cost tracker - кажется, дает вам ежемесячную и ежегодную разбивку ваших расходов. Довольно точная ИМО.
Ответ 10
Теперь у Amazon есть запланированные зарезервированные экземпляры
Запланированные зарезервированные экземпляры. Эти экземпляры доступны для запуска в течение времени, которое вы резервируете. Этот параметр позволяет вам сопоставляйте резерв мощности с предсказуемым повторяющимся графиком что требуется только часть дня, недели или месяца. Для Например, если у вас есть предсказуемая рабочая нагрузка, такая как ежемесячная анализ финансовых рисков, вы можете запланировать его запуск в первые пять дней месяца. Другим примером может быть планирование ночного счета обработка с 16.00-12.00 каждый будний день.
но также
Термин: Запланированные зарезервированные экземпляры имеют 1 год.
Вариант оплаты: Запланированные зарезервированные экземпляры начисляются сборы ежечасно, выставляются ежемесячно в течение этого срока.
Подробнее
https://aws.amazon.com/ec2/purchasing-options/reserved-instances/
Ответ 11
-
То же самое! Потрясенный, чтобы увидеть, что Amazon не предоставляет встроенный способ просто планировать запуск EC2 в определенное время. (Ну, это не шокировано, поскольку они, вероятно, не хотят, чтобы вы могли просто отключить его, верно?: -)
-
ANSWER. Я нашел метод Auto-Scaling лучшим способом автоматизировать это и бесплатно, без необходимости использования сторонних приложений или отдельного сервера, работающего 24 часа в сутки. Здесь необходимо хорошее понимание AS, AMI и EC2.
Перейдите по ссылке ниже, чтобы узнать, как вы можете добавить "ЗАРАБОТАННЫЕ ДЕЙСТВИЯ" в свои группы автомасштабирования. Отлично работает!
Теперь я могу подключить свой сервер EC2 к 12-й минуте и отступить (действительно, он заканчивается) @8PM. Очень круто. Удачи!
-
Ниже приведен снимок экрана моих настроек. Эти настройки будут создавать и запускать EC2 каждый день в течение одного часа в день. CHEERS!
http://docs.aws.amazon.com/autoscaling/latest/userguide/schedule_time.html#sch-actions_rules
Автоматическое масштабирование запланированных действий:
Ответ 12
Недавно Amazon анонсировала две новые функции для достижения этой цели без пользовательских реализаций непосредственно в виде конфигурации из раздела AW2 Web Console EC2.
-
Использование масштабирования по расписанию для автоматического масштабирования приложения (после создания группы автомасштабирования есть вкладка, где вы можете добавить дополнительные правила автомасштабирования по времени)
![введите описание изображения здесь]()
-
Резервирование запланированных экземпляров EC2 (в консоли EC2 в разделе "Экземпляры" имеется возможность зарезервировать экземпляры EC2 с расписанием)
![введите описание изображения здесь]()