AWS Lambda连接到外部REDIS实例无法正常工作

问题描述 投票:0回答:1

我正在编写一个函数来连接REDISLABS上的REDIS实例。我附加了一个API网关来调用此代码。奇怪的是,虽然测试它来自API网关测试控制台,但它无法正常工作。不幸的是,我无法在测试控制台上看到任何错误。

我已经将代码移动到本地机器作为普通的NodeJS代码,它没有任何问题。我的代码看起来像这样:

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

我配置了一个VPC,并且安全组的所有端口都启用了(用于测试)出站连接。

有人可以建议我哪里出错吗?

node.js amazon-web-services aws-lambda aws-serverless redislabs
1个回答
0
投票

您试图从回调而不是从处理程序本身返回结果。我不确定如何使用async,但没有它你可以做:

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
        });
    });
};

如果抛出异常,您可能应该添加更多错误处理,因此在这种情况下您不会得到空响应。

© www.soinside.com 2019 - 2024. All rights reserved.