我正在尝试使用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
或我如何使用它的问题。
Nodejs执行不等待结果,这就是为什么在完成请求之前进程退出的原因。
使用mysql库https://www.npmjs.com/package/serverless-mysql 要么 使用context.callbackWaitsForEmptyEventLoop = false
问题是RDS必须在VPC中装箱,其中Lambda不在其中