AWS Lambda函数可以调用另一个

node.js Node.js

神奇神奇Near

2020-03-18

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

我到处都可以想到的地方-但是看不到如何链接或调用函数...肯定存在!

第2138篇《AWS Lambda函数可以调用另一个》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

10个回答
斯丁Davaid 2020.03.18

其他人指出要使用SQS和步进功能。但是这两种解决方案都增加了额外的成本。据说步函数状态转换非常昂贵。

AWS lambda提供了一些重试逻辑。尝试3次的地方。我不确定使用API​​触发它是否仍然有效。

伽罗Mandy 2020.03.18

一种回旋解决方案,但是当我需要链接它们时,我只是为我的lambda函数调用API端点这使您可以在编码时决定是否希望它们异步。

如果您不想设置POST请求,则可以只设置一个简单的GET请求,其中包含几个查询字符串参数,或者根本不设置两个查询字符串参数,以方便事件传递。

-编辑-

请参阅:https//docs.aws.amazon.com/apigateway/api-reference/making-http-requests/

和:http : //docs.aws.amazon.com/lambda/latest/dg/with-on-demand-https-example.html

小哥TomA 2020.03.18

在java中,我们可以执行以下操作:

AWSLambdaAsync awsLambdaAsync = AWSLambdaAsyncClientBuilder.standard().withRegion("us-east-1").build();

InvokeRequest invokeRequest = new InvokeRequest();
invokeRequest.withFunctionName("youLambdaFunctionNameToCall").withPayload(payload);

InvokeResult invokeResult = awsLambdaAsync.invoke(invokeRequest); 

在这里,有效负载是字符串化的 java对象,需要将它作为Json对象传递给另一个lambda,以防您需要将某些信息从调用lambda传递给被调用的lambda。

理查德Near小宇宙 2020.03.18

您可以通过直接调用lambda函数(至少通过Java)AWSLambdaClient作为AWS的博客中描述

神离伊芙妮 2020.03.18

我遇到了同样的问题,但是我实现的Lambda函数将在DynamoDB中插入一个条目,因此我的解决方案使用DynamoDB触发器。

我让数据库为表中的每个插入/更新调用Lambda函数,因此这将两个Lambda函数的实现分开。

文档在这里:http : //docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.Lambda.html

这是一个指导性的演练:https : //aws.amazon.com/blogs/aws/dynamodb-update-triggers-streams-lambda-cross-region-replication-app/

泡芙Green 2020.03.18

您也许可以使用Async.js Waterfall功能-有关示例,请参阅本文档第3步中大代码块的底部:

https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/

宝儿达蒙 2020.03.18

亚马逊于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步骤功能的更多信息: 步骤功能

Harry小哥 2020.03.18

您应该将您的Lambda functionsvia链接起来SNS这种方法以最小的工作量提供了良好的性能,延迟和可伸缩性。

您的第一个Lambda向您发布消息,SNS Topic第二个Lambda已订阅该主题。一旦消息到达主题,就将Lambda消息作为输入参数来执行

请参阅使用Amazon SNS通知调用Lambda函数

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

路易宝儿 2020.03.18

自从提出此问题以来,Amazon已发布了Step Functions(https://aws.amazon.com/step-functions/)。

AWS Lambda背后的核心原则之一是,您可以将更多精力放在业务逻辑上,而将精力放在将它们联系在一起的应用程序逻辑上。逐步函数使您能够协调函数之间的复杂交互,而无需编写代码来完成。

Itachi小卤蛋 2020.03.18

我一直在考虑淘汰SNS,直到在Lambda客户端文档(Java版)中看到了这一点

用于访问AWS Lambda的客户端。使用此客户端进行的所有服务调用都处于阻塞状态,直到该服务调用完成才返回。

因此SNS具有明显的优势:它是异步的。您的lambda不会等待后续的lambda完成。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android