背景
あるWebアプリケーションでは、AWSサービス(S3、SES、API-Gateway、Lambda等)を利用しています。
開発言語はJavaなのでJava用のAWS-SDK(1.11.560)を使用しています。
問題点
アプリケーションにSDK「全体」をリンクしてしまっていました。
jarファイルの数でいうとなんと171個(version560の場合)
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.560</version>
</dependency>
対策と効果
JavaのAWS-SDKは1.9.0以降は、機能ごとにライブラリを取り込みできるので必要なものだけ利用します。
本アプリケーションでは、API-Gateway
とLambda
は間接的(ファイルアップロードやHttpRequestをトリガ)に起動するので、それらのAPIは不要です。したがって必要なライブラリはS3
とSES
だけです。
個別に指定するには、aws-java-sdk
の次にサービス名を付与すればOKです。(★で囲んで部分。もちろん★は不要)
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk★-s3★</artifactId>
<version>1.11.560</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk★-ses★</artifactId>
<version>1.11.560</version>
</dependency>
個別に取り込むことで、依存ライブラリを大幅に削減できました(jarファイル数でいうと171ファイルから5ファイル)
これで、開発時(サービスの起動時間短縮やコード補完が高速に?)や使用メモリ削減が期待できます。
com.amazonaws.aws-java-sdk-core-1.11.560.jar
com.amazonaws.aws-java-sdk-kms-1.11.560.jar
com.amazonaws.jmespath-java-1.11.560.jar
com.amazonaws.aws-java-sdk-s3-1.11.560.jar
com.amazonaws.aws-java-sdk-ses-1.11.560.jar