【问题标题】:AWS Lambda call LambdaAWS Lambda 调用 Lambda
【发布时间】:2019-12-04 02:05:55
【问题描述】:

我正在尝试从我拥有的另一个函数中调用一个 Lambda 函数。我设置了我的权限,所以这不是问题。

我的问题是该函数不会一直等待 Invoke 函数完成并返回 NULL。

这是我正在使用的代码:

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

exports.handler = async (event, context, callback) => {

    var lambda = new AWS.Lambda({region: 'us-east-1', apiVersion: '2015-03-31'});

    var params = {
        FunctionName: 'testFunction',
        InvocationType: 'RequestResponse'
    }
    lambda.invoke(params, function(err, data){
        console.log(err);
        console.log('here');
    }).promise().then(data=> { callback(null, {message:'done'}); });

};

{message:'done'} 从未显示。我被推荐使用 invokeAsync 但该功能已被 AWS 弃用。

我知道问题在于该函数正在同步运行 lambda.invoke,因为如果我在 lambda.invoke 函数之外添加callback(null, {message:'done'});,那么我可以看到 console.logs 正在工作。

有什么帮助吗?

【问题讨论】:

    标签: aws-lambda


    【解决方案1】:

    TL;DR - 删除第 3 行中的“异步”,它应该可以工作。

    您的问题似乎是由此处的 async 关键字引起的。我重新创建了它并将其部署到 Lambda 以在 Node v8.10 上运行(但指向它当然是调用我自己的 lambda 函数之一)。

    你为什么在这里使用“异步”? async 关键字声明定义了一个异步函数并返回一个 AsyncFunction 对象。 AWS Lambda 应该是一个函数,而不是 AsyncFunction,您的“空”结果可能只是 Lambda 立即放弃,因为它找不到常规函数。此外,async 几乎只与await 一起使用(至少在我见过的 99% 的情况下是这样),并且由于您的代码根本没有使用await,所以我没有看到任何理由也可以使用async

    【讨论】:

      猜你喜欢
      • 2019-07-26
      • 2021-09-19
      • 2017-07-13
      • 2021-08-04
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2020-12-20
      • 2016-02-04
      相关资源
      最近更新 更多