Home Статьи Я хотел, чтобы Твиттер freeCodeCamp Toronto публиковал цитаты, поэтому я сделал для этого бесплатного бота.

Я хотел, чтобы Твиттер freeCodeCamp Toronto публиковал цитаты, поэтому я сделал для этого бесплатного бота.

by admin

Если вы читаете About time, вы должны знать, что я сторонник того, чтобы тратить время сейчас на создание вещей, которые сэкономят время в будущем. С этой целью я создал простого бота для Твиттера на Go, который время от времени публиковал ссылки на мои статьи и поддерживал интерес к моему аккаунту, даже когда я был слишком занят, чтобы им пользоваться. Твиты помогают привлечь трафик на мои сайты, и мне не нужно и пальцем шевелить.

Я запускал бота на экземпляре Amazon EC2 около месяца. Мое использование AWS исторически было довольно недорогим (меньше, чем цена кофе в большей части Северной Америки), поэтому я был удивлен, когда маленький экземпляр, который я использовал, выставил счет на 90% больше, чем месяцем ранее. Я не думаю, что AWS дорогой, чтобы быть ясным, но все же… я дешевый. Я хочу, чтобы мой Twitter-бот был дешевле.

Я собирался изучить AWS Lamda и решил, что это хорошая возможность. В отличие от экземпляра EC2, который работает постоянно (и взимает плату за это), Lambda взимает плату за каждый запрос и в зависимости от продолжительности времени, которое требуется для выполнения вашей функции. Также существует бесплатный уровень, и первый миллион запросов плюс определенное количество вычислительного времени бесплатны.

В грубом переводе на запуск бота в Твиттере, который публикует сообщения для вас, скажем, два раза в день, ваши ежемесячные расходы на использование Lambda будут составлять… нести одного… ничего. Я запускаю свою функцию Lambda уже пару недель совершенно бесплатно.

Когда недавно пришло время взять на себя бразды правления @freeCodeCampTO Twitter, я решил использовать аналогичную стратегию. Я также использовал эту возможность, чтобы задокументировать процесс для вас, дорогой читатель.

Поэтому, если вы в настоящее время используете постоянно работающий экземпляр для задачи, которую можно обслуживать заданием cron, эта статья для вас. Я расскажу, как написать свою функцию для Lambda и как настроить ее для автоматического запуска. И в качестве приятного небольшого бонуса я добавлю удобный bash-скрипт, который обновляет вашу функцию из командной строки всякий раз, когда вам нужно внести изменения. Давай сделаем это!

Подходит ли вам Лямбда?

Когда я писал код для своего бота в Твиттере на Go, я намеревался запустить его на экземпляре AWS и много заимствовал из Francesc’s awesome Just for Func episode. Некоторое время спустя я изменил его, чтобы случайным образом выбирать статью из моих RSS-каналов и твитить ссылку два раза в день. Я хотел сделать что-то подобное для бота @freeCodeCampTO, чтобы он каждое утро публиковал в Твиттере вдохновляющую цитату о программировании.

Это хороший вариант использования Lambda, потому что:

  • Программа должна выполниться один раз
  • Он работает по обычному расписанию, используя время в качестве триггера.
  • Его не нужно запускать постоянно

Важно помнить, что Lambda запускает функцию один раз в ответ на определенное вами событие. Наиболее широко применимым триггером является простое выражение cron, но есть много других триггерных событий, которые вы можете подключить. Вы можете получить обзор here.

Напишите лямбда-функцию

Я обнаружил, что это очень просто сделать в Go. Во-первых, захватите aws-lambda-go библиотека:

go get github.com/aws/aws-lambda-go/lambda

Тогда сделайте это своим func main():

func main() {
       lambda.Start(tweetFeed)
}

в котором tweetFeed это имя функции, которая заставляет все происходить. Хотя я не буду описывать здесь всего бота Twitter, вы можете просмотреть мой code on GitHub.

Настройка AWS Lambda

Я предполагаю, что у вас уже есть учетная запись AWS. Если нет, то сначала сюда: https://aws.amazon.com/free

1. Создайте свою функцию

Найдите AWS Lambda в списке сервисов, затем найдите эту блестящую кнопку:

qIm1TxAXfJKEGAFbnbqES24MR65doEaTekrW

Мы собираемся создать функцию с нуля. Назовите свою функцию, затем под Runtime выберите «Перейти 1.x».

