Могу ли я автоматически запускать и закрывать свой инстанс Amazon с помощью Amazon API? Не могли бы вы описать, как это можно сделать? В идеале мне нужно запускать экземпляр и останавливать его через определенные интервалы времени каждый день.
api
amazon-ec2
amazon-web-services
Макаронные изделия
источник
источник
Ответы:
На всякий случай, если кто-то наткнется на этот старый вопрос, в настоящее время вы можете добиться того же, добавив расписание в группу автоматического масштабирования: увеличьте количество экземпляров в группе автоматического масштабирования до 1 в определенное время и затем уменьшите его до 0 впоследствии. .
И поскольку этот ответ набирает много просмотров, я решил связать с очень полезным руководством по этому поводу: Запуск экземпляров EC2 по повторяющемуся расписанию с автоматическим масштабированием
источник
Вы можете попробовать использовать инструменты API Amazon EC2 напрямую. На самом деле вам нужны только две команды: ec2-start-instance и ec2-stop-instance. Убедитесь, что переменные среды, такие как EC2_HOME, AWS_CREDENTIAL_FILE, EC2_CERT, EC2_PRIVATE_KEY и т. Д., Правильно настроены, а все файлы учетных данных AWS, сертификатов и закрытых ключей находятся в правильном месте - дополнительную информацию можно найти в документации инструментов API AWS EC2.
Вы можете сначала протестировать команду вручную, а затем, когда все будет работать нормально, настроить Unix crontab или запланированные задачи в Windows. Вы можете найти приведенный ниже пример для файла Linux / etc / crontab (не забывайте, что все упомянутые выше переменные среды должны присутствовать для пользователя your-account.
Я разработчик проекта BitNami Cloud, в котором мы упаковываем инструменты AWS (включая упомянутые мною) в бесплатный, простой в использовании установщик, который вы, возможно, захотите попробовать: Пакет пакетов BitNami CloudTools
источник
Я рекомендую вам взглянуть на Руководство по началу работы с EC2 , в котором показано, как делать то, что вам нужно, с помощью инструментов командной строки EC2. Вы можете легко записать это в задание cron (в Linux / UNIX) или запланированное задание в Windows, чтобы вызвать команды запуска и остановки в заданное время.
Если вы хотите сделать это из собственного кода, вы можете использовать API-интерфейсы SOAP или REST; подробности см. в Руководстве разработчика .
источник
Для этого я написал код на Python, используя библиотеку Boto. Вы можете настроить это для собственного использования. Обязательно запускайте это как часть задания cron, и тогда вы сможете запускать или выключать столько экземпляров, сколько вам нужно, во время выполнения заданий cron.
#!/usr/bin/python # # Auto-start and stop EC2 instances # import boto, datetime, sys from time import gmtime, strftime, sleep # AWS credentials aws_key = "AKIAxxx" aws_secret = "abcd" # The instances that we want to auto-start/stop instances = [ # You can have tuples in this format: # [instance-id, name/description, startHour, stopHour, ipAddress] ["i-12345678", "Description", "00", "12", "1.2.3.4"] ] # -------------------------------------------- # If its the weekend, then quit # If you don't care about the weekend, remove these three # lines of code below. weekday = datetime.datetime.today().weekday() if (weekday == 5) or (weekday == 6): sys.exit() # Connect to EC2 conn = boto.connect_ec2(aws_key, aws_secret) # Get current hour hh = strftime("%H", gmtime()) # For each instance for (instance, description, start, stop, ip) in instances: # If this is the hour of starting it... if (hh == start): # Start the instance conn.start_instances(instance_ids=[instance]) # Sleep for a few seconds to ensure starting sleep(10) # Associate the Elastic IP with instance if ip: conn.associate_address(instance, ip) # If this is the hour of stopping it... if (hh == stop): # Stop the instance conn.stop_instances(instance_ids=[instance])
источник
Если это не критично - проще всего запланировать запуск командного файла «SHUTDOWN» (окна) в 3 часа ночи каждый день. Тогда, по крайней мере, вы не рискуете случайно оставить нежелательный экземпляр работать бесконечно.
Очевидно, это только половина дела!
источник
У компании, в которой я работаю, клиенты регулярно спрашивали об этом, поэтому мы написали бесплатное приложение для планирования EC2, доступное здесь:
http://blog.simple-help.com/2012/03/free-ec2-scheduler/
Он работает на Windows и Mac, позволяет создавать несколько ежедневных / еженедельных / ежемесячных расписаний и позволяет использовать соответствующие фильтры, чтобы легко включать большое количество экземпляров или включать те, которые вы добавите в будущем.
источник
AWS Data Pipeline работает нормально. https://aws.amazon.com/premiumsupport/knowledge-center/stop-start-ec2-instances/
Если вы хотите исключить дни из начала (например, выходные), добавьте объект ShellCommandPrecondition.
В AWS Console / Data Pipeline создайте новый конвейер. Легче редактировать / импортировать определение (JSON)
Поместите сценарий Bash для загрузки и выполнения в качестве предварительного условия в вашей корзине S3
При активации и запуске конвейера в выходные дни на консоли AWS Pipeline Health Status отображается вводящая в заблуждение «ERROR». Сценарий bash возвращает ошибку (выход 1), и EC2 не запускается. В дни с 1 по 5 статус «ЗДОРОВЫЙ».
Чтобы остановить EC2 автоматически во время закрытия офиса, используйте команду AWS CLI ежедневно без предварительных условий.
источник
Вы можете посмотреть на Ylastic, чтобы сделать это. Альтернативой, похоже, является работа одной машины, которая выключает / запускает другие экземпляры с помощью задания cron или запланированной задачи.
Очевидно, что если вам нужен только один экземпляр, это дорогостоящее решение, поскольку одна машина должна работать постоянно, и платить ~ 80 долларов в месяц за выполнение заданий cron на одной машине не рентабельно.
источник
AutoScaling ограничивается завершением экземпляров. Если вы хотите остановить экземпляр и сохранить состояние сервера, лучше всего использовать внешний сценарий.
Вы можете сделать это, запустив задание на другом экземпляре, который работает 24/7, или вы можете использовать сторонний сервис, такой как Ylastic (упомянутый выше) или Rocket Peak .
Например, в C # код для остановки сервера довольно прост:
источник
ИМХО, добавление расписания в группу автоматического масштабирования - лучший «облачный» подход, как упоминалось ранее.
Но если вы не можете прекратить работу своих экземпляров и использовать новые, например, если у вас есть эластичные 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 Scheduler .
источник
Несмотря на то, что есть способы добиться этого с помощью автоматического масштабирования, он может не подходить для всех случаев, поскольку он завершает экземпляры. Задания Cron никогда не будут работать для одного экземпляра (хотя его можно идеально использовать для таких ситуаций, как остановка одного экземпляра и планирование других экземпляров при запуске нескольких экземпляров). Вы можете использовать вызовы API, такие как StartInstancesRequest и StopInstancesRequest, чтобы добиться того же, но опять же вам придется полагаться на третий ресурс. Существует множество приложений для планирования экземпляров AWS с множеством функций, но для простого решения я бы порекомендовал бесплатное приложение, например snapleaf.io.
источник
Да, это можно сделать с помощью AWS Lambda. Вы можете выбрать триггер в Cloudwatch, который работает на выражениях Cron в UTC.
Вот соответствующая ссылка https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/
Другой альтернативой является использование
awscli
которая доступнаpip
,apt-get
,yum
илиbrew
, а затем работаетaws configure
с учетными данными , экспортируемые из IAM и выполнив следующий Баш скрипт, чтобы остановить EC2, которая была помечена сName: Appname
иValue: Appname Prod
. Вы можете использоватьawscli
для тегирования экземпляров или вручную с консоли AWS.aws ec2 stop-instances
остановит экземпляр иjq
будет использоваться для фильтрации запроса json и получения правильного идентификатора экземпляра с помощью тегов изaws ec2 describe-instances
.Чтобы убедиться, что это
aws configure
было успешным и возвращает вывод json, запустите,aws ec2 describe-instances
и ваш идентификатор запущенного экземпляра должен быть в выводе. Вот пример выводаСледующий сценарий Баш находится
stop-ec2.sh
в/home/centos/cron-scripts/
которых вдохновлен этой должности SOЗапустите файл с помощью
sh /home/centos/cron-scripts/stop-ec2.sh
и убедитесь, что экземпляр EC2 остановлен. Для отладки запуститеaws ec2 describe-instances | jq '.Reservations[].Instances | select(.[].Tags[].Value | startswith("Appname Prod") ) | select(.[].Tags[].Key == "Appname") | {InstanceId: .[].InstanceId, PublicDnsName: .[].PublicDnsName, State: .[].State, LaunchTime: .[].LaunchTime, Tags: .[].Tags} | [.]' | jq -r .[].InstanceId
и убедитесь, что он возвращает правильный идентификатор экземпляра, который был помечен.Затем в
crontab -e
следующей строке можно добавить30 14 * * * sh /home/centos/cron-scripts/stop-ec2.sh >> /tmp/stop
который будет записывать вывод в
/tmp/stop
. Это30 14 * * *
выражение UTC cron, которое вы можете проверитьhttps://crontab.guru/
. Аналогичным образом замена наaws ec2 start-instances
может запустить экземпляр.источник
Я считаю, что первоначальный вопрос немного сбивал с толку. Это зависит от того, что нужно Pasta: 1. запуск / завершение (хранилище экземпляров) - автоматическое масштабирование - правильное решение (ответ Nakedible) 2. запуск / остановка экземпляра загрузки EBS - автоматическое масштабирование не поможет, я использую удаленные запланированные сценарии (т.е. , интерфейс командной строки ec2).
источник
Вы не можете сделать это автоматически или, по крайней мере, без некоторого программирования и манипуляций API в файлах сценариев. Если вам нужно надежное решение для остановки, перезапуска и управления вашими изображениями (предположительно, для контроля затрат в вашей среде), вы можете взглянуть на LabSlice . Отказ от ответственности: я работаю в этой компании.
источник