AWS Lambda: Redis ElastiCache conexiune eroare de timeout

0

Problema

Am o funcție lambda folosind Nodul 12.

Am nevoie pentru a adăuga o nouă conexiune la o baza de date Redis găzduit în AWS ElastiCache.

Ambele sunt într-unul privat VPC și grupuri de securitate/subrețele sunt configurate corespunzător.

Soluție:

globals.js:

const redis = require('redis');
const redisClient = redis.createClient(
  `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/${process.env.REDIS_DB}`,
);
redisClient.on('error', (err) => {
  console.log('REDIS CLIENT ERROR:' + err);
});
module.exports.globals = {
  REDIS: require('../helpers/redis')(redisClient),
};

index.js (în afara handler):

const { globals } = require('./config/globals');
global.app = globals;

const lambda_handler = (event, context, callback) => { ... }
exports.handler = lambda_handler;

helpers/redis/index.js:

const get = require('./get');
module.exports = (redisClient) => {
  return {
    get:  get(redisClient)
  };
};

helpers/redis/get.js:

module.exports = (redisClient) => {
  return (key, cb) => {
    redisClient.get(key, (err, reply) => {
      if (err) {
        cb(err);
      } else {
        cb(null, reply);
      }
    });
  };
};

Apel de funcție:

app.REDIS.get(redisKey, (err, reply) => {
  console.log(`REDIS GET: ${err} ${reply}`);
});

Problema: Atunci când creșterea lambda timeout-ul la o valoare mai mare decât Redis timeout, primesc aceasta eroare:

REDIS CLIENT de EROARE:Eroare: Redis conexiune la ... nu - conectează-te ETIMEDOUT ...

Plus:

Am încercat quiting/închiderea conexiunii după fiecare tranzacție:

module.exports = (redisClient) => {

  return (cb) => {

    redisClient.quit((err, reply) => {
      if (err) {
        cb(err);
      } else {
        cb(null, reply);
      }
    });
  };
};
app.REDIS.get(redisKey, (err, reply) => {
  console.log(`REDIS GET: ${err} ${reply}`);
  if (err) {
    cb(err);
  } else {
    if (reply) {
      app.REDIS.quit(() => {
        cb()
      });
    }
  }
})

Eroare:

REDIS OBȚINE: AbortError: IA nu poate fi procesat. Conexiunea este deja închis.

Note Suplimentare:

  • Trebuie să utilizați callback, acest lucru este de ce trec cele din exemplele de mai sus
  • Eu sunt, folosind "redis": "^3.0.2"
  • Nu e o problema de configurare ca cache-ul a fost accesat de sute de ori într-o perioadă mică de timp, dar apoi a început să dea erori de timeout.
  • Totul funcționează în mod normal la nivel local
1

Cel mai bun răspuns

2

Nu e o problema de configurare ca cache-ul a fost accesat de sute de ori într-o perioadă mică de timp, dar apoi a început să dea erori de timeout.

cred că este de origine de problema, probabil redis dimensiunea bazei de date a lovit limita de dimensiune, și nu poate procesa date noi?

Puteți șterge datele vechi în ea?

De asemenea, este posibil Elastic Cache are limite la noi TCP clienților conexiuni, și dacă epuizate, noi conexiuni sunt refuzat cu mesaj de eroare similar-ați menționat.

Dacă redis client în aws lambda funcție nu poate stabili o conexiune, aws lambda funcție nu - și unul nou este pornit. Noua funcție lambda face o conexiune la redis, redis nu poate procesa, și unul mai lambda funcția este pornit...

Deci, la un moment dat, ne-am lovit de limita pe active redis conexiuni, iar sistemul este în impas.

Cred că puteți opri temporar toate functiile lambda, și scară până Elastic redis Cache de date.

2021-11-23 20:45:33

Individuale ElastiCache pentru Redis noduri sprijin de până la 65.000 de conexiuni client simultane. Orice idee pe unele utile configurare/valori pot verifica pentru alte posibile cauze?
Majed Badawi

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................