Тайм-аут для лямбды: экспорт журналов Cloudfront из S3 в ElasticSearch - PullRequest
0 голосов
/ 11 июня 2018

Я написал функцию Lambda для отправки журналов Cloudfront в Elasticsearch.Worklow следующим образом:1. Cloudfront отправляет журналы (сжатые в формате .gz) в S32. Bucket отправляет уведомление, которое перехватывается функцией Lambda.3. Лямбда срабатывает.Распакуйте журналы и отправьте их в Elasticsearch.

Я использую для этого s3-to-logstore в сочетании с winston-parser .

Лямбда действительно запущена, но только одна часть журналов отправляется в Elasticsearch, потому что тайм-аут функции Lambda (я установил тайм-аут на максимум: 5 минут).

Я подозреваю, что распаковка журналов .gz займет некоторое время, но самое большее 30 KB, что не так много и не должно занять много времени.

Я был вдохновлен этим примером , и вот моя функция:

var s3ToLogstore = require('s3-to-logstore');
var winston = require('winston');
require('winston-elasticsearch');

var elasticsearch = require('elasticsearch');

var client = new elasticsearch.Client({
  host: process.env.ES_HOST,
  log: 'trace'
});

var transport = new winston.transports.Elasticsearch({
  indexPrefix: process.env.ES_INDEXPREFIX,
  client: client
});

var options = {
  format: process.env.FORMAT,
  transport: transport,
  reformatter: function(data){
    data.environment = process.env.STAGE;
    data.origin = process.env.FORMAT;
    return data;
  }
};

exports.handler = s3ToLogstore(options);

Журналы Cloudwatch полностью в порядке, и в них нет ошибок.Лямбда просто тайм-аут, и я не могу понять, почему.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 12 июня 2018

Скорее всего, клиентasticsearch сохраняет соединение открытым, поэтому лямбда-код никогда не останавливается.Попробуйте установить для свойства keepAlive значение false.

var client = new elasticsearch.Client({
  host: process.env.ES_HOST,
  log: 'trace',
  keepAlive: false
});

См. KeepAlive и связанные свойства.https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/configuration.html

...