猫でもわかるWebプログラミング

試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。

Scala 用 AWS ライブラリは aws-java-sdk しかない

f:id:yoshiki_utakata:20201225212533p:plain

はじめに

Scala から S3 にファイルをアップロードする必要があったので、 AWS のライブラリを比較しました。 *1

結論

aws-java-sdk を使うことにしました。

Java のライブラリじゃん、と思うのですが、正直これ以外選択肢がありませんでした。

aws-java-sdk は Amazon 公式の SDK です。以前は Scala の SDK も提供されていたのですが、提供終了してしまいました。*2 サードパーティー製も試しましたが、公式が一番使い勝手が良かったです。

aws.amazon.com

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 などが必要になってしまう。ラップするのが吉。

AWScala

github.com

どうしても Scala 製のライブラリが使いたい場合にはこれを採用するしかない。

しかし、下記記事に書いたが、単一のバケットの情報を取得する際に、一度バケットリストのAPIを叩いてから、対象のバケットを取得する処理になっている。一つのバケットの情報を取得するために、バケット一覧取得の権限が必要になる。

www.utakata.work

  • メリット
    • 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

github.com

公式の Scala 用 SDK だが、もうアーカイブされているので使えない。Java 用のを使えということだろうか。

まとめ

ということで、僕の中では aws-java-sdk 一択になりました。

Scala 製がいいなら AWScala 。

せいぜいこの二択でしょう。

参考記事

qiita.com

*1:プログラミング言語から AWS SDK を使う場合、 S3 を使うケースが一番多いかと思います。

*2:詳しくは後述