Düğüm 12'yi kullanan bir lambda işlevim var.
AWS Elasticache'de barındırılan bir Redis veritabanına yeni bir bağlantı eklemem gerekiyor.
Her ikisi de bir özel vpc'dedir ve güvenlik grupları / alt ağları düzgün şekilde yapılandırılmıştır.
Çözünme:
küresel.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),
};
indeks.js (dış işleyici):
const { globals } = require('./config/globals');
global.app = globals;
const lambda_handler = (event, context, callback) => { ... }
exports.handler = lambda_handler;
yardımcılar / redis / dizin.js:
const get = require('./get');
module.exports = (redisClient) => {
return {
get: get(redisClient)
};
};
yardımcılar / redis / get.js:
module.exports = (redisClient) => {
return (key, cb) => {
redisClient.get(key, (err, reply) => {
if (err) {
cb(err);
} else {
cb(null, reply);
}
});
};
};
İşlev çağrısı:
app.REDIS.get(redisKey, (err, reply) => {
console.log(`REDIS GET: ${err} ${reply}`);
});
Sorun: Lambda zaman aşımını Redis zaman aşımından daha büyük bir değere yükseltirken bu hatayı alıyorum:
REDİS İSTEMCİ HATASI: Hata: Redis bağlantısı ... başarısız - ETİMEDOUT'U bağlayın ...
Ek:
Her işlemden sonra bağlantıyı kesmeyi/kapatmayı denedim:
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()
});
}
}
})
Hata:
REDİS GET: AbortError: GET işlenemiyor. Bağlantı zaten kapalı.
Ekstra Notlar:
- Geri aramaları kullanmak zorundayım, bu yüzden yukarıdaki örneklerde geçiyorum
- Kullanıyorum
"redis": "^3.0.2"
- Önbelleğe küçük bir süre içinde yüzlerce kez erişildiğinden yapılandırma sorunu değil, ancak zaman aşımı hataları vermeye başladı.
- Her şey normal olarak yerel olarak çalışır