Как мне взаимодействовать с кодом Python на экземпляре EC2 через API-GW? - PullRequest
0 голосов
/ 12 января 2019

Я хочу облегчить взаимодействие на основе URI с программами Python на узле входа в систему cfncluster. Программы будут выполнять различные трудоемкие (от минуты до часа) операции, в основном связанные с производимыми и потребляемыми объектами S3.

У меня есть прототипы сценариев меньшего масштаба, использующих функции Lambda и API GW для предоставления асинхронных конечных точек, где клиент отправляет JSON в конечную точку URI, которая отправляет его в функцию Lambda, функция Lambda предлагает уникальное имя объекта S3 и сразу возвращает это (в JSON) клиенту, а затем приступает к работе по созданию материала в этом объекте S3 (в рамках временных и пространственных ограничений функций Lambda). Клиент опрашивает, пока объект не становится доступным, часто вызывая другую функцию Lambda для использования этого объекта S3.

Теперь я хочу сделать то же самое, когда выполняемая работа огромна (крупномасштабные атмосферные модели), что потребует запуска cfncluster (для параллельных вычислений) с большим количеством больших пакетов программного обеспечения. Наилучший подход, который я могу предложить, - запускать функции Lambda через API-GW, а затем запускать асинхронные процессы (запуск, проверка состояния, уничтожение) в cfncluster. Хотя я мог бы заставить лямбда-функции взаимодействовать с процессами cfncluster через ssh, я бы предпочел этого избежать. Эти процессы обычно происходят из-за запуска кода Python.

Я читал AWS " EC2 Run Command " для выполнения задач администратора, и мое смутное понимание таково, что

  • Я могу запустить эту «Команду запуска EC2» из функции Lambda, то есть я мог бы передать JSON через API GW в функцию Lambda и получить команду «run» для экземпляра EC2.
  • «Команда запуска EC2» записывает stdout в объект S3, поэтому «возможно» я могу настроить процессы EC2 для записи JSON, который я хотел бы получить в ответе, и иметь другую лямбду функции получают их в запросах статуса.

Это, конечно, не кажется слишком простым, но, кажется, выполнимым, и, насколько мне известно, это может представлять собой «современное состояние» для осуществления контроля крупномасштабных научных исследований через Интернет. модели в облаке. Правильно ли я считаю, что это, вероятно, «состояние дел» для того, что я хочу сделать? AWS постоянно добавляет новые сервисы. Я что-то пропустил?

Я также рассмотрел (и в малом масштабе прототипировал) использование сервера CherryPy в экземпляре EC2, но у него есть свои сложности и недостатки.

1 Ответ

0 голосов
/ 12 января 2019

Я хотел бы, чтобы функции Lambda вставляли задачу в очередь SQS. Пусть экземпляры EC2 опрашивают очередь для выполнения задач. Вы можете записать статус задачи в таблицу DynamoDB, поэтому при любом опросе, проверяющем, завершена ли операция, найдется место. Это будет держать ваши лямбда-функции отделенными от внутренних экземпляров EC2, выполняющих длительные задачи, а также предоставит вам возможность повторных попыток и возможность масштабирования пула ваших экземпляров EC2 на основе глубины очереди.

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

...