ScalaでもAWS S3互換にファイルをアップロードしたい
はじめに
S3にファイルをアップロードするコードを追加するのに、いきなりAWSを契約するのは勇気が要る*1のでとりあえずS3のコンパチ品でテストしてみることにしました。
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になるのは割とアンニュイな感じです。
*1:契約後1年は無料枠があるっぽいですが