I'm trying to implement AWS Secrets Manager on a scala project, has anyone tried it?
I have added the dependency to the project on build.sbt like this
libraryDependencies ++= Seq(
"com.databricks" %% "spark-avro" % "4.0.0",
"com.amazonaws" % "aws-java-sdk-core" % "1.11.569",
"com.amazonaws" % "aws-java-sdk-s3" % "1.11.569",
"com.amazonaws" % "aws-java-sdk-secretsmanager" % "1.11.569",
"com.typesafe" % "config" % "1.3.4",
"org.apache.spark" %% "spark-core" % "2.3.0" % "provided",
"org.apache.spark" %% "spark-sql" % "2.3.0" % "provided",
"org.apache.spark" %% "spark-hadoop-cloud" % "2.3.2.3.1.0.6-1" % "provided",
"org.apache.hadoop" % "hadoop-common" % "3.1.1.3.0.2.0-50" % "provided",
"com.github.gphat" %% "datadog-scala" % "1.1.3" exclude ("org.json4s", "json4s-jackson") exclude ("org.json4s", "json4s-native"),
"org.scalatest" %% "scalatest" % "3.0.5" % "test",
"org.mockito" % "mockito-core" % "2.27.0" % "test",
"com.github.tomakehurst" % "wiremock-jre8" % "2.23.2" % "test",
"org.glassfish.jersey.core" % "jersey-common" % "2.22.2" % "test",
"org.glassfish.jersey.core" % "jersey-server" % "2.22.2" % "test",
"org.glassfish.jersey.core" % "jersey-client" % "2.22.2" % "test"
)
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) =>
xs map { _.toLowerCase } match {
case "manifest.mf" :: Nil | "index.list" :: Nil | "dependencies" :: Nil =>
MergeStrategy.discard
case ps @ x :: xs if ps.last.endsWith(".sf") || ps.last.endsWith(".dsa") =>
MergeStrategy.discard
case "plexus" :: xs =>
MergeStrategy.discard
case "services" :: xs =>
MergeStrategy.filterDistinctLines
case "spring.com.conekta.schemas" :: Nil | "spring.handlers" :: Nil =>
MergeStrategy.filterDistinctLines
case _ => MergeStrategy.first
}
And my implementation is like this
def getSecrets: Map[String,String] ={
val secretName = "***********************"
val endpoint = "secretsmanager.us-east-1.amazonaws.com"
val config = new AwsClientBuilder.EndpointConfiguration(endpoint, Regions.US_EAST_1.getName)
val clientBuilder = AWSSecretsManagerClientBuilder.standard()
clientBuilder.setEndpointConfiguration(config)
val client = clientBuilder.build()
val getSecretValueRequest = new GetSecretValueRequest().withSecretId(secretName).withVersionStage("AWSCURRENT")
val getSecretValueResult = client.getSecretValue(getSecretValueRequest)
val secret = getSecretValueResult.getSecretString
implicit val formats = DefaultFormats
parse(secret).extract[Map[String, String]]
}
It is working locally, but when i upload my jar to the server i'm working on i get this error:
java.lang.NoSuchMethodError: com.amazonaws.client.AwsSyncClientParams.getAdvancedConfig()Lcom/amazonaws/client/builder/AdvancedConfig;
at com.amazonaws.services.secretsmanager.AWSSecretsManagerClient.<init>(AWSSecretsManagerClient.java:213)
at com.amazonaws.services.secretsmanager.AWSSecretsManagerClient.<init>(AWSSecretsManagerClient.java:197)
at com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder.build(AWSSecretsManagerClientBuilder.java:61)
at com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder.build(AWSSecretsManagerClientBuilder.java:27)
at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)
at com.conekta.helpers.SecretManager.getSecrets(SecretManager.scala:21)
Has anyone succesfuly implemented aws secret manager on a sbt project Any help would be much apreccuated. Thanks.