我有2个Lambda函数——一个生成报价,一个将报价转换为订单。 我希望Order lambda函数调用Quote函数来重新生成报价,而不是仅仅从不受信任的客户端接收报价。
我已经看遍了我能想到的所有地方——但不知道我该如何链接或调用函数……这当然存在!
我有2个Lambda函数——一个生成报价,一个将报价转换为订单。 我希望Order lambda函数调用Quote函数来重新生成报价,而不是仅仅从不受信任的客户端接收报价。
我已经看遍了我能想到的所有地方——但不知道我该如何链接或调用函数……这当然存在!
当前回答
有很多答案,但没有一个是强调调用另一个lambda函数不是同步调用的推荐解决方案,你应该使用的是真正的步骤函数
不建议解决的原因:
当两个函数相互等待时,你为它们支付了费用 你的代码负责重试
您还可以将它用于相当复杂的逻辑,例如并行步骤和捕获失败。每次执行都被注销,这使得调试更加简单。
其他回答
其他人指出使用SQS和步骤函数。但这两种解决方案都增加了额外的成本。阶跃函数的状态转换应该是非常昂贵的。
AWS lambda提供了一些重试逻辑。它尝试某件事3次。我不确定当你使用API触发它时,它是否仍然有效。
你应该通过SNS链接你的Lambda函数。这种方法以最小的工作量提供了良好的性能、延迟和可伸缩性。
你的第一个Lambda发布消息到你的SNS主题,第二个Lambda订阅了这个主题。一旦消息到达主题,第二个Lambda将以消息作为输入参数执行。
参见使用Amazon SNS通知调用Lambda函数。
您还可以使用这种方法通过SNS调用跨帐户Lambda函数。
以下是如何在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;
一个AWS Lambda函数可以调用另一个吗 简单的c#代码——
InvokeRequest RebookingLambdalambda = new InvokeRequest
{
FunctionName = "Name"
InvocationType = InvocationType.RequestResponse,
Payload = "Json Data"
};
我用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