すべてのプロダクト
Search
ドキュメントセンター

Lindorm:Amazon S3 API for Javaを使用したアプリケーションの開発

最終更新日:Mar 24, 2025

このトピックでは、Amazon Simple Storage Service (S3) API for Javaを使用してLindormTableに接続し、使用する方法について説明し、例を示します。

前提条件

  • Java Development Kit (JDK) V1.8以降がインストールされていること。

  • Lindormコンソールのワイドテーブルエンジンタブにある[S3互換アドレス]に対応するエンドポイントを取得していること。詳細については、「エンドポイントの表示」をご参照ください。

  • クライアントのIPアドレスがLindormインスタンスのホワイトリストに追加されていること。詳細については、「ホワイトリストの設定」をご参照ください。

手順

  1. S3 SDK for Javaをインストールします。Eclipseクライアントを開き、プロジェクトを作成し、pom.xmlファイルでJavaのMaven依存関係を設定します。

    • Java SDK V1.xの場合は、設定ファイルに次のMaven依存関係を追加します。

      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-s3</artifactId>
        <version>1.11.655</version>
      </dependency>
    • Java SDK V2.xの場合は、設定ファイルに次のMaven依存関係を追加します。

      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>aws-sdk-java</artifactId>
        <version>2.17.32</version>
      </dependency>
  2. 要件に基づいて、プロジェクトで次のサンプルコードを使用してLindormTableに接続します。

Java SDK V1.xのサンプルコード

  • 接続を作成します。

    String s3Endpoint = "http://ld-bp17j28j2y7pm****-proxy-blob.lindorm.rds.aliyuncs.com:9053"; // S3プロトコルを使用してLindormTableに接続するために必要なエンドポイントを指定します。
    String bucketName = "testbucket";
    
    // 接続を確立します。
    AmazonS3 client = AmazonS3ClientBuilder.standard()
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(s3Endpoint, null))
            .withPathStyleAccessEnabled(true)
            .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("AK", "SK")))
            .build();
    説明

    サンプルコードのAKフィールドとSKフィールドを、LindormTableへの接続に実際に使用するAccessKey IDとAccessKeyシークレットに置き換えます。 AccessKey IDとAccessKeyシークレットは、ハードコーディングするのではなく、環境変数として設定するか、設定ファイルで指定することをお勧めします。

  • バケットに対する操作を実行します。

    // バケットを作成します。
    Bucket bucket = client.createBucket(bucketName);
    
    // バケットが存在するかどうかを確認します。
    HeadBucketResult result = client.headBucket(new HeadBucketRequest(bucketName));
    
    // すべてのバケットを一覧表示します。
    List<Bucket> buckets = client.listBuckets(new ListBucketsRequest());
    説明

    新しいユーザーを作成し、そのユーザーにバケットを管理する権限を付与する方法については、「ユーザーの管理」および「S3プロトコル互換における権限の管理」をご参照ください。

  • オブジェクトに対する操作を実行します。

    String content = "content";
    // オブジェクトをアップロードします。
    client.putObject(bucketName, key_name, content);
    
    // オブジェクトからデータを読み取ります。
    S3Object object = client.getObject(bucketName, keyName);
    
    // バケット内のすべてのオブジェクトを一覧表示します。
    // list v1
    ObjectListing objects = client.listObjects(bucketName);
    // list v2
    ListObjectsV2Result results = client.listObjectsV2(bucketName);
    
    // オブジェクトを削除します。
    client.deleteObject(bucketName, keyName);
    
    // 複数のオブジェクトを一度に削除します。
    client.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keyName));
  • マルチパートアップロードタスクを実行します。

    // アップロードするファイルを構成します。
    File file = new File(filePath);
    long contentLength = file.length();
    long partSize = 5 * 1024 * 1024; // 各パートのサイズを 5 MBに設定します。
    
    List<PartETag> partETags = new ArrayList<PartETag>();
    
    // マルチパートアップロードタスクを初期化します。
    InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, keyName);
    InitiateMultipartUploadResult initResponse = client.initiateMultipartUpload(initRequest);
    
    // パートをアップロードします。
    long filePosition = 0;
    for (int i = 1; filePosition < contentLength; i++) {
        partSize = Math.min(partSize, (contentLength - filePosition));
    
        // マルチパートアップロードリクエストを送信します。
        UploadPartRequest uploadRequest = new UploadPartRequest()
            .withBucketName(bucketName)
            .withKey(keyName)
            .withUploadId(initResponse.getUploadId())
            .withPartNumber(i)
            .withFileOffset(filePosition)
            .withFile(file)
            .withPartSize(partSize);
    
        UploadPartResult uploadResult = client.uploadPart(uploadRequest);
        partETags.add(uploadResult.getPartETag());
    
        filePosition += partSize;
    }
    
    // マルチパートアップロードタスクを完了します。タスクが完了すると、オブジェクトが表示されます。
    CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, keyName,
                                                                                    initResponse.getUploadId(), partETags);
    client.completeMultipartUpload(compRequest);

