我正在尝试使用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
或我的使用方式都存在问题
答案 0 :(得分:1)
Nodejs执行不等待结果,这就是为什么进程在完成请求之前退出的原因。
使用mysql库https://www.npmjs.com/package/serverless-mysql
或
使用context.callbackWaitsForEmptyEventLoop = false
答案 1 :(得分:0)
问题是必须在VPC中创建RDS,而Lambda不在其中。