我们创建了一个基于NodeJS的Lambda函数,名为execInspector,该函数每天触发一次。此功能是基于NodeJS中的AWS Lambda蓝图->“检查员计划运行”创建的。
我们看到的问题是预定作业在某天或另一天随机失败。我们仅从cloudwatch日志流中获取以下日志。
在一周内,它随机运行=〜4/5次,并在剩余天数内失效。根据日志,它只消耗很少的内存/时间来执行它,但是不确定为什么它会随机失败。在被杀死之前,它还会重试3次。
从下面的日志中,我们还可以发现该作业平均仅需要35 MB。 &只需60秒即可完成平均效果。我们尝试修改NodeJS运行时间,增加内存,超时时间超出此限制,但没有任何解决方法。
您能提供一些替代方法来自动处理这些故障吗?如果有人对发生这种情况的原因有深入的了解,您能提供帮助吗?
附加输入:
我们也已经给出了5分钟的最大超时时间,但是没有说“ 300秒后超时”。
我的意思是,仅触发检查员的平均时间就不到30秒。由于它是基于PaaS的解决方案,所以我不能指望它总是能在30秒内完成。但是60秒应该足以处理30秒内能完成的工作。
示例CloudWatch成功日志:
18:01:00
START RequestId:12eb468a-4174-11e7-be7b-6d0faaa584aa版本:$ LATEST
18:01:03
2017-05-25T18:01:02.935Z 12eb468a-4174-11e7-be7b-6d0faaa584aa {rationalRunArn:'arn:aws:inspector:us-east-1:102461617910:target / 0-Ly60lmEP / template / 0-POpZxSLA / run / 0-MMx30fLl'}
2017-05-25T18:01:02.935Z 12eb468a-4174-11e7-be7b-6d0faaa584aa {rationalRunArn:'arn:aws:inspector:us-east-1:102461617910:target / 0-Ly60lmEP / template / 0-POpZxSLA / run / 0-MMx30fLl'}
18:01:03
END RequestId:12eb468a-4174-11e7-be7b-6d0faaa584aa
END RequestId:12eb468a-4174-11e7-be7b-6d0faaa584aa
18:01:03
REPORT RequestId:12eb468a-4174-11e7-be7b-6d0faaa584aa持续时间:2346.37 ms计费持续时间:2400 ms内存大小:128 MB使用的最大内存:33 MB
REPORT RequestId:12eb468a-4174-11e7-be7b-6d0faaa584aa持续时间:2346.37 ms计费持续时间:2400 ms内存大小:128 MB使用的最大内存:33 MB
Cloudwatch日志:
下面的类似日志重复3次,似乎是重试尝试
06:32:52
START RequestId:80190395-404a-11e7-845d-1f88a00ed4f3版本:$ LATEST
06:32:56
2017-05-24T06:32:55.942Z 80190395-404a-11e7-845d-1f88a00ed4f3开始执行...
06:33:52
END RequestId:80190395-404a-11e7-845d-1f88a00ed4f3
06:33:52
REPORT RequestId:80190395-404a-11e7-845d-1f88a00ed4f3持续时间:60000.88 ms计费持续时间:60000 ms内存大小:128 MB使用的最大内存:32 MB
06:33:52
2017-05-24T06:33:52.437Z 80190395-404a-11e7-845d-1f88a00ed4f3任务在60.00秒后超时
2017-05-24T06:33:52.437Z 80190395-404a-11e7-845d-1f88a00ed4f3任务在60.00秒后超时
Lambda代码:
'use strict';
/**
* A blueprint to schedule a recurring assessment run for an Amazon Inspector assessment template.
*
* This blueprint assumes that you've already done the following:
* 1. onboarded with the Amazon Inspector service https://aws.amazon.com/inspector
* 2. created an assessment target - what hosts you want to assess
* 3. created an assessment template - how you want to assess your target
*
* Then, all you need to do to use this blueprint is to define an environment variable in the Lambda console called
* `assessmentTemplateArn` and provide the template arn you want to run on a schedule.
*/
const AWS = require('aws-sdk');
const inspector = new AWS.Inspector();
const params = {
assessmentTemplateArn: process.env.assessmentTemplateArn,
};
exports.handler = (event, context, callback) => {
try {
// Inspector.StartAssessmentRun response will look something like:
// {"assessmentRunArn":"arn:aws:inspector:us-west-2:123456789012:target/0-wJ0KWygn/template/0-jRPJqnQh/run/0-Ga1lDjhP"
inspector.startAssessmentRun(params, (error, data) => {
if (error) {
console.log(error, error.stack);
return callback(error);
}
console.log(data);
return callback(null, data);
});
} catch (error) {
console.log('Caught Error: ', error);
callback(error);
}
};
最佳答案
日志显示您的请求在60秒后超时。您可以根据此https://aws.amazon.com/blogs/aws/aws-lambda-update-python-vpc-increased-function-duration-scheduling-and-more/将其设置为最高5分钟。如果您的任务耗时约60秒,并且超时为60秒,则可能有些超时。那就是日志对我的暗示。否则,从函数中发布一些代码
关于node.js - AWS Lambda超时随机,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44198782/