【问题标题】:AWS Lambda connection to external REDIS instance not workingAWS Lambda 与外部 REDIS 实例的连接不起作用
【发布时间】:2019-04-08 22:03:57
【问题描述】:

我正在编写一个函数来连接到 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
        };

    })
};

我配置了一个 VPC 和一个启用所有端口(用于测试)以进行出站连接的安全组。

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

【问题讨论】:

    标签: node.js amazon-web-services aws-lambda aws-serverless redislabs


    【解决方案1】:

    您尝试从回调而不是从处理程序本身返回结果。我不知道如何使用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
            });
        });
    };
    

    您可能应该添加更多错误处理以防引发异常,以免在这种情况下得到空响应。

    【讨论】:

    • 谢谢,我试过修改,结果还是一样。
    • 尝试添加一些日志消息并在 CloudWatch 中查看结果,看看会发生什么。
    猜你喜欢
    • 2015-03-06
    • 2020-11-18
    • 2016-09-02
    • 2015-12-31
    • 2021-11-16
    • 2015-11-07
    • 2022-01-23
    • 1970-01-01
    • 2019-12-08
    相关资源
    最近更新 更多