使用带有标题和路径的NodeJS从Lambda调用AWS Lambda

时间:2018-03-28 00:59:10

标签: amazon-web-services aws-lambda aws-sdk-nodejs

我想要一个名为GoalsFeed的lambda来使用AWS.Lambda调用另一个名为Goals的lambda。这似乎有效,除了两件事:

  1. 我不确定如何将标头传递给目标服务。

  2. FunctionName是“myapp-goals-get”(又名Goals)但我想转到该服务的特定路径 - 下面显示的三条路径都是有效的,但我想指定“../owner/123”路径。

  3.   
        
    1. http://aws.com/myapp/goals
    2.   
    3. http://aws.com/myapp/goals/1
    4.   
    5. http://aws.com/myapp/goals/owner/123
    6.   

    下面是我的第一个解决方法,有人可以帮我修改它以将“tenantid”作为标题传递并确保在调用“myapp-goals-get”时,它会将自己视为从路径调用“../owner/123”?

    // fetch back all goals by userid
    var lambda = new AWS.Lambda({
        region: 'us-east-1' 
    });
    
    var payload = {};
    payload[ "userId" ] = "123";
    payload[ "tenantid" ] = "1";
    
    const params = {
      FunctionName: 'myapp-goals-get',
      InvocationType: "RequestResponse",
      Payload: JSON.stringify(payload)
    };
    
    lambda.invoke( params, function(error, data) {
      console.log( "data: %s", JSON.stringify( data ) );
    
      if( error ) {
        context.done( 'error', error );
      } 
      else if( data.Payload )
      {
        context.succeed( data.Payload )
      }
    });
    

2 个答案:

答案 0 :(得分:0)

处理此用例的正确方法是使用代理集成设置带有API-Gateway + Lambda的REST API(将所有HTTP标头/正文/转发到您的lambda函数)

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html#api-gateway-proxy-integration-lambda-function-nodejs

然后,您可以在同一请求中链接或再次调用您的API。

答案 1 :(得分:0)

我的解决方案是简单地重置pathParameters并将Event传递给子lambda。

event.pathParameters = { };
event.pathParameters.id = 123;
const tdParms = { 
    FunctionName : 'mylambda', 
    Payload: JSON.stringify( event ) 
};

lambda.invoke( tdParms, function( error, data ) {  
    ... 
}