javascript - AWS Lambda 无法连接到 RDS 实例,但我可以在本地连接?

标签 javascript amazon-web-services amazon-rds aws-lambda amazon-kinesis

我正在尝试从 lambda 连接到我的 RDS 实例。我在本地编写了 lambda 并在本地进行了测试,一切都很顺利。我部署到 lambda,突然它不起作用了。下面是我正在运行的代码,如果有帮助,我将通过运动流调用 lambda。

'use strict';

exports.handler = (event, context, handlerCallback) => {
    console.log('Recieved request for kinesis events!');
    console.log(event);
    console.log(context);

    const connectionDetails = {
        host:     RDS_HOST,
        port:     5432,
        database: RDS_DATABASE,
        user:     RDS_USER,
        password: RDS_PASSWORD
    };

    const db = require('pg-promise')({promiseLib: require('bluebird')})(connectionDetails);

    db
            .tx(function () {
                console.log('Beginning query');

                return this.query("SELECT 'foobar'")
                           .then(console.log)
                           .catch(console.log)
                           .finally(console.log);
            })
            .finally(() => handlerCallback());
};

如果有帮助,这里是来自 cloud watch 的日志:

START RequestId: *********-****-****-****-********* Version: $LATEST 
2016-05-31T20:58:25.086Z    *********-****-****-****-*********  Recieved request for kinesis events! 
2016-05-31T20:58:25.087Z    *********-****-****-****-*********  { Records:  [ { kinesis: [Object], eventSource: 'aws:kinesis', eventVersion: '1.0', eventID: 'shardId-000000000000:**********************************', eventName: 'aws:kinesis:record', invokeIdentityArn: 'arn:aws:iam::******************:role/lambda_kinesis_role', awsRegion: 'us-east-1', eventSourceARN: 'arn:aws:kinesis:us-east-1:****************:stream/route-registry' } ] } 
2016-05-31T20:58:25.283Z    *********-****-****-****-*********  { callbackWaitsForEmptyEventLoop: [Getter/Setter], done: [Function], succeed: [Function], fail: [Function], logGroupName: '/aws/lambda/apiGatewayRouteRegistry-development', logStreamName: '2016/05/31/[$LATEST]******************', functionName: 'apiGatewayRouteRegistry-development', memoryLimitInMB: '128', functionVersion: '$LATEST', getRemainingTimeInMillis: [Function], invokeid: '*********-****-****-****-*********', awsRequestId: '*********-****-****-****-*********', invokedFunctionArn: 'arn:aws:lambda:us-east-1:*************:function:apiGatewayRouteRegistry-development' } 
END RequestId: *********-****-****-****-********* 
REPORT RequestId: *********-****-****-****-*********    Duration: 20003.70 ms   Billed Duration: 20000 ms Memory Size: 128 MB   Max Memory Used: 22 MB   
2016-05-31T20:58:45.088Z *********-****-****-****-********* Task timed out after 20.00 seconds

最佳答案

@MarkB @Michael-sqlbot 在评论中是正确的,这是一个安全组问题。

我终于得到了 AWS 支持的回应,指出 RDS 安全组确实是特定 IP 私有(private)的。这没有意义,因为我从未配置过它,而且我可以从我的本地机器和弹性 beanstalk 访问数据库。我将 0.0.0.0/0 添加到安全组,现在 lambda 可以连接了。感谢您的帮助!

关于javascript - AWS Lambda 无法连接到 RDS 实例,但我可以在本地连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37555670/

相关文章:

amazon-web-services - 免费亚马逊 AWS/RDS 实例

javascript - 如何使文本出现在html中的滚动条上

javascript - 修改 d3.js 代码以生成静态 3d 图

java - 如何在javascript中检查dd-Mon-yyyy格式的日期?

amazon-web-services - 如何在Elastic--Beanstalk实例中更新Docker镜像

ios - 为什么我的 AmazonCredentials 对象无效?

postgresql - 根据监控,我们是否需要为使用 60 IOPS 的 RDS 实例预配置 IOPS?

amazon-web-services - Amazon RDS 实例备份窗口持续时间?

javascript - 如何测试Javascript中另一个函数的函数调用次数?

amazon-web-services - 从 AWS 代码构建中制作公共(public) s3 工件