死ぬほど今更ですがAWS SDK javaについて自分のほしい情報を早引きしたかったのでまとめ。
v1とv2のgroupid・パッケージの違い
v1,v2はgroupidやパッケージが異なっているがどちらがv2なのかそこまで自明ではないので以下にまとめる。
以下のマッピングになっている。
version | groupid | s3のときの指定例 | 全部一括で依存する時の指定 |
---|---|---|---|
v1 | com.amazonaws | com.amazonaws.aws-java-sdk-s3 | com.amazonaws.aws-java-sdk |
v2 | software.amazon.awssdk | software.amazon.awssdk.s3 | software.amazon.awssdk.aws-sdk-java |
- v1参考 GitHub - aws/aws-sdk-java: The official AWS SDK for Java.
- v2参考 GitHub - aws/aws-sdk-java-v2: The official AWS SDK for Java - Version 2
BOMについて
AWS SDKは内部的には別々のライブラリになっており、S3, kinesisなど必要なサービスに関するライブラリのみに依存出来る。 これらのライブラリはパッケージが一部被っている関係で、バラバラのバージョンに依存するとバイナリ互換に関する問題が発生しうる。
BOM (bills of materials)はこの問題に対処するもので、要は一貫性が取れてるライブラリのバージョン番号一覧のようなもの。 依存にBOMを加えつつ各サービスごとのライブラリのバージョン指定を省略することで、いい感じに互換性のあるバージョンを解決してくれるようになっている。
設定例
Apache Maven プロジェクトの設定 - AWS SDK for Java を参考にすると以下のようになる。
BOM指定
<project> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.X.X</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
依存指定
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>dynamodb</artifactId> <- version指定不要 </dependency>
bomを使いたくないとき
bomを使いたくない場合は手動で互換性のあるバージョンを指定することになります。
とはいえv1の例、v2の例 を見ると基本的に全部一貫して同じバージョンを使っておけば良いのであんまり苦にはならないはず。(一部v1のswfみたいな開発が止まってるやつは古いバージョンになっていたりするっぽい)
心配なときは、以下から最新バージョンを見つけて各サービスの利用すべきバージョンをチェックしてみよう。
V1, V2同時利用について
SDK for Java 1.x と 2.x の並行使用 - AWS SDK for Java によるとv1, v2を一つのアプリケーションで同時に依存しても良さそう。
特に工夫も必要なくサービスごとに別々にv1, v2の依存を追加すればいいっぽい。(パッケージ違うから割と安心してできるはず。)