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

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


当前回答

以下是如何在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;

其他回答

我也有同样的问题,但我实现的Lambda函数将在DynamoDB中插入一个条目,所以我的解决方案使用DynamoDB触发器。

我让DB对表中的每一次插入/更新都调用一个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/

我用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

因为这个问题,亚马逊发布了Step Functions (https://aws.amazon.com/step-functions/)。

AWS Lambda背后的核心原则之一是,您可以更多地关注业务逻辑,而不是将它们联系在一起的应用程序逻辑。步骤函数允许您编排函数之间的复杂交互,而无需编写代码。

您可以直接调用lambda函数(至少通过Java),方法是使用AWS博客文章中描述的AWSLambdaClient。

下面是调用另一个lambda函数并获得其响应的python示例。有两种调用类型“RequestResponse”和“Event”。如果你想获得lambda函数的响应,请使用'RequestResponse',并使用'Event'来异步调用lambda函数。所以异步和同步两种方式都是可用的。

    lambda_response = lambda_client.invoke(
                FunctionName = lambda_name,
                InvocationType = 'RequestResponse',
                Payload = json.dumps(input)
                )
    resp_str = lambda_response['Payload'].read()
    response = json.loads(resp_str)