Java SDK V2.xのサンプルコード

  • 接続を作成します。

    String s3Endpoint = "http://ld-bp17j28j2y7pm****-proxy-blob.lindorm.rds.aliyuncs.com:9053"; // S3プロトコルを使用してLindormTableに接続するために必要なエンドポイントを指定します。
    String bucketName = "testbucket";
    
    // 接続を作成します。
    AwsBasicCredentials creds = AwsBasicCredentials.create("AK", "SK");
    
    S3Client client = S3Client.builder()
        .serviceConfiguration(b -> b.checksumValidationEnabled(false))
        .region(Region.AP_EAST_1)
        .credentialsProvider(StaticCredentialsProvider.create(creds))
        .endpointOverride(new URI(s3Endpoint))
        .build();
    
    // 接続を閉じます。
    client.close();
    説明

    サンプルコードのAKフィールドとSKフィールドを、LindormTableへの接続に実際に使用するAccessKey IDとAccessKeyシークレットに置き換えます。 AccessKey IDとAccessKeyシークレットは、ハードコーディングするのではなく、環境変数として設定するか、設定ファイルで指定することをお勧めします。

  • バケットに対する操作を実行します。

    // バケットを作成します。
    S3Waiter s3Waiter = client.waiter();
    CreateBucketRequest bucketRequest = CreateBucketRequest.builder()
        .bucket(bucketName)
        .build();
    
    // バケットが存在するかどうかを確認します。
    client.createBucket(bucketRequest);
    HeadBucketRequest bucketRequestWait = HeadBucketRequest.builder()
        .bucket(bucketName)
        .build();
    
    WaiterResponse<HeadBucketResponse> waiterResponse = s3Waiter.waitUntilBucketExists(bucketRequestWait);
    waiterResponse.matched().response().ifPresent(System.out::println);
    説明

    新しいユーザーを作成し、そのユーザーにバケットを管理する権限を付与する方法については、「ユーザーの管理」および「S3プロトコル互換における権限の管理」をご参照ください。

  • オブジェクトに対する操作を実行します。

    // オブジェクトにデータを書き込みます。
    PutObjectRequest putOb = PutObjectRequest.builder()
            .bucket(bucketName)
            .key(keyName)
            .build();
    
    PutObjectResponse response = client.putObject(putOb,
            RequestBody.fromString("content"));
    
    // オブジェクトからデータを読み取ります。
    GetObjectRequest objectRequest = GetObjectRequest
            .builder()
            .key(keyName)
            .bucket(bucketName)
            .build();
    
    ResponseBytes<GetObjectResponse> objectBytes = client.getObjectAsBytes(objectRequest);
        byte[] data = objectBytes.asByteArray();
    
    // オブジェクトを一覧表示します。
    ListObjectsRequest listObjects = ListObjectsRequest
                        .builder()
                        .bucket(bucketName)
                        .build();
    
    ListObjectsResponse res = client.listObjects(listObjects);
    List<S3Object> objects = res.contents();
  • マルチパートアップロードタスクを実行します。

    // マルチパートアップロードタスクを初期化します。
    CreateMultipartUploadRequest createMultipartUploadRequest = CreateMultipartUploadRequest.builder()
        .bucket(bucketName)
        .key(keyName)
        .build();
    
    CreateMultipartUploadResponse response = client.createMultipartUpload(createMultipartUploadRequest);
    String uploadId = response.uploadId();
    System.out.println(uploadId);
    
    // オブジェクトのパート 1 をアップロードします。
    UploadPartRequest uploadPartRequest1 = UploadPartRequest.builder().bucket(bucketName).key(keyName)
        .uploadId(uploadId)
        .partNumber(1).build();
    String etag1 = client.uploadPart(uploadPartRequest1, RequestBody.fromString("content1")).eTag();
    CompletedPart part1 = CompletedPart.builder().partNumber(1).eTag(etag1).build();
    
    // オブジェクトのパート 2 をアップロードします。
    UploadPartRequest uploadPartRequest2 = UploadPartRequest.builder().bucket(bucketName).key(keyName)
        .uploadId(uploadId)
        .partNumber(2).build();
    String etag2 = client.uploadPart(uploadPartRequest2, RequestBody.fromString("content2")).eTag();
    CompletedPart part2 = CompletedPart.builder().partNumber(2).eTag(etag2).build();
    
    // マルチパートアップロードタスクを完了します。タスクが完了すると、オブジェクトが表示されます。
    CompletedMultipartUpload completedMultipartUpload = CompletedMultipartUpload.builder()
        .parts(part1, part2)
        .build();
    
    CompleteMultipartUploadRequest completeMultipartUploadRequest =
        CompleteMultipartUploadRequest.builder()
        .bucket(bucketName)
        .key(keyName)
        .uploadId(uploadId)
        .multipartUpload(completedMultipartUpload)
        .build();
    
    client.completeMultipartUpload(completeMultipartUploadRequest);