AWS RDSDataService 超时,而外部 mysql 包有效

AWS RDSDataService times out whereas external mysql package works

我有一个与 Aurora 数据库通信的 AWS Lambda (Node.js)。两者属于同一个 VPC,通过子网启用 Internet 访问。 RDS 集群还有一个入站规则,允许来自 VPC 的流量,用于 Lambda(应该是同一个 VPC)。令我惊讶的是,我发现 AWS-SDK 中的 RDSDataService 无法连接到数据库,而当我使用 mysql pacakge 时,它可以正常工作。以下是 2 个代码片段。

我非常希望使用 AWS-SDK,因为这将减少部署包的大小,因为我根本不必将其包含在包中。有什么办法可以实现吗?

尝试使用 RDSDataService

失败
const AWS = require("aws-sdk");
const rdsData = new AWS.RDSDataService({
    params: {
        dbClusterOrInstanceArn: 'rds.cluster.arn',
        awsSecretStoreArn: 'rds.cluster.secret.arn',
        database: 'mydb'
    },
    endpoint: 'mydb.endpoint'
});

return new Promise((resolve, reject) => {
    try {
        rdsData.executeSql({
            dbClusterOrInstanceArn: 'rds.cluster.arn',
            awsSecretStoreArn: 'rds.cluster.secret.arn',
            database: 'mydb',
            sqlStatements: "select 1 + 1 as result;"
        }, (err, data) => {
            if (err) {
                reject(err);
            }
            const response = {
                statusCode: 200,
                body: JSON.stringify(data),
            };
            resolve(response);
        });
    } catch (er) {
        reject(er);
    }
});

使用 mysql

的工作实现
const mysql = require('mysql');
const connection = mysql.createConnection({
    host: 'mydb.endpoint',
    user: 'user',
    password: 'password',
    port: 3306,
    database: 'mydb',
    debug: false
});

connection.connect(function (err) {
    if (err) context.fail();
    else {
        connection.query('select 1 + 1 as result', function (error, results, fields) {
            if (error) throw error;
            resolve('The solution is: ' + JSON.stringify(results, undefined, 2));
        });
    }
});
connection.end();

事实证明,数据 API 尚不适用于我所在的地区。此处列出了支持的区域:https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/data-api.html#data-api.regions