Приклад отримання даних з AWS Cloudwatch за допомогою Google Script

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: Зовсім забув згадати, що можна налаштувати періодичний запуск цієї функції через «Ресурси» - > «Тригери поточного проекту».

logo