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

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


当前回答

下面是调用另一个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)

其他回答

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

这是一种迂回的解决方案,但当我需要链接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

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

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

我也有同样的问题,但我实现的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_REGION环境。

assert(process.env.AWS_REGION, 'Missing AWS_REGION env (eg. ap-northeast-1)');
const aws = require('aws-sdk');
const lambda = new aws.Lambda();