はじめに
Scala から S3 にファイルをアップロードする必要があったので、 AWS のライブラリを比較しました。 *1
結論
aws-java-sdk を使うことにしました。
Java のライブラリじゃん、と思うのですが、正直これ以外選択肢がありませんでした。
aws-java-sdk は Amazon 公式の SDK です。以前は Scala の SDK も提供されていたのですが、提供終了してしまいました。*2 サードパーティー製も試しましたが、公式が一番使い勝手が良かったです。
https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk
比較したライブラリ
- aws-java-sdk
- AWScala
- aws-scala
- aws-scala-sdk
aws-java-sdk
最初に書いたように、最終的にはこれを採用しました。本当は Scala 製のライブラリが良かったのですが、良いものがなかったので、公式の Java 用 SDK を採用しました。
https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk
- メリット
- 公式なので間違いない
- 機能も網羅されており、アップデートもされている。
- デメリット
- Java なので Scala の書き方に合わない
- try-catch などが必要になってしまう。ラップするのが吉。
- Java なので Scala の書き方に合わない
AWScala
どうしても Scala 製のライブラリが使いたい場合にはこれを採用するしかない。
しかし、下記記事に書いたが、単一のバケットの情報を取得する際に、一度バケットリストのAPIを叩いてから、対象のバケットを取得する処理になっている。一つのバケットの情報を取得するために、バケット一覧取得の権限が必要になる。
- メリット
- Scala 製のライブラリを入れたいならほぼこれ一択
- デメリット
- (前述の通り)実装が微妙
- 機能が足りていない
ライブラリの更新頻度も低いことから、機能改善の余地は見られないと判断して、不採用としました。どうしても Scala 製のものが良いなら、多少に悪さには目をつぶって使うのが良いと思います。
aws-scala
アトラシアン製のライブラリ。BitBucket のリポジトリをみると、そこそこの頻度更新されているようだが、微妙なところが多々ある。
- Scala 2.13 に対応していない
- バージョンの記載がおかしい
- README の記載はバージョン 7 になっているが、
- Maven で公開されている最新はバージョン 8
- BitBucket のタグにはバージョン 9 がある
Maven Repository: io.atlassian.aws-scala » aws-scala
BitBucket のリポジトリは下記
https://bitbucket.org/atlassian/aws-scala/src/master/
そもそも Scala 2.13 に対応していないので却下。
ちゃんとメンテしてくれないと、今後負債になる可能性は高いので、たとえ Scala 2.12 以下を使っていたとしても採用はしたくない。
aws-scala-sdk
公式の Scala 用 SDK だが、もうアーカイブされているので使えない。Java 用のを使えということだろうか。
まとめ
ということで、僕の中では aws-java-sdk 一択になりました。
Scala 製がいいなら AWScala 。
せいぜいこの二択でしょう。