Prasanth Pillai
Prasanth Pillai

Reputation: 166

AWS Lambda connection to external REDIS instance not working

I'm writing a function to connect to a REDIS instance on REDISLABS. I have attached an API gateway to invoke this code. Strangely, while testing it is from API gateway test console, it is not working. Unfortunately, I cant see any error on test console.

I have moved the code to local machine as a normal NodeJS code and it works without any problem. My code looks like this:

exports.handler = async (event) => {
    var client = require('redis').createClient({
        host: 'redis-XXXXXXXX.c10.us-east-1-2.ec2.cloud.redislabs.com',
        password: 'XXXXXXXXXXXXX',
        port: '14021'
        });

    client.on('connect', () => {
        return {
            status: 200,
            message: 'connected'
        }
    });

    client.on('error', (error)=> {

        return {
            status: 404,
            message: 'Something went wrong:'+ error
        };

    })
};

Response from TEST Console

I have a VPC configured and a security group with all ports enabled(for testing) for outbound connection.

Can someone suggest where I'm going wrong?

Upvotes: 2

Views: 1429

Answers (1)

kichik
kichik

Reputation: 34704

You're trying to return the result from your callbacks instead of from the handler itself. I'm not sure how to do it with async, but without it you can do:

exports.handler = (event, context, callback) => {
    var client = require('redis').createClient({
        host: 'redis-XXXXXXXX.c10.us-east-1-2.ec2.cloud.redislabs.com',
        password: 'XXXXXXXXXXXXX',
        port: '14021'
    });

    client.on('connect', () => {
        callback(null, {
            status: 200,
            message: 'connected'
        });
    });

    client.on('error', (error)=> {
        callback(null, {
            status: 404,
            message: 'Something went wrong:'+ error
        });
    });
};

You should probably add more error handling in case an exception is thrown so you don't get an empty response in that case.

Upvotes: 1

Related Questions