Если вы читаете 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 в списке сервисов, затем найдите эту блестящую кнопку:
Мы собираемся создать функцию с нуля. Назовите свою функцию, затем под Runtime
выберите «Перейти 1.x».
Под Role name
напишите любое имя. Это обязательное поле, но не относящееся к данному варианту использования.
Нажмите Create function.
2. Настройте свою функцию
Вы увидите экран для настройки новой функции. Под Handler
введите имя вашей программы Go.
Если вы прокрутите вниз, вы увидите место для ввода переменных среды. Это отличное место для ввода токенов и секретов Twitter API, используя имена переменных, которые ожидает ваша программа. Функция AWS Lambda создаст для вас среду, используя предоставленные здесь переменные.
Для этого случая использования дополнительные настройки не требуются. Нажмите 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. Проверьте свою функцию
Хотите увидеть, как это идет? Конечно, вы делаете! Нажмите «Настроить тестовые события» в раскрывающемся списке вверху.
Поскольку для этой функции вы будете использовать триггер на основе времени, вам не нужно вводить какой-либо код для определения тестовых событий во всплывающем окне. Просто напишите любое имя под Event name
и очистите JSON в поле ниже. Затем нажмите Create
.
Нажмите Test
в верхней части страницы, и если все работает правильно, вы должны увидеть…
5. Настройте события CloudWatch
Чтобы запустить нашу функцию так же, как задание cron — как регулярное запланированное событие, зависящее от времени, — мы будем использовать CloudWatch. Нажмите CloudWatch Events
в Designer
боковой панели.
Под Configure triggers
, вы создадите новое правило. Выберите для правила описательное имя без пробелов и знаков препинания и убедитесь, что Schedule expression
выбран. Затем введите время, которое вы хотите, чтобы ваша программа работала как выражение скорости, или выражение cron.
Выражение cron выглядит так: cron(0 12 * * ? *)
Элементы в скобках представляют по порядку: минуты, часы, день месяца, месяц, день недели и год. По-английски это гласит: «Выполнять в полдень (UTC) каждый день».
Для получения дополнительной информации о том, как писать свои выражения cron, прочитайте this.
Чтобы узнать текущее время в формате UTC, нажмите here.
Если вы хотите, чтобы ваша программа запускалась два раза в день, скажем, один раз в 10:3 и еще раз в XNUMX:XNUMX, вам потребуется установить два отдельных триггера CloudWatch Events и правила выражения cron.
Нажмите Add
.
Смотри, как это происходит
Это все, что вам нужно, чтобы ваша функция Lambda заработала! Теперь вы можете сесть, расслабиться и заняться более важными делами, чем делиться своими RSS-ссылками в Twitter.