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

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


当前回答

一个AWS Lambda函数可以调用另一个吗 简单的c#代码——

InvokeRequest RebookingLambdalambda = new InvokeRequest
{
  FunctionName = "Name"
  InvocationType = InvocationType.RequestResponse,
  Payload = "Json Data"
};

其他回答

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

我一直在考虑删除SNS,直到我在Lambda客户端文档(Java版本)中看到了这个:

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

所以SNS有一个明显的优势:它是异步的。你的lambda不会等待后续的lambda完成。

其他人指出使用SQS和步骤函数。但这两种解决方案都增加了额外的成本。阶跃函数的状态转换应该是非常昂贵的。

AWS lambda提供了一些重试逻辑。它尝试某件事3次。我不确定当你使用API触发它时,它是否仍然有效。

以下是如何在javascript/typescript中做到这一点,而无需安装完整的aws-sdk包。

import { InvokeCommand, LambdaClient, LogType } from "@aws-sdk/client-lambda";

const client = new LambdaClient({
    region: "US-EAST-1"
});

const payload = JSON.stringify({
  data: "your input"
})

const command = new InvokeCommand({
  FunctionName: "your function name",
  Payload: payload,
  LogType: LogType.Tail,
});

const { Payload } = await client.send(command);
const response: any = Payload;
const result = Buffer.from(response).toString();

return result;

你可能会使用Async.js的瀑布特性——参见本文档第3步大代码块底部的示例:

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