我有2个Lambda函数-一个产生报价,另一个将报价变成订单。我希望Order lambda函数调用Quote函数来重新生成报价,而不是仅仅从不受信任的客户端接收报价。
我到处都可以想到的地方-但是看不到如何链接或调用函数...肯定存在!
我有2个Lambda函数-一个产生报价,另一个将报价变成订单。我希望Order lambda函数调用Quote函数来重新生成报价,而不是仅仅从不受信任的客户端接收报价。
我到处都可以想到的地方-但是看不到如何链接或调用函数...肯定存在!
一种回旋解决方案,但是当我需要链接它们时,我只是为我的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
在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。
您可以通过直接调用lambda函数(至少通过Java)AWSLambdaClient
作为AWS的博客中描述后。
我遇到了同样的问题,但是我实现的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/
您也许可以使用Async.js Waterfall功能-有关示例,请参阅本文档第3步中大代码块的底部:
https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/
亚马逊于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步骤功能的更多信息: 步骤功能
您应该将您的Lambda functions
via链接起来SNS
。这种方法以最小的工作量提供了良好的性能,延迟和可伸缩性。
您的第一个Lambda
向您发布消息,SNS Topic
第二个Lambda
已订阅该主题。一旦消息到达主题,就将Lambda
消息作为输入参数来执行秒。
您还可以使用此方法通过SNS调用跨帐户Lambda函数。
自从提出此问题以来,Amazon已发布了Step Functions(https://aws.amazon.com/step-functions/)。
AWS Lambda背后的核心原则之一是,您可以将更多精力放在业务逻辑上,而将精力放在将它们联系在一起的应用程序逻辑上。逐步函数使您能够协调函数之间的复杂交互,而无需编写代码来完成。
我一直在考虑淘汰SNS,直到在Lambda客户端文档(Java版)中看到了这一点:
用于访问AWS Lambda的客户端。使用此客户端进行的所有服务调用都处于阻塞状态,直到该服务调用完成才返回。
因此SNS具有明显的优势:它是异步的。您的lambda不会等待后续的lambda完成。
其他人指出要使用SQS和步进功能。但是这两种解决方案都增加了额外的成本。据说步函数状态转换非常昂贵。
AWS lambda提供了一些重试逻辑。尝试3次的地方。我不确定使用API触发它是否仍然有效。