オプション

AWS SDK for Java 2.x を使用した Amazon S3 のパターンや例を紹介します。S3 バケットの操作、オブジェクトのアップロード/ダウンロード、マルチパートアップロード、事前署名済み URL、S3 Transfer Manager、オブジェクト操作、または S3 固有の設定を行う際に活用してください。

...すべて拡張します
23
更新された時間 2026年8月24日

概要aws-sdk-java-v2-s3

このスキルは、AWS SDK for Java 2.x に基づいて構築された、Amazon S3 の使用パターンを厳選してまとめたリファレンスです。 これは、JavaアプリケーションにおいてS3オブジェクトストレージを適切に扱う上で繰り返し生じる課題、すなわち、バケットの作成と管理、正しいリクエストビルダーを用いたオブジェクトのアップロードとダウンロード、大容量ファイルの処理、一時的なアクセスURLの生成、そしてこれらすべてをSpring Bootアプリケーションに組み込む方法について解決策を提供します。 開発者が散在するドキュメントからSDKのフluentビルダーAPIを独自に組み立てる必要がなく、サーバーサイド暗号化やストレージクラスの選択といった適切なデフォルト設定が施された、すぐに流用できるコードスニペットを提供します。

本資料では、オブジェクトのライフサイクルの核心となる処理(ウェイターを用いた `createBucket`、`RequestBody.fromFile` による `putObject`、パス指定による `getObject`、バッチ処理による `deleteObjects`)、S3Presigner による有効期限付き事前署名済み URL の生成、および大容量ファイル転送を最適化する S3 Transfer Manager について解説しています。 リファレンスファイルでは、リトライポリシーを含むクライアント設定、オブジェクト操作、転送パターン、および同期/非同期クライアント、リアクティブサービステンプレート、メタデータ対応のアップロード、プレフィックス一覧表示、一括削除などを含むマルチ環境でのSpring Boot統合についてさらに詳しく解説しています。クイックリファレンス表では、各操作と対応するSDKメソッド、およびストレージクラスとユースケースを対応付けしています。

本書は、S3をサービスに統合するJavaバックエンド開発者やクラウドエンジニア、特に本番環境向けの設定例を必要とするSpring Bootチームを対象としています。代表的なユースケースとしては、ファイルストレージ機能の構築、SDK v2への移行、事前署名済みURLの共有機能の追加、大容量ファイル転送のチューニングなどが挙げられます。 認証情報は、AWSの標準的な慣行に従い、標準プロバイダーおよび外部化された環境変数を通じて処理されます。

よくある質問

対象となるAWS SDKのバージョンはどれですか?

AWS SDK for Java 2.x です。サンプルでは、Maven 依存関係ブロック内で S3 および s3-transfer-manager アーティファクトをバージョン 2.20.0 に固定しています。

大容量ファイルのアップロードも扱っていますか?

はい。転送を最適化するための S3 Transfer Manager について解説しており、100MB を超えるファイルのマルチパートアップロードについても、ビルダーベースの UploadFileRequest のサンプルを交えて説明しています。

認証情報はどのように扱われますか?

標準の AWS 認証情報プロバイダーを通じて行われます。Spring Boot のリファレンスでは、プロファイル固有のプロパティファイル内の外部環境変数(AWS_ACCESS_KEY / AWS_SECRET_KEY)によって駆動される StaticCredentialsProvider が示されています。これは、シークレットを埋め込むのではなく、従来通りの設定方法です。

Spring Boot で使用できますか?

はい。専用のリファレンスでは、マルチ環境設定、同期/非同期/Transfer Manager/Presignerクライアント用の条件付きBean、およびリアクティブなS3Serviceテンプレートについて解説しています。

プレサイン済みURLの有効期限の上限はどれくらいですか?

クイックリファレンスでは、事前署名済みURLの有効期限は最大7日と記載されていますが、例では署名有効期間を10分に設定しています。

すべてのファイル

5つのファイルreferences/s3-spring-boot-integration.md20.7KB表示references/s3-object-operations.md10.4KB表示references/s3-transfer-patterns.md14.6KB 表示 references/s3-client-setup.md5.3KB 表示 SKILL.md9.3 KB 表示
GitHubで見る

Overview

Provides patterns for S3 operations: bucket management, object upload/download with multipart support, presigned URLs, S3 Transfer Manager, and S3-specific configurations using AWS SDK for Java 2.x.

