def uploadToS3Bucket()

in src/main/scala/com/gu/flexible/snapshotter/logic/S3Logic.scala [23:48]


  def uploadToS3Bucket(key: String, content: JsValue)
    (implicit s3Client: AmazonS3, config: SnapshotterConfig): Attempt[PutObjectResult] = {
    val jsonBytes = Json.prettyPrint(content).getBytes(StandardCharsets.UTF_8)

    val objectMetadata = new ObjectMetadata()
    objectMetadata.setContentLength(jsonBytes.length)
    objectMetadata.setContentType("application/json; charset=utf-8")

    val keyManagementParams =
      config.kmsKey.map(new SSEAwsKeyManagementParams(_)).getOrElse(new SSEAwsKeyManagementParams())

    val putObjectRequest = new PutObjectRequest(
      config.bucket,
      key,
      new ByteArrayInputStream(jsonBytes),
      objectMetadata
    ).withSSEAwsKeyManagementParams(keyManagementParams)

    try {
      log.info(s"Saving content to bucket ${config.bucket} with key $key")
      Attempt.Right(s3Client.putObject(putObjectRequest))
    } catch {
      case (e @ (_: AmazonClientException | _ : AmazonServiceException)) =>
        Attempt.Left(AttemptError(s"Failed to upload to bucket ${config.bucket} with key $key", throwable = Some(e)))
    }
  }