Инструмент, который предупреждает вас, если пользователи запускают дорогостоящие запросы в механизме запросов Amazon Athena, был открыт разработчиками.
Athena Alerter был разработан командой Fandom Engineering и предназначен для решения проблемы, заключающейся в том, что механизм запросов больших данных AWS Athena прост в использовании, но из-за своей простоты может легко накапливать большие счета.
Можно писать менее затратные запросы, используя разделы для ограничения объема данных, к которым осуществляется доступ, но для этого нужно, чтобы составитель запросов не забывал использовать раздел и понимал, насколько дорогим может быть вопрос. Это особенно актуально при работе с внешним инструментом.
Из-за возможности так быстро потратить деньги на Athena, команда разработчиков Fandom Engineering разработала Athena Alerter. Это набор лямбда-функций с открытым исходным кодом, предназначенный для совместной работы, чтобы отслеживать, какие запросы выполняются, сколько данных они сканируют (что напрямую сопоставляется с затратами), и уведомлять пользователей, когда они запускают дорогостоящие запросы.
Поскольку Fandom Engineering использует Slack для внутренней связи, Athena Alerter уведомляет пользователей, отправляя сообщения Slack. Однако разработчики отмечают, что, учитывая очень модульную природу инструмента, легко настроить функцию уведомления для использования другого механизма.
Внутренне инструмент оповещения использует Cloudtrail, Lambda, DynamoDB, SQS и S3 и настраивается с помощью сценария CloudFormation, который создаст все необходимые для вас компоненты AWS. Пользователь должен указать свою конкретную конфигурацию, а затем использовать предоставленный make-файл.
Для обработки информации о запросах Athena инструмент сначала обрабатывает журналы Cloudtrail, чтобы узнать, кто запустил какой запрос, а затем использует API Athena для отслеживания запроса и получения информации об объеме отсканированных данных. Затем эта информация отправляется в DynamoDB и SQS, и пользователи получают уведомление.
По сути, инструмент состоит из трех лямбда-функций:
cloudtrail_handler — эта функция обрабатывает логи Cloudtrail и добавляет записи в таблицу DynamoDB. На этом этапе функция предоставляет запрос, пользователя-исполнителя, время начала и идентификатор выполнения.
usage_update — эта функция запускается каждую минуту, принимает запросы, которые находятся в состоянии «Выполняется», и обновляет информацию об объеме отсканированных данных. Обратите внимание, что api athena не предоставляет информацию о том, кто выполняет запрос, поэтому инструмент для этого полагается на cloudtrail. Когда выполнение запроса завершается, генерируется событие SQS.
уведомление — эта функция запускается для каждого события sqs, проверяет, превышает ли объем отсканированных данных порог уведомления, и, если да, генерирует сообщение о резерве. Если вы хотите по-другому обрабатывать отсканированные данные, эту функцию можно легко заменить вашей собственной реализацией.
Афина Альтерер доступна на Github.