J'ai une fonction lambda l'aide d'un Noeud de 12.
J'ai besoin d'ajouter une nouvelle connexion à une Redis base de données hébergée dans AWS ElastiCache.
Les deux sont dans un privé VPC et de la sécurité des groupes/sous-réseaux sont configurés correctement.
Solution:
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 (en dehors de gestionnaire):
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);
}
});
};
};
Appel de la fonction:
app.REDIS.get(redisKey, (err, reply) => {
console.log(`REDIS GET: ${err} ${reply}`);
});
Problème: Lors de l'augmentation de lambda délai d'attente pour une valeur supérieure à Redis délai d'attente, je reçois cette erreur:
REDIS CLIENT d'ERREUR:Erreur: le Redis connexion à échoué ... - se connecter ETIMEDOUT ...
Plus:
J'ai essayé de quitter/fermer la connexion après chaque opération:
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()
});
}
}
})
Erreur:
REDIS OBTENIR: AbortError: OBTENIR ne peut pas être traitée. La connexion est déjà fermé.
Notes Supplémentaires:
- J'ai utiliser des rappels, c'est pourquoi je passe dans les exemples ci-dessus
- Je suis à l'aide d'
"redis": "^3.0.2"
- Ce n'est pas un problème de configuration que le cache a été consulté centaine de fois dans un court laps de temps, mais il a ensuite commencé à donner les erreurs de délai d'attente.
- Tout fonctionne normalement localement