Arhn - архитектура программирования

EC2: ожидание перехода нового экземпляра в рабочее состояние

Я хотел бы создать новый экземпляр на основе моего сохраненного AMI.

Я достигаю этого с помощью следующего кода:

RunInstancesRequest rir = new RunInstancesRequest(imageId,1, 1);
// Code for configuring the settings of the new instance
...
RunInstancesResult runResult = ec2.runInstances(rir);

Однако я не могу найти ожидание, чтобы «заблокировать»/ждать, пока экземпляр не будет запущен и запущен, кроме команды Thread.currentThread().sleep(xxxx).

С другой стороны, StartInstancesResult и TerminateInstancesResult дают вам возможность получить доступ к состоянию экземпляров и отслеживать любые изменения. Но как насчет состояния совершенно нового экземпляра?

27.09.2013

Ответы:


1

Ожидание готовности экземпляра EC2 — распространенный шаблон. В библиотеке Python boto вы также решаете это с помощью вызовов sleep:

   reservation = conn.run_instances([Instance configuration here])
   instance = reservation.instances[0]

   while instance.state != 'running':
       print '...instance is %s' % instance.state
       time.sleep(10)
       instance.update()

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

27.09.2013
  • Я не знал, что есть метод обновления. Это очень хорошо знать. Спасибо. Однако на данный момент лучшим решением является @Zags instance.wait_until_running() 20.03.2017
  • @BrunoBronosky это зависит от вашей цели. Мне нужно дождаться, пока экземпляр запустится и пройдут проверки состояния. Исходя из этого, вы не можете использовать решение Zags, так как это почти сразу разрешится. 17.04.2017
  • Обновление: если цикл, описанный выше, выполняется с использованием boto3, вместо instance.update() следует использовать instance.load(). 01.05.2019


  • 3

    Из журнала изменений интерфейса командной строки AWS для версии 1.6.0:

    Добавьте подкоманду ожидания, которая позволяет блокировать команду до тех пор, пока ресурс AWS не достигнет заданного состояния (issue 992). , выпуск 985)

    Я не вижу этого в документации, но у меня сработало следующее:

    aws ec2 start-instances --instance-ids "i-XXXXXXXX"
    aws ec2 wait instance-running --instance-ids "i-XXXXXXXX"
    

    Строка wait instance-running не была завершена до тех пор, пока экземпляр EC2 не был запущен.

    Я не использую Python/boto/botocore, но предполагаю, что у него есть что-то похожее. Проверьте waiter.py на Github.

    27.11.2014

    4

    В зависимости от того, что вы пытаетесь сделать (и сколько серверов вы планируете запустить), вместо опроса событий запуска экземпляра вы можете установить на AMI простую программу/скрипт, который запускается один раз при запуске экземпляра и отправляет уведомление об этом, т. е. в тему AWS SNS.

    Процесс, которому необходимо знать о запуске новых серверов, может затем подписаться на эту тему SNS и получать push-уведомления каждый раз при запуске сервера.

    Решает ту же проблему под другим углом; ваш пробег может отличаться.

    27.09.2013

    5

    Воспользуйтесь методом wait_until_running от Boto3:

    http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.Instance.wait_until_running

    12.04.2017
  • Я пробовал это, но хотя это и ждет, я могу подключиться к экземпляру по SSH через некоторое время > 10 секунд и ‹ 60 секунд. 05.02.2019

  • 6

    Вы можете использовать официантов boto3, https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#waiters

    для этого примера: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Waiter.InstanceRunning

    Или в Java https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/ Я уверен, что официанты реализованы во всех SDK AWS.

    19.11.2018
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..