Pull to refresh

Пример получения данных из AWS Cloudwatch используя Google Script

Reading time2 min
Views4.5K
Cloudwatch Log это сервис AWS в который приложения или Bash скрипты могут отправлять данные в виде строк или JSON, потом их можно найти или построить различные графики средствами того же AWS.

Как то раз у меня возникло желание получить данные из AWS Cloudwatch Log, обработать их особым образом и красиво представить в виде графика. Google Spreadsheet хорошо справляется с визуализацией данных, и ранее для подобных задач я загружал в него данные используя Ruby. Но тот же ruby скрипт нужно где-то хостить и периодически запускать, а все что он будет делать это запрашивать данные из одного API (AWS) и ложить их в другой (Spreadsheet). Хорошо бы, если бы Spreadsheet сам мог бы запрашивать данные, и оказывается он может, используя Google Script. Удивительно, сколько всего на самом деле умеют гугл доки.

Google Script позволяет не только создавать пользовательские функции и макросы используя JavaScript, но и обращаться к внешнему API.
У AWS есть SDK под JavaScript, так что я не ожидал никаких сложностей, но не тут то было. Оказалось, что этот SDK будучи импортированным в проект GS не может найти объект «window» и не работает.

Пришлось почитать API доки и самому реализовать вычисления сигнатуры для запроса. В этом нет ничего технически сложного, просто склеивание строк и вычисление хеша. Поэтому я не вдаюсь в подробности, а просто представляю свое решение на случае если кто-то столкнётся с подобной задачей.


код выложен на GitHub

Что бы проверить его работу можете:
  • сделать копию документа
  • открыть «Инструменты» -> «Редактор скриптов»
  • в «Файл»->«Свойства проекта»->«Свойства скрипта» добавить строки «access_key_id» и «secret_access_key» и указать в них значения своих API ключей
  • Потом открыть файл «Код.gs» и запустить функцию «dataFromCloudWatch»
  • Результаты будут видны в «Вид»->«Отчет о выполнении». Это для простоты. В реальной задаче ответ легко распарсить и вставить значения в соответствующие ячейки электронной таблицы.


Код использует запрос GetMetricStatistics но при необходимости вы можете запросить любой другой метод, алгоритм подписи останется без изменений.

Update: Совсем забыл упомянуть, что можно настроить периодический запуск этой функции через «Ресурсы»->«Триггеры текущего проекта».
Tags:
Hubs:
+7
Comments0

Articles

Change theme settings