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

Call AWS Lambda from a Lambda using NodeJS with Headers and Path

我想要一个名为 GoalsFeed 的 lambda 使用 AWS.Lambda 调用另一个名为 Goals 的 lambda。这似乎可行,但有两点除外:

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

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

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

下面是我对此的第一个破解,有人可以帮我修改它以将 "tenantid" 作为 header 传递并确保当 "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 )
  }
});

处理此 use-case 的正确方法是使用 API-Gateway + Lambda 使用代理集成设置 REST API(将所有 HTTP Headers/body/etc 转发到您的 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。

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

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

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