2

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

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

  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”作为标题传递,并确保在调用“myapp-goals-get”时,它认为自己是从带有“.. /所有者/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 )
  }
});
4

2 回答 2

1

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

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

lambda.invoke( tdParms, function( error, data ) {  
    ... 
}
于 2018-03-30T06:25:29.150 回答
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-节点

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

于 2018-03-28T01:11:07.567 回答