计算并发Lambda函数执行的次数

时间:2019-07-14 23:41:18

标签: amazon-web-services aws-lambda amazon-cloudwatch

根据AWS documentation所说,默认情况下,每个帐户一次可以执行1000个并发Lambda函数。承认这是一个软限制,可以根据请求进行更改。

现在,我的问题是无论如何您如何监视并发的Lambda函数执行?

我假设应该(使用某种方式)使用CloudWatch完成此操作。在CloudWatch的 Metrics 部分中,遵循以下路径:

All > Lambda > Across All Functions

您可以找到名称为ConcurrentExecutions的指标。我敢打赌,但与此同时,我没有根据我做过的测试得出数字。在我们到达那里之前,该指标在图表上显示的值不是整数,因此我想我在这里遗漏了一些东西。但这很好。让我告诉你我进行的测试。

我在这样的EC2实例上创建了一个简单的NodeJs脚本:

const AWS = require('aws-sdk');
const https = require('https');

const sslAgent = new https.Agent({
    keepAlive: true,
    maxSockets: 200,
    rejectUnauthorized: true,
});
sslAgent.setMaxListeners(0);

AWS.config.update({
    region: 'us-east-1',
    httpOptions: {
        agent: sslAgent,
    },
});


const lambda = new AWS.Lambda();

function call() {
    return lambda.invoke({
        FunctionName: "test",
        Payload: JSON.stringify({
            wait: 5000,
        }),
    }).promise();
}

(async () => {
  let start = Date.now();
  const promises = [...Array(200).keys()].map(i => {
    return call(new Date(Date.now()).toISOString())
      .then(data => {
        console.log(`Success (${i})`);
      })
      .catch(err => {
        console.log(`Error (${i}): ${err}`);
      });
  });
  await Promise.all(promises);
  let end = Date.now();
  console.log((new Date(end - start).toISOString()).substr(11, 12));
})();

此脚本将调用Lambda函数(称为test)200次,而无需等待单个调用返回。在服务器端,我在Lambda函数中有以下代码:

exports.handler = async (event, context, callback) => {
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return new Promise((resolve) => {
        setTimeout(() => {
            callback(null, response);
            resolve();
        }, event.wait);
    });
};

此Lambda函数将使调用者在输入所经过的时间中保持挂起状态(在这种情况下为5秒)。我运行了此测试,并验证了同时运行200个Lambda函数实例。我通过转到CloudWatch并查看生成的日志来验证了这一点,并生成了200个日志流(每个执行都有单独的日志流)。

但是当我提到上述Metric时,图表仅显示 68.7 ,该数字首先是要显示的奇异数字,其次不是200。那么这个数字是什么,我在哪里可以找到找到我的200?

1 个答案:

答案 0 :(得分:0)

通过询问AWS支持相同的问题,我得到了答案。在CloudWatch中,当您选择一个指标时,它将看起来像这样:

enter image description here

以前,我完全错过了指标的“统计”列。显然,您在这里有不同的选择,可以帮助我找到并发执行次数的选择是 Maximum