ScalaでAWSといえば瀬良さんのAWScalaですが、なんとAtlassianが同様のAWS SDKラッパーを出してきました。しかもScalazベース。これは注目せざるを得ない!
https://bitbucket.org/atlassian/aws-scala/overview
というわけで早速簡単なコードを書いてみました。S3にファイルをアップロード、ダウンロードするだけのプログラムです。
import java.io.{File, FileInputStream} import com.amazonaws.services.s3.AmazonS3Client import io.atlassian.aws.s3._ val bucket = Bucket("mybucket") val key = S3Key("build.sbt") val location = ContentLocation(bucket, key) val file = new File("test.txt") val action = for { _ <- S3.putStream(location, new FileInputStream(file), Some(file.length)) result <- S3.get(location) } yield result val s3client = new AmazonS3Client() action.run(s3client).map { obj => val bytes = new Array[Byte](obj.getObjectMetadata.getContentLength.toInt) obj.getObjectContent.read(bytes) println(new String(bytes, "UTF-8")) }
まあ、なんというか、Scalazを使っているだけあってモナモナしています。Scalaも昔はProceduralなライブラリが多かったですが、最近はこの手のライブラリが増えてきました。aws-scalaはサイズもそこそこコンパクトですし、実用的なライブラリでのScalazの使い方という面では参考になる部分も多いのではないかと思います。
また、S3以外にもDynamoDB、CloudFormation、SQSがサポートされており(リポジトリを見るとRDSもサポートされている?)、DynamoDBやSQSにはORMも提供されているとのことなので、これらについても機会があれば試してみたいと思います。