添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
担当 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内の文字列が取得できていることがわかります。

    本日は以上とさせていただきます。最後までご覧くださりありがとうございます。本記事は随時、関連する内容を更新していく予定です。少しでも開発ライフのお役に立てれば幸いです。

    合同会社イー・シー・エフでは、未経験者向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。