CloudWatch регистрирует несколько пользовательских метрических фильтров для запуска лямбда-функции - PullRequest
0 голосов
/ 17 мая 2018

Я только начинаю изучать aws, и я создал пару пользовательских метрических фильтров в облачном журнале и подписываюсь на одну и ту же функцию лямбда-функции, но я хочу, чтобы моя лямбда-функция выполняла разностные действия, в зависимости от того, какой фильтр метрикивызвать его.В лямбда-функции (в python), как я могу узнать, какой метрический фильтр запускает ее?

1 Ответ

0 голосов
/ 17 мая 2018

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

Разархивированная структура:

{ messageType: 'DATA_MESSAGE',
  owner: '123456789123',
  logGroup: 'testLogGroup',
  logStream: 'testLogStream',
  subscriptionFilters: [ 'testFilter' ],
  logEvents: 
   [ { id: 'eventId1',
       timestamp: 1440442987000,
       message: '[ERROR] First test message' },
     { id: 'eventId2',
       timestamp: 1440442987001,
       message: '[ERROR] Second test message' } ] }

Это можно найти в Документах AWS в журналах CloudWatch.

Вы можете проверить поле subscriptionFilters в данных события, чтобы проверить, какой фильтр активировал лямбду.

Если ваша Lambda была в NodeJS, вы могли бы написать что-то вроде следующего:

const zlib = require('zlib');
const YOUR_FILTER = 'filter1';

exports.handler = async (event) => {
    const zippedInput = new Buffer(event.awslogs.data, 'base64');
    await new Promise((resolve, reject) => {
        zlib.gunzip(zippedInput, function (e, buffer) {
            const awslogsData = JSON.parse(buffer.toString('utf-8'));
            // Conditions on filters to do something
            if (awslogsData.subscriptionFilters.includes(YOUR_FILTER)) {
                // do something
            } else if (awslogsData.subscriptionFilters.includes('your_other_filter')) {
                // do something else
            }

            resolve();
        });
    })

    return 'Hello from Lambda!'
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...