When to Use

  • Creating, listing, or deleting S3 buckets with proper configuration
  • Uploading or downloading objects from S3 with metadata and encryption
  • Working with multipart uploads for large files (>100MB) with error handling
  • Generating presigned URLs for temporary access to S3 objects
  • Copying or moving objects between S3 buckets with metadata preservation
  • Setting object metadata, storage classes, and access controls
  • Implementing S3 Transfer Manager for optimized file transfers
  • Integrating S3 with Spring Boot applications for cloud storage

Quick Reference

OperationMethodNotes
Create bucketcreateBucket()Wait with waiter().waitUntilBucketExists()
Upload objectputObject()Use RequestBody.fromFile()
Download objectgetObject()Streams to file or memory
Delete objectsdeleteObjects()Batch up to 1000 keys
Presigned URLpresigner.presignGetObject()Max 7 days expiration

Storage Classes

ClassUse Case
STANDARDFrequently accessed data
STANDARD_IAInfrequently accessed data
GLACIERLong-term archive
INTELLIGENT_TIERINGAutomatic cost optimization

Instructions

1. Add Dependencies

<dependency>    <groupId>software.amazon.awssdk</groupId>    <artifactId>s3</artifactId>    <version>2.20.0</version></dependency><dependency>    <groupId>software.amazon.awssdk</groupId>    <artifactId>s3-transfer-manager</artifactId>    <version>2.20.0</version></dependency>

2. Create S3 Client

S3Client s3Client = S3Client.builder()    .region(Region.US_EAST_1)    .build();// With retry logicS3Client s3Client = S3Client.builder()    .region(Region.US_EAST_1)    .overrideConfiguration(b -> b        .retryPolicy(RetryPolicy.builder()            .numRetries(3)            .build()))    .build();

3. Create Bucket

CreateBucketRequest request = CreateBucketRequest.builder()    .bucket(bucketName)    .build();s3Client.createBucket(request);// Wait until readys3Client.waiter().waitUntilBucketExists(    HeadBucketRequest.builder().bucket(bucketName).build());

4. Upload Object

PutObjectRequest request = PutObjectRequest.builder()    .bucket(bucketName)    .key(key)    .contentType("application/pdf")    .serverSideEncryption(ServerSideEncryption.AES256)    .storageClass(StorageClass.STANDARD_IA)    .build();s3Client.putObject(request, RequestBody.fromFile(Paths.get(filePath)));// Validate upload completionHeadObjectResponse headResp = s3Client.headObject(HeadObjectRequest.builder()    .bucket(bucketName)    .key(key)    .build());

5. Download Object

GetObjectRequest request = GetObjectRequest.builder()    .bucket(bucketName)    .key(key)    .build();s3Client.getObject(request, Paths.get(destPath));

6. Generate Presigned URL

try (S3Presigner presigner = S3Presigner.create()) {    GetObjectRequest getRequest = GetObjectRequest.builder()        .bucket(bucketName)        .key(key)        .build();    GetObjectPresignRequest presignRequest = GetObjectPresignRequest.builder()        .signatureDuration(Duration.ofMinutes(10))        .getObjectRequest(getRequest)        .build();    String url = presigner.presignGetObject(presignRequest).url().toString();}

7. Use Transfer Manager (Large Files)

try (S3TransferManager tm = S3TransferManager.create()) {    UploadFileRequest request = UploadFileRequest.builder()        .putObjectRequest(req -> req.bucket(bucketName).key(key))        .source(Paths.get(filePath))        .build();    FileUpload upload = tm.uploadFile(request);    CompletedFileUpload result = upload.completionFuture().join();}

Best Practices

Performance

  • Use S3 Transfer Manager: Automatic multipart uploads for files >100MB
  • Reuse S3 Client: Clients are thread-safe; reuse throughout application
  • Enable async operations: Use S3AsyncClient for I/O-bound operations
  • Configure timeouts: Set appropriate timeouts for large file operations

Security

  • Use temporary credentials: IAM roles or AWS STS for short-lived tokens
  • Enable encryption: Use AES-256 or AWS KMS for sensitive data
  • Use presigned URLs: Avoid exposing credentials with temporary access
  • Validate metadata: Sanitize user-provided metadata

Error Handling

  • Implement retry logic: Exponential backoff for network operations
  • Handle throttling: Proper handling of 429 responses
  • Clean up failures: Abort failed multipart uploads

Cost Optimization

  • Use appropriate storage classes: STANDARD, STANDARD_IA, INTELLIGENT_TIERING
  • Implement lifecycle policies: Automatic transition/expiration
  • Minimize API calls: Use batch operations when possible

