使用 AWS Lambda 方法循环遍历列表并调用多个其他 lambda 方法

问题描述 投票:0回答:3

我当前正在调用 RDS 数据库来获取项目列表,然后循环访问这些项目,然后对每个项目进行 POST 调用。我的问题是:

是否可以循环遍历此列表并为列表中的每个项目调用另一个 Lambda 函数。理想情况下,这不会等待响应,而是会继续呼叫其他人。每个被调用的方法都会继续运行,直到完成。请注意,这是基于 NodeJs 6.10

结构如下:

  var pg = require('knex')({
    client: 'pg',
    connection: process.env.DATABASE_URL,
    debug: true
  });

  // Internal
  const time = require('./lib/time');
  const response = require('./lib/response');
  const helpers = require('./lib/helpers');

  module.exports.createBatch = (event, context, cb) => {

    // Lambda settings
    context.callbackWaitsForEmptyEventLoop = false;

    const now = time.getCurrentTime();

    pg('table')
      .join('table')
      .select('*')

      .then(function(rows) {
         return rows;
      })

      .then(function(rows) {
        console.log( 'rows: ' + rows );

        let count = 0;
        if (!_.isEmpty(rows)) {
          for(let row of rows) {

            // ****
            // CALL OTHER LAMBDA FUNCTION HERE
            // ****

            axios.post(row)
              .then(function (res) {

              // ****
              //  MOVE THIS POST CALL INTO ANOTHER LAMBDA FUNCTION
              // ****

              })

          }
        }
      })
javascript node.js amazon-web-services aws-lambda aws-sdk
3个回答
2
投票

您想要使用适用于 Nodejs 的 AWS 开发工具包来调用 Lambda invoke() 函数。传递

InvocationType: Event
参数即可异步调用该函数,无需等待响应。


0
投票

是的,您可以使用“lambda.invoke”来做到这一点。请参阅此处有关调用的更多详细信息


0
投票

由于几个原因,您的建议并不理想。即

虽然这种同步流程可以在服务器上的单个应用程序中工作,但它在分布式无服务器架构中引入了几个可以避免的问题:

成本:使用 Lambda,您需要为调用期间付费。在此示例中,当“创建发票”函数运行时,其他两个函数也在等待状态下运行,如图中红色所示。

错误处理:在嵌套调用中,错误处理可能会变得更加复杂。错误要么被抛出到父函数以在顶级函数处处理,要么函数需要自定义处理。例如,创建发票中的错误可能需要处理付款功能来冲销费用,或者可能会重试创建发票流程。

紧密耦合:处理付款通常比创建发票需要更长的时间。在这个模型中,整个工作流程的可用性受到最慢函数的限制。

相反,您可以使用 AWS 步骤函数创建分布式地图作业。您可以阅读更多相关信息这里

© www.soinside.com 2019 - 2024. All rights reserved.