Serverless Framework / лямбда-ошибки при внешних вызовах Http - PullRequest
1 голос
/ 16 октября 2019

Я написал простую службу с Serverless Framework, развернутую на AWS Lambda, которая выполняет вызов к внешней службе Http и возвращает результаты.

В настоящее время служба работает нормально локально, но не работает при развертывании в AWS.

Возможно, возникла проблема с разрешением асинхронного вызова при ответе. Если я удалю внешний вызов http, простая функция hello будет работать нормально удаленно.

Вот код для проверки:

https://github.com/kevbaker/serverless-typescript-call-mock-api

Вот фрагмент кода обработчика:

import { APIGatewayEvent, Callback, Context, Handler } from 'aws-lambda';
import axios from 'axios';

export const hello: Handler = async (event: APIGatewayEvent, context: Context, cb: Callback) => {

  // External Http call with Axios
  let URL:string = "https://demo8946897.mockable.io";
  let mockResponse = await axios.get(URL,{});

  // Send response
  const response = {
    statusCode: 200,
    body: {
      message: 'Go Serverless Webpack (Typescript) v1.0! Your function executed successfully!',
      mockResponse: mockResponse.data
    },
  };
  cb(null, response);
}

Есть мысли? Я сделал кучу возни по этому вопросу. Сменить на Fetch-node, просмотренные логи пока не повезло.

1 Ответ

0 голосов
/ 16 октября 2019

С помощью синтаксиса await, доступного сейчас для Node в Lambda, вы можете внести некоторые изменения, которые лучше соответствуют этому стилю. Например, вам больше не нужен обратный вызов, и вы можете напрямую вернуть объект ответа. Это может решить вашу проблему:

export const hello: Handler = async (event: APIGatewayEvent, context: Context) => {

  // External Http call with Axios
  let URL:string = "https://demo8946897.mockable.io";
  let mockResponse = await axios.get(URL,{});

  // Send response
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless Webpack (Typescript) v1.0! Your function executed successfully!',
      mockResponse: mockResponse.data
    }),
  };
}
...