Constraints and Warnings

  • Object Size: Single PUT limited to 5GB; use multipart for larger files
  • Bucket Names: Must be globally unique across all AWS accounts
  • Object Immutability: Objects cannot be modified; must be replaced entirely
  • Eventual Consistency: List operations may have slight delays after uploads
  • Presigned URLs: Maximum expiration time is 7 days
  • Multipart Uploads: Parts must be at least 5MB except last part

Examples

Complete Upload Workflow with Validation

// 1. Upload with validationPutObjectRequest putRequest = PutObjectRequest.builder()    .bucket(bucketName)    .key(key)    .contentType(contentType)    .build();s3Client.putObject(putRequest, RequestBody.fromFile(Paths.get(filePath)));// 2. Validate with headObjectHeadObjectResponse headResp = s3Client.headObject(HeadObjectRequest.builder()    .bucket(bucketName)    .key(key)    .build());// 3. Verify metadatalong fileSize = Files.size(Paths.get(filePath));if (headResp.contentLength() != fileSize) {    throw new IllegalStateException("Upload size mismatch");}

Multipart Upload with Abort-on-Failure

// 1. Initiate multipart uploadCreateMultipartUploadRequest createRequest = CreateMultipartUploadRequest.builder()    .bucket(bucketName)    .key(key)    .build();CreateMultipartUploadResponse multipartUpload = s3Client.createMultipartUpload(createRequest);String uploadId = multipartUpload.uploadId();try {    // 2. Upload parts    List<CompletedPart> parts = new ArrayList<>();    int partNumber = 1;    byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));    int chunkSize = 5 * 1024 * 1024; // 5MB minimum    for (int offset = 0; offset < fileBytes.length; offset += chunkSize) {        int length = Math.min(chunkSize, fileBytes.length - offset);        UploadPartRequest uploadPartRequest = UploadPartRequest.builder()            .bucket(bucketName)            .key(key)            .uploadId(uploadId)            .partNumber(partNumber)            .build();        UploadPartResponse partResponse = s3Client.uploadPart(uploadPartRequest,            RequestBody.fromBytes(Arrays.copyOfRange(fileBytes, offset, offset + length)));        parts.add(CompletedPart.builder()            .partNumber(partNumber)            .eTag(partResponse.eTag())            .build());        partNumber++;    }    // 3. Complete multipart upload    CompleteMultipartUploadRequest completeRequest = CompleteMultipartUploadRequest.builder()        .bucket(bucketName)        .key(key)        .uploadId(uploadId)        .multipartUpload(CompletedMultipartUpload.builder().parts(parts).build())        .build();    s3Client.completeMultipartUpload(completeRequest);} catch (Exception e) {    // 4. Abort on failure    AbortMultipartUploadRequest abortRequest = AbortMultipartUploadRequest.builder()        .bucket(bucketName)        .key(key)        .uploadId(uploadId)        .build();    s3Client.abortMultipartUpload(abortRequest);    throw new RuntimeException("Upload failed, cleanup performed", e);}

References

  • references/s3-client-setup.md — Client configuration and basic operations
  • references/s3-object-operations.md — Advanced object operations
  • references/s3-transfer-patterns.md — Transfer Manager and multipart uploads
  • references/s3-spring-boot-integration.md — Spring Boot integration patterns
  • AWS S3 Developer Guide
  • AWS SDK for Java 2.x S3 API

Related Skills

  • aws-sdk-java-v2-core - Core AWS SDK patterns and configuration
  • spring-boot-dependency-injection - Spring dependency injection patterns

すべてのファイル

0件のファイル

aws-sdk-java-v2-s3をインストール

スキルファイルをダウンロードし、.claude/skills/ ディレクトリに解凍してください。

ZIPをダウンロード

リポジトリをクローンし、スキルファイルをプロジェクトにコピーしてください。

git clone https://github.com/giuseppe-trisciuoglio/developer-kit/blob/main/plugins/developer-kit-java/skills/aws-sdk-java-v2-s3/SKILL.md # Copy SKILL.md to your .claude/skills/ directory

コピー コピー
クイックセットアップ: スキルフォルダを .claude/skills/ にコピーしてください。Claude が自動的にスキルを検出して使用します。

関連スキル

Cloudflare Manager
更新された時間 2026年6月29日
pinecone
更新された時間 2026年6月29日
azure-setup-guide
更新された時間 2026年6月29日
sentry-architecture-variants
更新された時間 2026年6月29日
OR