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
我有一个与 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