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

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


当前回答

您可以设置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();

其他回答

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

你应该通过SNS链接你的Lambda函数。这种方法以最小的工作量提供了良好的性能、延迟和可伸缩性。

你的第一个Lambda发布消息到你的SNS主题,第二个Lambda订阅了这个主题。一旦消息到达主题,第二个Lambda将以消息作为输入参数执行。

参见使用Amazon SNS通知调用Lambda函数。

您还可以使用这种方法通过SNS调用跨帐户Lambda函数。

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

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

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

这个解决方案是使用boto3和Python完成的:

import boto3
import json

lambda_client = boto3.client('lambda', region_name='eu-west-1')

def lambda_handler(event, context):
    lambda_client.invoke(FunctionName = 'function_name', InvocationType = 'RequestResponse', Payload = json.dumps(event))
    
    return True