我有2个Lambda函数——一个生成报价,一个将报价转换为订单。 我希望Order lambda函数调用Quote函数来重新生成报价,而不是仅仅从不受信任的客户端接收报价。

我已经看遍了我能想到的所有地方——但不知道我该如何链接或调用函数……这当然存在!


当前回答

有很多答案,但没有一个是强调调用另一个lambda函数不是同步调用的推荐解决方案,你应该使用的是真正的步骤函数

不建议解决的原因:

当两个函数相互等待时,你为它们支付了费用 你的代码负责重试

您还可以将它用于相当复杂的逻辑,例如并行步骤和捕获失败。每次执行都被注销,这使得调试更加简单。

其他回答

你应该通过SNS链接你的Lambda函数。这种方法以最小的工作量提供了良好的性能、延迟和可伸缩性。

你的第一个Lambda发布消息到你的SNS主题,第二个Lambda订阅了这个主题。一旦消息到达主题,第二个Lambda将以消息作为输入参数执行。

参见使用Amazon SNS通知调用Lambda函数。

您还可以使用这种方法通过SNS调用跨帐户Lambda函数。

我正在使用blueskin提供的答案,但我无法读取有效负载响应,因为InvocationType='Event'是异步的,所以我更改为InvocationType='RequestResponse',现在一切正常。

我用aws-sdk找到了一个方法。

var aws = require('aws-sdk');
var lambda = new aws.Lambda({
  region: 'us-west-2' //change to your region
});

lambda.invoke({
  FunctionName: 'name_of_your_lambda_function',
  Payload: JSON.stringify(event, null, 2) // pass params
}, function(error, data) {
  if (error) {
    context.done('error', error);
  }
  if(data.Payload){
   context.succeed(data.Payload)
  }
});

你可以在这里找到医生:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html

您可以以异步方式直接从其他Lambda函数直接触发Lambda函数。

https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#invocation-async-destinations

亚马逊于2016年在AWS lambda中引入了步骤函数。我认为,现在使用步骤函数更方便,因为它真的很容易使用。你可以用两个lambda函数构建一个状态机:

产生一个报价 将报价转化为订单

你可以很容易地做到如下:

在这里,您可以使用第一个状态生成报价,另一个状态转换为订单

{
  Comment: "Produce a quote and turns into an order",
  StartAt: "ProduceQuote",
  States: {
    ProduceQuote: {
      "Type": Task,
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ProduceQuote",
      "next": TurnsToOrder
    }
    TurnsToOrder: {
      Type: Task,
      Resource: "arn:aws:lambda:us-east-1:123456789012:function:ProduceQuote",
      end: true
    }
  }
}

Steps函数使得编写多个lambda函数并按顺序或并行运行变得非常容易。 你可以在这里获得更多关于lambda steps函数的信息: 步骤的功能