对 SQL 服务器 RDS 的一行测试插入有效但完全加载超时

One row test insertion to SQL Server RDS works but full load times out

我有一个执行此操作的 Glue 作业脚本(此处未显示导入和设置)并将该行插入 SQL 服务器 RDS 就好了:

columns = ['test']
vals = [("test")]

df = sqlContext.createDataFrame(vals, columns)
test = DynamicFrame.fromDF(df, glueContext, "test")
datasink = glueContext.write_dynamic_frame.from_catalog(frame = test, 
database = "database-name", table_name = "table-name")
job.commit()

当我 运行 使用相同的连接但测试负载更大(最终大约 100 行)时,我收到此错误:

An error occurred while calling o596.pyWriteDynamicFrame. The TCP/IP connection to the host , port 1433 has failed. Error: "Connection timed out: no further information. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall

问题是我知道没有防火墙或安全组问题,因为插入一行就可以了。我尝试将 loginTimeout 参数添加到 JDBC 连接,如下所示:

jdbc:sqlserver://<host>:<port>;databaseName=dbName;loginTimeout=600;

因为它表明您可以这样做 here。但是当我这样做时 Glue 连接失败,但当我删除 loginTimeout 参数时连接成功。

我还检查了我的 SQL 服务器实例上的远程超时配置,它显示为 600 秒,比我失败的任何作业都长,所以不可能是那样。

如何解决此连接超时错误?这似乎是 Glue 内置的限制。

要使用 Glue 进行 JDBC 连接,您需要按照本文档中的步骤操作:https://docs.aws.amazon.com/glue/latest/dg/setup-vpc-for-glue-access.html

我们已经做到了,但事实证明我们的自我引用 sec 组实际上并不是自我引用。一旦我们改变它就解决了

我还必须将连接创建为 Amazon RDS 连接而不是 JDBC 连接,即使它在后台做同样的事情。

即使做了所有这些,我仍然遇到问题。事实证明,您需要将 sql 连接专门添加到脚本之外的作业。如果您点击 "Edit Job",您会在那里看到 sql 连接列表。如果您尝试连接的连接不在所需连接列表中,您将始终超时