Под Role name напишите любое имя. Это обязательное поле, но не относящееся к данному варианту использования.

Нажмите Create function.

Q05OinPHTS5NY-XOFLXE5sGaSSU-qESrDVWy

2. Настройте свою функцию

Вы увидите экран для настройки новой функции. Под Handler введите имя вашей программы Go.

B9QTTbx0JTqtsumeH0Jf387oW1PLpMe7U7Fu

Если вы прокрутите вниз, вы увидите место для ввода переменных среды. Это отличное место для ввода токенов и секретов Twitter API, используя имена переменных, которые ожидает ваша программа. Функция AWS Lambda создаст для вас среду, используя предоставленные здесь переменные.

6g09YtNJPhHQYNwS1flNHOg4TgjXY0AwFYB3

Для этого случая использования дополнительные настройки не требуются. Нажмите Save в верхней части страницы.

3. Загрузите свой код

Вы можете загрузить свой код функции в виде zip-файла на экране конфигурации. Поскольку мы используем Go, вам может понадобиться go build сначала заархивируйте полученный исполняемый файл, прежде чем загружать его в Lambda.

…Конечно, я не собираюсь делать это вручную каждый раз, когда хочу настроить свою функцию. Это то что awscli и этот сценарий bash для!

update.sh

go build && \
zip fcc-tweet.zip fcc-tweet && \
rm fcc-tweet && \
aws lambda update-function-code --function-name fcc-tweet --zip-file fileb://fcc-tweet.zip && \
rm fcc-tweet.zip

Теперь всякий раз, когда я делаю настройку, я просто бегу bash update.sh.

Если вы еще не используете AWS Command Line InterfaceЯ pip install awscli и поблагодари меня позже. Найдите инструкции по установке и настройке за несколько минут here под Quick Configuration.

4. Проверьте свою функцию

Хотите увидеть, как это идет? Конечно, вы делаете! Нажмите «Настроить тестовые события» в раскрывающемся списке вверху.

JWXu1kePtQwT0sMHRSuGblbMqTnn5rFMigV2

Поскольку для этой функции вы будете использовать триггер на основе времени, вам не нужно вводить какой-либо код для определения тестовых событий во всплывающем окне. Просто напишите любое имя под Event name и очистите JSON в поле ниже. Затем нажмите Create.

fLckVqobjQUiH32AMTkhbaMdyQeiyu64KVFU

Нажмите Test в верхней части страницы, и если все работает правильно, вы должны увидеть…

tqJRKThljxHyeBe0EUULpDbIUz6NFKi5Dk9Z

5. Настройте события CloudWatch

Чтобы запустить нашу функцию так же, как задание cron — как регулярное запланированное событие, зависящее от времени, — мы будем использовать CloudWatch. Нажмите CloudWatch Events в Designer боковой панели.

RT2ZUJs1FniR6coBW4HBiM1zlvtfDDvyBt2w

Под Configure triggers, вы создадите новое правило. Выберите для правила описательное имя без пробелов и знаков препинания и убедитесь, что Schedule expression выбран. Затем введите время, которое вы хотите, чтобы ваша программа работала как выражение скорости, или выражение cron.

Выражение cron выглядит так: cron(0 12 * * ? *)

Элементы в скобках представляют по порядку: минуты, часы, день месяца, месяц, день недели и год. По-английски это гласит: «Выполнять в полдень (UTC) каждый день».

Для получения дополнительной информации о том, как писать свои выражения cron, прочитайте this.

Чтобы узнать текущее время в формате UTC, нажмите here.

Если вы хотите, чтобы ваша программа запускалась два раза в день, скажем, один раз в 10:3 и еще раз в XNUMX:XNUMX, вам потребуется установить два отдельных триггера CloudWatch Events и правила выражения cron.

Нажмите Add.

h5qitsKU9RfEayGeKITs32sWemUvD2KYMioV

Смотри, как это происходит

Это все, что вам нужно, чтобы ваша функция Lambda заработала! Теперь вы можете сесть, расслабиться и заняться более важными делами, чем делиться своими RSS-ссылками в Twitter.


Виктория Дрейк



Victoria Drake

Директор по инжинирингу. Я ? команда по кибербезопасности и разработке. Основной сопровождающий, Руководство OWASP по тестированию веб-безопасности. ? https://victoria.dev

ВАМ ТАКЖЕ МОЖЕТ ПОНРАВИТЬСЯ

ОСТАВИТЬ КОММЕНТАРИЙ