こんにちは。ECF Techブログ
担当 Michiharu.Tです。
AWSとJavaを連携した内容をお届けいたします。
この記事では、AWS SDK for Java 2.Xを使って、Amazon S3を操作するサンプルプログラムをご紹介します。
対象読者
下のような読者を想定して記載しています。
- AWSの基本的な内容について知っている
- Javaの基礎的な知識を持っている
S3でバケットを作成
まずはAWSマネジメントコンソールからS3内にバケットを1つ作成します。
「バケットを作成」の画面(上画面)での各設定は次のとおりです。
※基本デフォルトです。
- 一般的な設定
- バケット名:e3factory-2023
- AWS リージョン:米国東部(バージニア北部)us-east-1
- オブジェクト所有者
- ACL無効(推奨)
- このバケットのブロックパブリックアクセス設定
- 「パブリックアクセスをすべて ブロック」にチェック
- バケットのバージョニング
- バケットのバージョニング:無効にする
- タグ-オプション
- 何もしない
- デフォルトの暗号化
- 暗号化タイプ:Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3)
- バケットキー:有効にする
- 詳細設定
- オブジェクトのロック:無効にする
最後に「バケットを作成」をクリックします。
テキストファイルをアップします。アップロードの部分にドラッグ&ドロップするだけでOKです。
今回は下のようなシンプルなテキストファイルをアップします。文字コードはUTF-8です。
Hello S3 With Java!
内容を確認したら、画面下の「アップロード」をクリックします。
AWSマネジメントコンソールでの操作は以上です。
Javaでプログラミング
次にJavaでのプログラムです。実現させたいことは、
- バケット名の一覧を取得
- バケットに入っているテキストファイルの内容を表示
の2点です。
Eclipseからシンプルなmavenプロジェクトを作成して、実行してみたいと思います。
下の画面は下記設定にしています。「シンプルなプロジェクトの作成」にチェックを入れています。その他はデフォルトです。
プロジェクトの設定を記載。グループidとアーティファクトidを入れておけばとりあえずOKです。
プロジェクトができたら、pom.xmlを開いて依存関係を設定します。全文記載していますが、dependenciesタグの範囲を追加するだけです。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.e3factory</groupId> <artifactId>s3test</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.20.43</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.28</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.28</version> </dependency> </dependencies> </project>
これで、AWSSDKがつかえるようになります。
Javaのプログラムは次のとおりです。src/main/java
内にApp.java
として作成しています。
package s3test; import java.util.List; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.core.ResponseBytes; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.s3.model.Bucket; import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.GetObjectResponse; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; public class App { public static void main(String[] args) { //認証情報を設定・・・(1) AwsCredentials credentials = AwsBasicCredentials.create("Access ID","Secret Access Key"); //S3クライアントを生成・・・(2) S3Client s3 = S3Client.builder() .region(Region.US_EAST_1) .credentialsProvider(StaticCredentialsProvider.create(credentials)) .build(); //バケットリストのリクエスト生成 ListBucketsRequest listBucketsRequest = ListBucketsRequest.builder().build(); //バケットリストのレスポンス取得 ListBucketsResponse listBucketsResponse = s3.listBuckets(listBucketsRequest); //バケットの一覧を取得 List<Bucket> list = listBucketsResponse.buckets(); //バケット名を表示 for(Bucket bucket : list) { System.out.println(bucket.name()); } //オブジェクトの取得・・・(3) GetObjectRequest objRequest = GetObjectRequest .builder() .key("helloS3.txt") .bucket("e3factory-2023") .build(); ResponseBytes<GetObjectResponse> objBytes = s3.getObjectAsBytes(objRequest); //UTF-8文字列として取得・・・(4) String message = objBytes.asUtf8String(); System.out.println(message); } }
()
つきのコメントについての解説します。
- (1)
"Access ID","Secret Access Key"
の部分は、IAMユーザーに付与されているアクセスキーの情報を設定します。アクセスキーの情報である「アクセスID」と「シークレットアクセスキー」の情報が必要です。シークレットアクセスキーは作成時しか参照できないため、わからなくなっている場合は再度アクセスキーの作成が必要です。 - (2)regionメソッドの引数は、s3バケットを設置しているリージョンに該当する定数を指定します。
- (3)keyメソッドの引数にはキー名、bucketメソッドの引数にはバケット名が入ります。
- (4)ResponseBytesインスタンスのasUtf8Stringメソッドを使って、UTF-8の文字列データとして取得しています。
Javaアプリケーションとして実行します。結果は下のとおりです。
e3factory-2023 Hello S3 With Java!
バケット名(1行目)とhelloS3.txt内の文字列が取得できていることがわかります。
本日は以上とさせていただきます。最後までご覧くださりありがとうございます。本記事は随時、関連する内容を更新していく予定です。少しでも開発ライフのお役に立てれば幸いです。
合同会社イー・シー・エフでは、未経験者向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。