Node.js Lambda超时:将Cloudfront日志从S3导出到ElasticSearch
我编写了一个Lambda函数将Cloudfront日志发送到ElasticsearchNode.js Lambda超时:将Cloudfront日志从S3导出到ElasticSearch,node.js,amazon-web-services,aws-lambda,amazon-cloudfront,Node.js,Amazon Web Services,Aws Lambda,Amazon Cloudfront,我编写了一个Lambda函数将Cloudfront日志发送到Elasticsearch 工作流程如下: 1.Cloudfront将日志(压缩为.gz格式)发送到S3 2.存储桶发送的通知被Lambda函数捕获 3.Lambda被触发。解压缩日志并将其发送到Elasticsearch 我用这个和 Lambda确实被触发,但只有一部分日志被发送到Elasticsearch,因为Lambda函数超时(我将超时设置为最大值:5min) 我怀疑解压缩.gz日志需要一些时间,但它最多是30kb,这并不多,也
工作流程如下:
1.Cloudfront将日志(压缩为
.gz
格式)发送到S32.存储桶发送的通知被Lambda函数捕获
3.Lambda被触发。解压缩日志并将其发送到Elasticsearch
我用这个和
Lambda确实被触发,但只有一部分日志被发送到Elasticsearch,因为Lambda函数超时(我将超时设置为最大值:5min) 我怀疑解压缩
.gz
日志需要一些时间,但它最多是30kb
,这并不多,也不应该花很长时间
我受此启发,以下是我的职能:
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日志完全正常,没有错误。Lambda只是超时了,我不知道为什么
任何帮助都将不胜感激 很可能elasticsearch客户端保持连接打开,因此lambda从未停止。尝试将keepAlive属性设置为false
var client = new elasticsearch.Client({
host: process.env.ES_HOST,
log: 'trace',
keepAlive: false
});
请参阅keepAlive和相关属性。
感谢您的宝贵意见。我这样做了,但我仍然得到超时错误。