代码之家  ›  专栏  ›  技术社区  ›  Mehran

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

  •  0
  • Mehran  · 技术社区  · 7 年前

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

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

    我想这应该用CloudWatch来完成在 韵律学 CloudWatch的部分,遵循以下路径:

    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秒)我运行了这个测试并验证了Lambda函数有200个实例同时运行我通过访问CloudWatch并查看生成的日志验证了这一点,生成了200个日志流(每个执行都有一个单独的日志流)。

    但当我使用上述指标时,图表只显示 六十八点七 首先要显示的是一个奇怪的数字,其次,它不是200那么这个号码是多少?我在哪里可以找到我的200?

    0 回复  |  直到 7 年前
        1
  •  0
  •   Mehran    7 年前

    通过问AWS支持同样的问题,我得到了答案在CloudWatch中,当您选择一个指标时,它将如下所示:

    enter image description here

    以前,我完全错过了一个指标的统计栏显然,你有不同的选择,帮助我找到并发执行数的是 最大值 .