使用 Google 应用程序脚本将 AWS RDS 连接到 Google 表格时出错

Error on connecting AWS RDS to Google Sheets using Google App Scripts

我正在尝试将 AWS RDS 连接到 Google 表格,但我得到的只是

Failed to establish a database connection. Check connection string, username and password.

我已经尝试了跟踪器中的方法,即"using the IP of the endpoint host address",但仍然出现相同的错误,

我有:

  1. 设置 [RDS 设置 - public 可访问性 - 开启] 并验证端点和访问详细信息适用于所有其他查看器(Navicat、管理员等)

  2. 在'RDS VPC- Security Groups'入站和出站中添加了所有需要白名单的google IP(参考:https://developers.google.com/apps-script/guides/jdbc)。

这是我使用的代码:

var connectionName = 'x.x.x.x:3306'
var user = 'admin';
var userPwd = 'pass';
var db = 'dbname';

var dbUrl = 'jdbc:mysql://' + connectionName + '/' + db;

function readFromTable11() {
  var conn = Jdbc.getConnection(dbUrl, user, userPwd); //error here
  Logger.log(conn);
  var start = new Date();
  var stmt = conn.createStatement();
  stmt.setMaxRows(1000);
  var results = stmt.executeQuery('SELECT * FROM items');
  var numCols = results.getMetaData().getColumnCount();

  while (results.next()) {
    var rowString = '';
    for (var col = 0; col < numCols; col++) {
      rowString += results.getString(col + 1) + '\t';
    }
    Logger.log(rowString);
  }

  results.close();
  stmt.close();

  var end = new Date();
  Logger.log('Time elapsed: %sms', end - start);
}

我已经在网上搜索过了,但仍然无法正常工作。

好吧,事实证明 Google Scripts 只支持 MySql v5.5.x 版本,所以超过它会导致问题成为 "failed database connection." 所以使确保连接成功,只需在 RDS 中进行上述相同设置,但 select MySQL 引擎具有版本 5.5.x 并使用此 - (toolbox.googleapps.com/apps/dig ) 查找您的端点 IP 地址以查找可能的 DNS 问题。 我会更新更多。

您可以使用下面的代码片段,不要忘记使用 useSSL=false

  var server = '111.111.111.111';
  var port = 3306;
  var dbName = 'dbName';
  var username = 'dbName';
  var password = 'password';
  var url = 'jdbc:mysql://'+server+':'+port+'/'+dbName+'?useSSL=false';

从 Jul/2021 开始,我能够使用标准 JDBC 连接将 RDS 和 AppScript 与 MySQL 5.7 连接(接受的答案提到了 v5 的问题。5.x版本及以上)。

唯一的技巧是 add/allow 我的 RDS 入站安全组中此列表 (https://www.gstatic.com/ipranges/goog.txt) 中的所有 IP,如 AppScript JDBC 文档所述:

In order to use this method you must allow-list certain CIDR IP address ranges so that Apps Script's servers can connect to your database. https://developers.google.com/apps-script/guides/jdbc

PS: 由于列表很长,我不得不断开并附加到 2 个安全组。