簡體   English   中英

從 Lagom 連接到 AWS Managed Cassandra 服務

[英]Connecting to AWS Managed Cassandra Service from Lagom

我在從 Lagom 環境連接到 AWS Managed Cassandra Service 時遇到問題。 這是我嘗試過的,結果如何。

(1) Amazon 提供了從 Java 代碼連接到 AWS MCS 的說明:

https://docs.aws.amazon.com/fr_fr/mcs/latest/devguide/cqlsh.html#using_java_driver

說明的要點是您需要安裝證書,然后將其傳遞給 JVM,如下所示:

-Djavax.net.ssl.trustStore=path_to_file/cassandra_truststore.jks 
-Djavax.net.ssl.trustStorePassword=amazon

然后,您可以使用您選擇的任何 Cassandra Java 驅動程序。 我選擇的是 Lagom 框架提供的 DataStax 驅動程序。

我通過將以下內容添加到build.sbtbuild.sbt

javaOptions ++= Seq(
  "-Djavax.net.ssl.trustStore=project/cassandra_truststore.jks",
  "-Djavax.net.ssl.trustStorePassword=amazon"
)

// Must enable JVM forking to use javaOptions with runAll.
fork := true

(2) 在將我的 Lagom 應用程序部署到 AWS 之前,我想在開發模式下使用它,但將它連接到 AWS MCS 而不是嵌入式 Cassandra 服務器。 Lagom 提供了在開發模式下執行此操作的說明:

https://www.lagomframework.com/documentation/1.6.x/scala/Cas​​sandraServer.html#Connecting-to-a-locally-running-Cassandra-instance

說明的要點是將以下幾行添加到build.sbt

lagomCassandraEnabled in ThisBuild := false
lagomUnmanagedServices in ThisBuild := Map("cas_native" -> "tcp://localhost:9042")

此示例中的 URI 假定 Cassandra 服務器在localhost:9042上運行。 就我而言,我將其替換為cassandra.us-east-1.amazonaws.com:9142

(3) 盡管如此,當我運行sbt runAll ,我在嘗試訪問 AWS MCS 時出現超時:

Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: cassandra.us-east-1.amazonaws.com/3.83.168.143:9142 (com.datastax.driver.core.exceptions.OperationTimedOutException: [cassandra.us-east-1.amazonaws.com/3.83.168.143:9142] Operation timed out))

(4) 我通過完全繞過 Lagom 並只編寫了一段非常簡單的代碼來隔離問題,如下所示:

  System.setProperty("javax.net.ssl.trustStore", "redacted_absolute_file_path/cassandra_truststore.jks")
  System.setProperty("javax.net.ssl.trustStorePassword", "amazon")

  val cluster = Cluster.builder.addContactPoint("cassandra.us-east-1.amazonaws.com").withPort(9142).build()
  val session = cluster.connect()
  session.close()
  cluster.close()

這很簡單。 但發生同樣的超時。 我究竟做錯了什么?

通過查看 AWS MCS Python 文檔找到了一個解決方案(Java 文檔對此事明顯保持沉默)。 結果我確實需要配置 MCS 服務特定的憑據,然后在 Lagom 的application.conf文件中提供它們,如下所示:

cassandra.default {
  port = 9142

  ssl.truststore {
    path = "path/cassandra_truststore.jks"
    password = "amazon"
  }

  authentication {
    username = "service-specific username"
    password = "service-specific password"
  }
}

cassandra-journal {
  port = ${cassandra.default.port}

  ssl.truststore {
    path = ${cassandra.default.ssl.truststore.path}
    password = ${cassandra.default.ssl.truststore.password}
  }

  authentication {
    username = ${cassandra.default.authentication.username}
    password = ${cassandra.default.authentication.password}
  }
}

cassandra-snapshot-store {
  port = ${cassandra.default.port}

  ssl.truststore {
    path = ${cassandra.default.ssl.truststore.path}
    password = ${cassandra.default.ssl.truststore.password}
  }

  authentication {
    username = ${cassandra.default.authentication.username}
    password = ${cassandra.default.authentication.password}
  }
}

lagom.persistence.read-side.cassandra {
  port = ${cassandra.default.port}

  ssl.truststore {
    path = ${cassandra.default.ssl.truststore.path}
    password = ${cassandra.default.ssl.truststore.password}
  }

  authentication {
    username = ${cassandra.default.authentication.username}
    password = ${cassandra.default.authentication.password}
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM