Вызов AWS Lambda из Lambda с использованием NodeJS с заголовками и путем

Я бы хотел, чтобы лямбда под названием GoalsFeed вызывала другую лямбду с именем Goals, используя AWS.Lambda. Кажется, это работает, за исключением двух вещей:

  1. Я не уверен, как передать заголовок целевой службе.

  2. FunctionName - это "myapp-goal-get" (он же Goals), но я хочу перейти к определенному пути в этом сервисе - все три пути, показанные ниже, являются действительными, но я хочу указать "../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-goal-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 )
  }
});

2 ответа

Решение

Моим решением было просто сбросить pathParameters и передать событие дочерней лямбде.

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

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

Правильный способ обработки этого варианта использования - настроить REST API с API-шлюзом + лямбда с использованием интеграции прокси (для пересылки всех заголовков HTTP / тела / и т. Д. В вашу функцию лямбда)

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

Затем вы можете выполнить цепочку внутри того же запроса или сделать еще один вызов вашему API.

Другие вопросы по тегам