担当 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プロジェクトを作成して、実行してみたいと思います。
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内でログ関連のライブラリ(slf4j)を利用しているようなので、依存関係の中に入っています。これが無くても実行はできますが、エラーメッセージが出てしまいます。
これで、AWSSDKがつかえるようになります。
※AWS SDK for Java 2 系はJava8以降が必要となります。
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内の文字列が取得できていることがわかります。
本日は以上とさせていただきます。最後までご覧くださりありがとうございます。本記事は随時、関連する内容を更新していく予定です。少しでも開発ライフのお役に立てれば幸いです。
合同会社イー・シー・エフでは、未経験者向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。