Могу ли я передать параметры пути, используя лямбда-вызов, в другую лямбда-функцию? - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь вызвать и получить ответ от другой лямбда-функции, используя лямбда-вызов. Проблема в том, что другая лямбда-функция нуждается в отправке идентификатора в качестве параметров пути (или в виде строки запроса). Но я не вижу опции в лямбде, вызывающей для этого. Если я передам идентификатор в полезной нагрузке, другая функция получит его в теле события, а не в качестве параметров пути. Есть ли для этого решение?

Вот функция внутри лямбда-функции, которая вызывает другую лямбда-функцию, которая получает данные в виде параметров строки запроса

function getWisIqLink(data) {
  const payload = {
    queryStringParameters: {
      userId: data.userId,
      eventId: data.eventId,
    }
  };
  const param = {
    FunctionName: 'consult-rest-api-dev-WisiqClassGet',
    InvocationType: "RequestResponse",
    Payload: JSON.stringify(payload)
  }

  return new Promise((resolve, reject) => {
  // console.log(`Starting promiseInvoke InvokeAsync with ES6 promise wrapper - ${functionName}`);
   lambda.invoke(param,(err, data) => {
      if (err) {
        reject(err);
      } else {
        resolve(JSON.parse(data));
      }
    }
  );
});
}

Здесь приведен фрагмент лямбда-функции, которая получает данные в виде строк запроса (не функция, которая принимает данные в качестве параметров пути)

module.exports.get = async function (event, context, callback) {

  const data = {
    userId: event.queryStringParameters.userId,
    eventId: event.queryStringParameters.eventId,

  };

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вход в функцию Lambda из интеграции прокси API-шлюза выглядит следующим образом.

{
"resource": "Resource path",
"path": "Path parameter",
"httpMethod": "Incoming request's method name"
"headers": {Incoming request headers}
"queryStringParameters": {query string parameters }
"pathParameters":  {path parameters}
"stageVariables": {Applicable stage variables}
"requestContext": {Request context, including authorizer-returned key-value pairs}
"body": "A JSON string of the request payload."
"isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"}

Эта схема определена в здесь .

Ваше требование - передать параметры пути от одной лямбда-функции (скажем, лямбда-A) к другой лямбда-функции (скажем, лямбда-B). Это означает, что ваша функция Lambda-A должна выступать в качестве шлюза API, который отправляет запрос с указанным выше форматом в Lambda-B.

Следовательно, ваша функция Lambda-A должна создать объект «полезной нагрузки» (см. Пример кода, который вы прикрепили), как показано ниже. А в вашей Lambda-B вы можете получить доступ к параметрам пути, используя «event.pathParameters».

const payload = {
  pathParameters: data.consulteeId
}
0 голосов
/ 15 мая 2018

Вы можете вызвать Lambda как ApiGatewayRequest. ApiGatewayRequest имеет тело и заголовок. Вы можете передать параметры в шапке. Ниже приведен код.

 public ApiGatewayProxyResponse invokeLambda(LambdaService lambda, Object data, Map<String, String> headers) 
{
     ApiGatewayRequest request = new ApiGatewayRequest();
     request.setBody(data);
     request.setHeaders(headers);
     ApiGatewayProxyResponse response = lambda.execute(request);
     return response.getBody();
}
...