Non-blocking AWS SDK for Scala exposing strongly-typed APIs built on top of http4s, fs2 and cats
libraryDependencies ++= Seq(
"org.aws4s" %% "aws4s" % aws4sVersion,
)
- SQS: (
sendMessage
,receiveMessage
,deleteMessage
) - S3: (
listBuckets
,putObject
,deleteObject
,getObject
) - KMS: (
encrypt
,decrypt
,createKey
,scheduleKeyDeletion
) - DynamoDB (
createTable
,deleteTable
)
Missing a service or a certain functionality for a service? Create a feature request. PRs are also welcome.
import cats.effect.IO
import org.aws4s.Credentials
import org.aws4s.sqs.{DelaySeconds, MessageBody, Queue, Sqs}
import org.http4s.client.blaze.Http1Client // You'll need the `http4s-blaze-client` dependency for that
val credentials = () => Credentials("ACCESS_KEY_HERE", "SECRET_KEY_HERE")
val httpClient = Http1Client[IO]()
val sqs = Sqs(httpClient, credentials)
val queueUrl = "https://sqs.eu-central-1.amazonaws.com/FAKE_QUEUE_URL"
val q = Queue.unsafeFromString(queueUrl)
val action: IO[Unit] =
sqs.sendMessage(q, MessageBody("Yo!"), Some(DelaySeconds(5)))
.attempt
.map {
case Left(err) => System.err.println(err)
case Right(success) => println(success)
}
// Run final action to produce effects
println("Sending a message..")
action.unsafeRunSync()
Unstable API until 1.0.0
, then semantic versioning from there on.
Request signing logic is adapted from the code in this project.