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
gefragt vor einem Monat97 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor einem Monat
  • 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

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen