AWS RDSDataService查询未运行

时间:2019-05-01 15:01:01

标签: amazon-web-services aws-lambda aws-sdk amazon-rds

我正在尝试使用RDSDataService查询Aurora Serverless数据库。当我尝试查询时,我的lambda会超时(我将其最多设置为5分钟,以确保这不是问题)。我的数据库中有1条记录,当我尝试查询它时,没有任何结果,也不会调用错误或数据流。我已经验证了executeSql是通过从我的参数中删除dbClusterOrInstanceArn来调用的,并且抛出了没有它的异常。

我也已经在查询编辑器中运行了SHOW FULL PROCESSLIST,以查看查询是否仍在运行,而没有运行。我给了lambda AmazonRDSFullAccess和AmazonRDSDataFullAccess策略,也没有任何运气。您可以通过下面的代码看到,我已经尝试过在问题#2376中建议的内容。

这并不重要,但是此lambda由Kinesis事件触发器触发。

const AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
  const RDS = new AWS.RDSDataService({apiVersion: '2018-08-01', region: 'us-east-1'})
  for (record of event.Records) {
    const payload = JSON.parse(new Buffer(record.kinesis.data, 'base64').toString('utf-8'));
    const data = compileItem(payload);
    const params = {
      awsSecretStoreArn: 'arn:aws:secretsmanager:us-east-1:149070771508:secret:xxxxxxxxx,
      dbClusterOrInstanceArn: 'arn:aws:rds:us-east-1:149070771508:cluster:xxxxxxxxx',
      sqlStatements: `select * from MY_DATABASE.MY_TABLE`
      // database: 'MY_DATABASE'
    }
    console.log('calling executeSql');
    RDS.executeSql(params, (error, data) => {
      if (error) {
        console.log('error', error)
        callback(error, null);
      } else {
        console.log('data', data);
        callback(null, { success: true })
      }
    });
  }
}

编辑:我们已经通过aws cli运行了该命令,它返回了结果。

编辑2:我可以使用mysql2包并通过URI连接到它,因此,aws-sdk或我的使用方式都存在问题

2 个答案:

答案 0 :(得分:1)

Nodejs执行不等待结果,这就是为什么进程在完成请求之前退出的原因。

使用mysql库https://www.npmjs.com/package/serverless-mysql

使用context.callbackWaitsForEmptyEventLoop = false

答案 1 :(得分:0)

问题是必须在VPC中创建RDS,而Lambda不在其中。