Я хотел бы запустить экземпляр EC2 по требованию и отключить его, когда он простаивает в течение некоторого периода времени (например, отсутствие сетевой активности в течение> = 1 часа), но я не могу сказать, что это за стандартный способ выполнение этого в AWS выглядит так, учитывая, что AWS не поддерживает wake-on-LAN.
Службе, которую я собираюсь запустить, потребуется постоянное сетевое соединение, например ssh.
Пользовательский опыт, к которому я стремлюсь, выглядит примерно так:
Моя мотивация здесь в первую очередь - экономия средств. Спрос будет очень непредсказуемым (поэтому запланированные экземпляры не подходят), вероятно, менее 12 активных часов в день, и пользователи готовы подождать несколько минут, пока служба запустится. И я не хочу быть привязанным к сроку более 1 года с ценой на зарезервированные инстансы.
У меня также есть несколько безумных попыток сделать это, и я буду признателен за отзывы о том, насколько они правдоподобны / разумны:
Спасибо!
Lambda работает примерно так, хотя вместо этого заставляет пользователя ждать, пока запускает приложение. Хотя в Lambda у вас нет экземпляра для управления - все делается под капотом.
Я также проверю, можете ли вы сделать что-то, связанное с Lambda и проверкой отказа Route53, чтобы пользователи нажимали Lambda, если экземпляр не работает, и экземпляр, если он работает. Это может не работать, потому что Lambda требует определенного заголовка Host.
Или снова используйте отработку отказа R53 для запуска зарезервированного экземпляра t2.nano для выполнения «комнаты ожидания», а затем прокси или перенаправления на другой экземпляр, когда он будет запущен.
Вы можете сделать что-то подобное без использования других сервисов:
import boto3
import json
def lambda_handler(event, context):
ec2 = boto3.resource('ec2')
instance = ec2.Instance(event['instance_id'])
if instance.state['Code'] == 16:
# Instance is running, do what you want
elif instance.state['Code'] == 80:
# Instance is stopped, start it
instance.start()
return { 'status': 'instance-unavailable' }
else
# Instance is in another state
В этом случае instance_id
принимается параметром, но, конечно, вы можете жестко его запрограммировать.