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)))
}
}