Каков наилучший способ запуска сценариев Python в AWS? - PullRequest
0 голосов
/ 06 мая 2019

У меня есть три сценария Python, 1.py, 2.py и 3.py, каждый из которых имеет 3 передаваемых аргумента времени выполнения.

Все три программы Python независимы друг от друга.Все 3 могут работать последовательно в пакете, или может случиться так, что любые два могут работать в зависимости от какой-либо конфигурации.

Ручной подход:

  1. Создать экземпляр EC2, запустить скрипт python,выключите его.
  2. Повторите вышеуказанный шаг для следующего скрипта Python.

Автоматически можно было бы запустить вышеуказанный процесс через лямбду и реплицировать вышеуказанный процесс, используя некоторую комбинацию сервисов..

Каков наилучший способ реализовать это в AWS?

Ответы [ 2 ]

1 голос
/ 21 мая 2019

AWS Batch имеет планировщик DAG, технически вы можете определить job1, job2, job3 и указать AWS Batch запускать их в таком порядке.Но я бы не рекомендовал этот маршрут.

Чтобы все вышеперечисленное работало, вам нужно создать 3 образа докера.изображение1, изображение2, изображение3.а затем поместите их в ECR (Docker Hub также может работать, если не используется тип запуска Fargate).

Я не думаю, что это имеет смысл, если у каждого задания громоздкого нет своего собственного времени выполнения, которое отличается от других.

Вместо этого я написал бы программу на Python, которая вызывает 1.py 2.py и 3.py, поместил бы это в образ Docker и запустил пакетное задание AWS или просто задачу ECS Fargate.

main.py:

import subprocess

exit_code = subprocess.call("python3 /path/to/1.py", shell=True)

# decide if you want call 2.py and so on ...
# 1.py will see the same stdout, stderr as main.py
# with batch and fargate you can retrieve these form cloudwatch logs ...

Теперь у вас есть образ Docker, который просто нужно где-то запустить.Fargate быстр в запуске, немного дорог, имеет максимальный лимит 10 ГБ для временного хранилища.AWS Batch медленно запускается при холодном запуске, но может использовать точечные экземпляры в вашей учетной записи.Возможно, вам потребуется создать пользовательский AMI для работы пакета AWS.т.е. если вы хотите больше памяти.

Примечание: для тех, кто хочет кричать в shell = True, и main.py, и 1.py пришли из одной и той же кодовой базы.Это пакетная работа, а не API для Интернета, который взял ее из запроса пользователя.

0 голосов
/ 06 мая 2019

Вы можете запустить свой экземпляр EC2 с помощью скрипта Python, используя библиотеку AWS boto3 (https://aws.amazon.com/pt/sdk-for-python/). Таким образом, возможное решение - периодически запускать функцию Lambda (вы можете использовать Amazon Cloudwatch для периодических событий),и внутри этой функции вы можете загрузить свой экземпляр EC2 с помощью скрипта Python.

В вашем экземпляре вы можете настроить свою ОС на запуск скрипта Python при каждой загрузке, я бы предложил вам использовать Crontab (см.ссылка https://www.instructables.com/id/Raspberry-Pi-Launch-Python-script-on-startup/)

В конце вашего скрипта вы можете вызвать событие Aamazon SQS для функции, которая отключит ваш первый экземпляр и затем вызовет другую функцию, которая запустит второй скрипт.

...