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

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


当前回答

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

其他回答

下面是python的示例代码,

from boto3 import client as boto3_client
from datetime import datetime
import json

lambda_client = boto3_client('lambda')

def lambda_handler(event, context):
    msg = {"key":"new_invocation", "at": datetime.now()}
    invoke_response = lambda_client.invoke(FunctionName="another_lambda_",
                                           InvocationType='Event',
                                           Payload=json.dumps(msg))
    print(invoke_response)

顺便说一句,您还需要向您的lambda角色添加这样的策略

   {
        "Sid": "Stmt1234567890",
        "Effect": "Allow",
        "Action": [
            "lambda:InvokeFunction"
        ],
        "Resource": "*"
    }

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

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

有很多答案,但没有一个是强调调用另一个lambda函数不是同步调用的推荐解决方案,你应该使用的是真正的步骤函数

不建议解决的原因:

当两个函数相互等待时,你为它们支付了费用 你的代码负责重试

您还可以将它用于相当复杂的逻辑,例如并行步骤和捕获失败。每次执行都被注销,这使得调试更加简单。

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

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

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