ScalaでもAWS S3互換にファイルをアップロードしたい

はじめに

S3にファイルをアップロードするコードを追加するのに、いきなりAWSを契約するのは勇気が要る*1のでとりあえずS3のコンパチ品でテストしてみることにしました。

github.com

Minio

こちらのMinioさん、単一のファイルをダウンロードして実行するだけで使える割とよさげなオブジェクトストレージサーバです。

minio server C:\Hoge

また、何かと不遇な扱いを受けるWindowsにもきっちりと対応しているナイスガイで、弊社の好感度は割と高めです。

AWS SDK

S3のコンパチ品を使う以上、S3のSDKはもちろん動くよねってことでAWS Java SDK For Amazon S3を投入します。

sbtに

libraryDependencies += "com.amazonaws" % "aws-java-sdk-s3" % "1.11.277"

を追加し、あとはネット上に死ぬほど転がっているJavaのサンプルコードをもとにぽぽーんとコードを書けばあっという間にアップロードが出来ます。かんたんですね

val credentials = new BasicAWSCredentials("access-key", "secret-key")
val clientConfiguration = new ClientConfiguration
clientConfiguration.setSignerOverride("AWSS3V4SignerType")

val s3Client = AmazonS3ClientBuilder
  .standard()
  .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://192.168.0.100:9000", Regions.US_EAST_1.name()))
  .withPathStyleAccessEnabled(true)
  .withClientConfiguration(clientConfiguration)
  .withCredentials(new AWSStaticCredentialsProvider(credentials))
  .build()

val f = new File("""C:\Users\jyuch\gitzip\backup-201802090041.zip""")
s3Client.putObject(new PutObjectRequest("gitbucket", f.getName, f))

おわりに

楽っちゃ楽なのですが、fat jarを生成するとバイナリサイズが+10MBになるのは割とアンニュイな感じです。

github.com

*1:契約後1年は無料枠があるっぽいですが