Выполнить сценарий python на экземпляре EC2 через внешний HTTPS-запрос - PullRequest
0 голосов
/ 05 марта 2020

У меня проблемы с перерывом в рабочем процессе. В настоящее время работают следующие элементы:

Внешний веб-сервер может отправлять HTTPS-запрос Telegram Bot, используя следующую функцию PHP:

function sendMessage($chatID, $messaggio, $token) {
    //echo "sending message to " . $chatID . "\n";

    $url = "https://api.telegram.org/bot" . $token . "/sendMessage?chat_id=" . $chatID;
    $url = $url . "&text=" . urlencode($messaggio);
    $ch = curl_init();
    $optArray = array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true
    );
    curl_setopt_array($ch, $optArray);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

Эта функция включает внешний сервер, на котором бот отправляет сообщения указанному пользователю телеграммы или в групповом чате.

Telegram Bot может выполнять сценарии python при выполнении соответствующих команд

updater = Updater(token=creds.telegram_token, use_context=True)
dispatcher = updater.dispatcher
def help(update, context):
    with open('help.txt', 'r') as file:
        data = file.read()
        context.bot.send_message(chat_id=update.effective_chat.id, text=data)
    print('helped')
help_handler = CommandHandler('help', help)
dispatcher.add_handler(help_handler)
updater.start_polling()

Следующий скрипт python работает 24/7 на экземпляре AWS EC2 (очевидно, он не просто отображает справочный документ). Пользователи, которые выполняют /help в групповом чате, где бот находится успешно, заставляют его запускать справочную функцию.


Проблема: Я хотел бы, чтобы внешний сервер быть в состоянии вызвать функцию справки на экземпляре EC2. Я смог бы выполнить это sh, если бы второй бот просто отправил команду /help первому боту, за исключением того, что telegram не позволяет ботам общаться друг с другом.

Причина, по которой я Это связано с тем, что в python я разработал сложный объектно-ориентированный сценарий, предполагая, что вызов сценария с внешнего сервера будет тривиальным. С тех пор я обнаружил, что боты не могут общаться друг с другом и что, похоже, нет способа вызвать команду помощи напрямую из запроса HTTPS.

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

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

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

Есть ли какой-нибудь совет? Кажется, что такой простой шаг к go из файла php к сценарию python, но все очевидные маршруты заблокированы по соображениям безопасности.

...