API Gateway - Cloudfront возвращает 502 случайным образом - PullRequest
0 голосов
/ 29 марта 2020

Я добавил лямбда-функцию в мой API-шлюз. Это запрос get, который возвращает массив данных. Я использую mongodb для своей базы данных

Домен: domain.com/api/list/

Иногда, когда я запрашиваю домен без sla sh, он работает нормально иногда это не работает и возвращает 502. Если я запрашиваю его в обычном браузере, он возвращает 502, но если я запрашиваю тот же URL-адрес в браузере tor, он всегда работает нормально.

Я подозреваю, что это может быть что-то связанные с кэшированием, но почему кэширование приводит к 502?

module.exports.getAll = async (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;
  await database.connect();
  const x = await model.find({});

  callback(null, {
    statusCode: 200,
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(x)
  })
};

Я установил кэширование для этого шлюза API в 0 на облачном фронте. Я увеличил время ожидания до 10 секунд, но CloudWatch сообщает, что задание истекло через 6,01 секунды. 9798-4949-813 c -52259d57375b

x-cache: ошибка из облачного фронта

Я также создал пакет npm, который содержит мои схемы mongodb и создает соединение с mongoclient , Из наблюдений в облачном хранилище я понял, что иногда я получаю сообщения об ошибках при использовании «использования существующего подключения к базе данных».

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const url = ``

let isConnected;
module.exports = connectToDatabase = () => {
  if (isConnected) {
    console.log('=> using existing database connection');
    return Promise.resolve();
  }
  console.log('=> using new database connection');
  return mongoose.connect(url).then(db => {
    isConnected = db.connections[0].readyState;
  });
};

Я получил код connectToDatabase здесь

...