調べていてわからない部分が多かったため、備忘録として残しておきます。
この記事では、JavaとSpring bootを用いて、AWSのS3へファイルを読み書きする方法をまとめます。
コードを張り付けただけではわからない部分も多いと思うので、AWSのSDK導入も一緒に解説します。
なお、以下を前提条件としていますので、この記事を読む前に確認ください。
・認証キー発行済み
・統合開発環境:Eclipse
・Maven
・AWS SDK:v2を利用
AWS SDK for Javaはv1, v2の2種類あります。v2の方が最新なので、この記事ではv2を導入します。v1とv2ではコードの記述がところどころ違う箇所がありますので、注意してください。
v2の場合はimport software.amazon.awssdk.***の形で呼び出します。
AWS 認証キーの設定
AWS S3へ接続するために、認証キーを設定します。
認証キーの設定方法はいろいろありますが、今回はSpring Frameworkを利用しているため、application.propertiesファイルから環境変数へ設定します。
| 
					 1 2 3  | 
						aws.bucketName="S3 bucket name" cloud.aws.credentials.access-key=AKI********** cloud.aws.credentials.secret-key=81Hg***********************5  | 
					
これらの環境変数を呼び出す際は、Lombockの@Valueアノテーションを利用します。以下コード参照。
S3認証用クラス
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40  | 
						import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; @Component @Configuration public class S3ClientConfig{ 	@Value("${aws.bucketName}") 	private String s3BucketName; 	@Value("${cloud.aws.credentials.access-key}") 	public String accessKey; 	@Value("${cloud.aws.credentials.secret-key}") 	public  String secretKey; 	@PostConstruct 	public void init() { 		awsCreds = AwsBasicCredentials.create(accessKey,secretKey); 	} 	private AwsBasicCredentials awsCreds; 	@Bean 	S3Client s3Client() { 		return S3Client.builder() 		        .region(Region.US_EAST_1) 		        .credentialsProvider(StaticCredentialsProvider.create(awsCreds)) 		        .build(); 	} }  | 
					
18-25行目:環境変数に登録した認証キーを変数に格納する。
27-31行目:認証キーからCredentialsを作成。認証キーの形式ではS3の認証ができません。
33-39行目:S3を扱うClientを作成。Clientへダウンロードやアップロードのリクエストし、処理してもらいます。
S3からファイルをダウンロードする
S3からファイルをダウンロード
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45  | 
						import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import software.amazon.awssdk.core.ResponseInputStream; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.GetObjectResponse; @Service public class S3Manager { 	@Value("${aws.bucketName}") 	private String s3BucketName; 	@Resource 	private S3Client s3Client; 	///ファイルダウンロード/// 	public String readFile(String objectKey) { 			//s3objectを取得 			GetObjectRequest getRequest = GetObjectRequest.builder().bucket(s3BucketName).key(objectKey).build(); 			ResponseInputStream<GetObjectResponse> response = s3Client.getObject(getRequest); 			BufferedReader br = new BufferedReader(new InputStreamReader(response)); 			StringBuilder sb = new StringBuilder(); 			int c; 			try { 				while ((c = br.read()) != -1) { 					sb.append((char) c); 				} 				br.close(); 				return sb.toString(); 			} catch (IOException e) { 				e.printStackTrace(); 				return null; 			} 	} }  | 
					
上記コードを実行すると、S3の指定バゲット内に格納されたファイルがString型で返ってきます。
今回は、JsonファイルをString型で取得しています。その後gsonライブラリでJson型へ戻して情報を取り扱う的なことをしています。
コードの内容については記事下の参考URLを確認してください。
コード利用時の要点だけ捕捉します。
S3 ファイルダウンロード時の注意点
objectKeyへ、S3のバケット内に保存したファイル名を指定します。
例として、testonionバケットに保存したsample.txtファイルをダウンロードしたいときは、以下のようになります。
s3BucketName=”testonion”
objectKey=”sample.txt”
※”/(スラッシュ)”いらないことに注意してください。

参考URL
コードはほぼこちらを参考にさせていただきました!