随机AWS Lambda超时

时间:2017-05-26 10:03:47

标签: node.js amazon-web-services lambda

我们创建了一个名为-execInspector的基于NodeJS的Lambda函数,每天触发一次。此功能基于AWS Lambda蓝图创建 - > "检查调度运行"在NodeJS中。

我们看到的问题是预定的作业在一天或另一天中随机失败。我们只从cloudwatch日志流中获取以下日志。

在一周内,它随机运行= ~4 / 5次&没有剩余的日子。根据日志,它只消耗很少的内存/时间来执行,但不确定它为什么会随机失败。它在被杀之前也会重演3次。

从下面的日志中我们还可以发现该作业只需要35 MB的平均值。 &安培;平均只需60秒即可完成。我们尝试修改NodeJS运行时间,增加内存,超时超出此限制但没有任何效果。

请您帮忙解决一些自动处理这些故障的替代方法。如果有人对其发生的原因有任何见解?

其他输入: 我们已经给出了5分钟的最大超时时间,但是在300秒之后它没有说“#34;超时”。#34;。

我的意思是,只需触发检查员,平均只需不到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 {assessmentRunArn:' arn:aws:inspector:us-east-1:102461617910:target / 0-Ly60lmEP / template / 0- POpZxSLA /运行/ 0-MMx30fLl' } 2017-05-25T18:01:02.935Z 12eb468a-4174-11e7-be7b-6d0faaa584aa {assessmentRunArn:' arn:aws:inspector:us-east-1:102461617910:target / 0-Ly60lmEP / template / 0- POpZxSLA /运行/ 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次,这似乎是重试尝试

6点32分52秒 START RequestId:80190395-404a-11e7-845d-1f88a00ed4f3版本:$ LATEST 6时32分56秒 2017-05-24T06:32:55.942Z 80190395-404a-11e7-845d-1f88a00ed4f3开始执行... 6时33分52秒 END RequestId:80190395-404a-11e7-845d-1f88a00ed4f3 6时33分52秒 REPORT RequestId:80190395-404a-11e7-845d-1f88a00ed4f3持续时间:60000.88 ms结算时长:60000 ms内存大小:128 MB最大使用内存:32 MB 6时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);
    }
};

1 个答案:

答案 0 :(得分:1)

日志表示您的请求在60秒后超时。您可以根据此https://aws.amazon.com/blogs/aws/aws-lambda-update-python-vpc-increased-function-duration-scheduling-and-more/将其设置为高达5分钟。如果您的任务大约需要60秒,超时为60秒,那么可能会有一些超时。这就是日志对我的意思。否则,从函数

发布一些代码