Я пытаюсь выполнить get() из моей AWS Lambda (NodeJS) на ElastiCache Redis, используя клиент node_redis. Я считаю, что могу подключиться к Redis, но у меня истекает время ожидания (тайм-аут Lambda 60 секунд), когда я пытаюсь выполнить операцию get().
Я также предоставил доступ администратора AWS lambda, чтобы быть уверенным, что это не проблема с разрешениями. Я нажимаю лямбду, заходя в консоль AWS и нажимая кнопку «Тест».
Вот мой redisClient.js:
const util = require('util');
const redis = require('redis');
console.info('Start to connect to Redis Server');
const client = redis.createClient({
host: process.env.ElastiCacheEndpoint,
port: process.env.ElastiCachePort
});
client.get = util.promisify(client.get);
client.set = util.promisify(client.set);
client.on('ready',function() {
console.log(" subs Redis is ready"); //Can see this output in logs
});
client.on('connect',function(){
console.log('subs connected to redis'); //Can see this output in logs
})
exports.set = async function(key, value) {
console.log("called set!");
return await client.set(key, value);
}
exports.get = async function(key) {
console.log("called get!"); //Can see this output in logs
return await client.get(key);
}
Вот мой index.js, который вызывает redisClient.js:
const redisclient = require("./redisClient");
exports.handler = async (event) => {
const params = event.params
const operation = event.operation;
try {
console.log("Checking RedisCache by calling client get") // Can see this output in logs
const cachedVal = await redisclient.get('mykey');
console.log("Checked RedisCache by calling client get") // This doesn't show up in logs.
console.log(cachedVal);
if (cachedVal) {
return {
statusCode: 200,
body: JSON.stringify(cachedVal)
}
} else {
const setCache = await redisclient.set('myKey','myVal');
console.log(setCache);
console.log("*******")
let response = await makeCERequest(operation, params, event.account);
console.log("CE Request returned");
return response;
}
}
catch (err) {
return {
statusCode: 500,
body: err,
};
}
}
Это вывод (сообщение об ошибке тайм-аута), который я получаю:
{
"errorMessage": "2020-07-05T19:04:28.695Z 9951942c-f54a-4b18-9cc2-119eed65e9f1 Task timed out after 60.06 seconds"
}
Я пытался использовать Bluebird (изменив getAsync()) на это: https://github.com/UtkarshYeolekar/promisify-redis-client/blob/master/redis.js, но все равно ведет себя так же.
Я также изменил порт, чтобы использовать случайное значение (например, 8088), которое я использую для создания клиента (чтобы увидеть поведение события подключения для неудачного подключения) - в этом случае я все еще вижу ответ об ошибке Timed Out, но я не не вижу subs Redis is ready
и subs connected to redis
в моих журналах.
Может ли кто-нибудь указать мне в правильном направлении? Кажется, я не понимаю, почему я могу подключиться к Redis, но время ожидания запроса get() истекло.
connect
иready
). - person Vimanyu   schedule 06.07.2020