AWS Glue data quality runs give ssl error on JDBC connection to MariaDB RDS

1

Hi, basically what title says. Data connections test and crawlers work fine. I've tried enabling SSL, adding ''?enabledTLSProtocols=TLSv1.2' to connection string. Both did not help. CA on the rds is rds-ca-2019. MariaDB version 10.6.16 option that requires SSL on server-side is disabled. Here is the stack trace. I've seen there questions with exact same problem, but they are unanswered, maybe i will be more lucky.

2024-04-18 13:05:43,671 ERROR [main] glue.ProcessLauncher (Logging.scala:logError(94)): Exception in User Class
java.lang.RuntimeException: Failed to fetch data. Please check the logs in CloudWatch to get more details.
	at d.com.amazonaws.services.glue.ml.dq.runner.AbstractDataQualityTaskRunner.loadData(AbstractDataQualityTaskRunner.scala:115)
	at d.com.amazonaws.services.glue.ml.dq.runner.DataQualityEvaluationRunner.execute(DataQualityEvaluationRunner.scala:74)
	at d.com.amazonaws.services.glue.ml.dq.runner.AbstractDataQualityTaskRunner.run(AbstractDataQualityTaskRunner.scala:47)
	at d.com.amazonaws.services.glue.ml.dq.runner.DataQualityEvaluationRunner$.main(DataQualityEvaluationRunner.scala:287)
	at DataQualityRulesetEvaluationScript$.main(DataQualityRulesetEvaluationScript.scala:5)
	at DataQualityRulesetEvaluationScript.main(DataQualityRulesetEvaluationScript.scala)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.amazonaws.services.glue.SparkProcessLauncherPlugin.invoke(ProcessLauncher.scala:52)
	at com.amazonaws.services.glue.SparkProcessLauncherPlugin.invoke$(ProcessLauncher.scala:52)
	at com.amazonaws.services.glue.ProcessLauncher$$anon$1.invoke(ProcessLauncher.scala:200)
	at com.amazonaws.services.glue.ProcessLauncher.launch(ProcessLauncher.scala:315)
	at com.amazonaws.services.glue.ProcessLauncher$.main(ProcessLauncher.scala:34)
	at com.amazonaws.services.glue.ProcessLauncher.main(ProcessLauncher.scala)
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:833)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:453)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
	at org.apache.spark.sql.jdbc.glue.GlueJDBCUtils$.$anonfun$createConnectionFactory$1(GlueJDBCUtils.scala:38)
	at org.apache.spark.sql.jdbc.glue.GlueJDBCSource$.resolveTable(GlueJDBCSource.scala:43)
	at org.apache.spark.sql.jdbc.glue.GlueJDBCSource$.createRelation(GlueJDBCSource.scala:30)
	at com.amazonaws.services.glue.util.JDBCWrapper.tableDF(JDBCUtils.scala:892)
	at com.amazonaws.services.glue.util.NoCondition$.tableDF(JDBCUtils.scala:88)
	at com.amazonaws.services.glue.util.NoJDBCPartitioner$.tableDF(JDBCUtils.scala:174)
	at com.amazonaws.services.glue.JDBCDataSource.getDynamicFrame(DataSource.scala:1014)
	at com.amazonaws.services.glue.DataSource.getDynamicFrame(DataSource.scala:101)
	at com.amazonaws.services.glue.DataSource.getDynamicFrame$(DataSource.scala:101)
	at com.amazonaws.services.glue.AbstractSparkSQLDataSource.getDynamicFrame(DataSource.scala:725)
	at d.com.amazonaws.services.glue.ml.dq.runner.AbstractDataQualityTaskRunner.$anonfun$loadData$2(AbstractDataQualityTaskRunner.scala:102)
	at scala.util.Try$.apply(Try.scala:209)
	at d.com.amazonaws.services.glue.ml.dq.runner.AbstractDataQualityTaskRunner.loadData(AbstractDataQualityTaskRunner.scala:87)
	... 15 more
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
	at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
	at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:342)
	at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:167)
	at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1350)
	at com.mysql.cj.NativeSession.connect(NativeSession.java:157)
	at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:953)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:823)
	... 31 more
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
	at sun.security.ssl.Alert.createSSLException(Alert.java:131)
	at sun.security.ssl.Alert.createSSLException(Alert.java:117)
	at sun.security.ssl.TransportContext.fatal(TransportContext.java:318)
	at sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293)
	at sun.security.ssl.TransportContext.dispatch(TransportContext.java:185)
	at sun.security.ssl.SSLTransport.decode(SSLTransport.java:152)
	at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1401)
	at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1309)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:440)
	at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:317)
	at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:188)
	at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:97)
	at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:333)
	... 36 more
asked 13 days ago77 views
1 Answer
0

Seems the driver and the server don't share protocol version, are you sure you are meant to use version 1.2?

profile pictureAWS
EXPERT
answered 13 days ago
  • No, but i don't know which version JDBC driver uses, and MariaDB by default enables all versions. v2 seemed a good middle ground

  • Normally you should let the client and the server negotiate a version in common

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions