AWS RDSDataService查询未运行

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

我正在尝试使用RDSDataService来查询Aurora无服务器数据库。当我试图查询时,我的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或我如何使用它的问题。

amazon-web-services aws-lambda aws-sdk amazon-rds
2个回答
1
投票

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

使用mysql库https://www.npmjs.com/package/serverless-mysql 要么 使用context.callbackWaitsForEmptyEventLoop = false


0
投票

问题是RDS必须在VPC中装箱,其中Lambda不在其中

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