Выполнить python скрипт на экземпляре EC2 через AWS лямбду - PullRequest
2 голосов
/ 06 марта 2020

У меня есть AWS EC2 экземпляр на linux, работающий 24/7 с набором python файлов, которые работают правильно. Из оболочки я могу ввести python python_script.py var1 var2. var1 и var2 - просто целые числа со значениями менее 5000.

Я могу настроить API AWS для получения запросов HTTPS, которые доставляют эти переменные в качестве переменных среды. Затем я могу использовать AWS лямбда-код для запуска некоторого кода при срабатывании API.

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

Я нашел совет по Как запустить скрипт на ваш aws -ec2 из сценария на вашем локальном компьютере?

ssh -i key.pem ubuntu@ec2-instance "bash /path/to/your/script/data.sh"

Так что для моего собственного случая использования я попытался изменить его на:

ssh -i python_bot.pem ubuntu@ec2-instance "python Python_Project/python_script.py 2 166"

Однако , когда я запускаю этот код из своей собственной оболочки, я получаю bash: python: command not found. Это странно, потому что, если я выполняю ssh -i python_bot.pem ubuntu@ec2-instance и затем после входа в систему выполняю python Python_Project/python_script.py 2 166, файл запускается успешно. Я думаю, если я смогу заставить это работать, то я могу попробовать некоторые решения из Можно ли написать bash скрипт внутри AWS лямбда-функции

Я также нашел Запуск Python Сценарий в существующем экземпляре EC2 на AWS, и хотя ответ дал мне какое-то указание, он слишком широк, чтобы помочь с конкретным c решением.

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Оболочки входа в систему и команды запуска через S SH могут иметь разные переменные среды, особенно PATH здесь. Должна помочь ясность в отношении интерпретатора.

Войдите в экземпляр и посмотрите, какой Python вы используете:

which python

Затем подставьте это в командную строку S SH Например,

ssh -i python_bot.pem ubuntu@ec2-instance "/usr/bin/python Python_Project/python_script.py 2 166"
0 голосов
/ 07 марта 2020

Запуск сценария на экземпляре Amazon EC2 из AWS лямбда-функции не является хорошим архитектурным решением.

Как описано в Запуск Python Сценарий в существующем экземпляре EC2 на AWS (с которым вы связались), как правило, компьютер не любит, когда к нему «толкают» вещи, если только он не работает как веб-сервер.

Вместо этого я бы хотел предложить вам другую архитектуру :

  • Функция Lambda помещает «задание» в очередь Amazon SQS
  • код в экземпляре Amazon EC2 регулярно проверяет ('опрашивает') очередь SQS , чтобы узнать, доступны ли какие-либо сообщения
  • Если сообщение доступно, оно использует содержимое сообщения, чтобы инициировало некоторую локальную работу в экземпляре EC2

Таким образом, две системы отключены, но обмениваются данными через очередь SQS. Дополнительным преимуществом является то, что, если экземпляр EC2 занят или находится в автономном режиме, сообщения (задания) накапливаются в очереди SQS до тех пор, пока их не удастся обработать.

Эта архитектура лучше, чем попытка использовать S SH или SCP для запуска задания (что не является «облачным» способом для проектирования системы).

...