override def load()

in ssm/src/main/scala/com/gu/conf/SSMConfigurationLocation.scala [21:55]


  override def load(credentials: => AwsCredentialsProvider): Config = {
    logger.info(s"Attempting to load configuration from SSM for path = $path and region = $region")
    val ssmClient = SsmClient.builder
      .credentialsProvider(credentials)
      .region(Region.of(region))
      .build()

    @tailrec
    def recursiveParamFetch(parameters: Map[String, String], nextToken: Option[String]): Map[String, String] = {

      val parameterRequest = GetParametersByPathRequest.builder
        .withDecryption(true)
        .path(path)
        .recursive(true)
        .nextToken(nextToken.orNull)
        .build()

      val result = ssmClient.getParametersByPath(parameterRequest)

      val results = result.parameters.asScala.map { p =>
        p.name.replaceFirst(s"$path/", "").replaceAll("/", ".") -> p.value
      }.toMap

      Option(result.nextToken) match {
        case Some(next) => recursiveParamFetch(parameters ++ results, Some(next))
        case None => parameters ++ results
      }
    }

    val parameters = recursiveParamFetch(Map.empty, None)

    ssmClient.close()

    ConfigFactory.parseMap(parameters.asJava, "AWS SSM parameters")
  }