Agent Skills by ALSEL
Anthropic ClaudeDevOps・インフラ⭐ リポ 0品質スコア 50/100

aws-sdk-java-v2-s3

S3バケットの操作やオブジェクトのアップロード・ダウンロード、マルチパートアップロード、署名付きURL、S3 Transfer Manager、S3固有の設定など、AWS SDK for Java 2.xを使用したAmazon S3のパターンとサンプルを提供します。

description の原文を見る

Provides Amazon S3 patterns and examples using AWS SDK for Java 2.x. Use when working with S3 buckets, uploading/downloading objects, multipart uploads, presigned URLs, S3 Transfer Manager, object operations, or S3-specific configurations.

SKILL.md 本文

AWS SDK for Java 2.x - Amazon S3

概要

AWS SDK for Java 2.x を使用した S3 操作のパターンを提供します。バケット管理、マルチパートアップロード対応のオブジェクトアップロード/ダウンロード、署名付き URL、S3 Transfer Manager、S3 固有の設定に対応しています。

使用場面

  • 適切な設定で S3 バケットを作成、一覧表示、削除する
  • メタデータと暗号化を使用して S3 からオブジェクトをアップロード/ダウンロードする
  • 大容量ファイル(100MB 以上)のマルチパートアップロードをエラーハンドリング付きで実行する
  • S3 オブジェクトへの一時的なアクセスのための署名付き URL を生成する
  • メタデータを保持したまま S3 バケット間でオブジェクトをコピーまたは移動する
  • オブジェクトメタデータ、ストレージクラス、アクセス制御を設定する
  • 最適化されたファイル転送のために S3 Transfer Manager を実装する
  • クラウドストレージ用に S3 を Spring Boot アプリケーションと統合する

クイックリファレンス

操作メソッド注記
バケット作成createBucket()waiter().waitUntilBucketExists() で待機
オブジェクトアップロードputObject()RequestBody.fromFile() を使用
オブジェクトダウンロードgetObject()ファイルまたはメモリにストリーミング
オブジェクト削除deleteObjects()最大 1000 キーまでバッチ処理可能
署名付き URLpresigner.presignGetObject()最大 7 日間の有効期限

ストレージクラス

クラスユースケース
STANDARD頻繁にアクセスされるデータ
STANDARD_IAアクセス頻度の低いデータ
GLACIER長期アーカイブ
INTELLIGENT_TIERING自動コスト最適化

手順

1. 依存関係を追加

<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. S3 クライアントを作成

S3Client s3Client = S3Client.builder()
    .region(Region.US_EAST_1)
    .build();

// リトライロジック付き
S3Client s3Client = S3Client.builder()
    .region(Region.US_EAST_1)
    .overrideConfiguration(b -> b
        .retryPolicy(RetryPolicy.builder()
            .numRetries(3)
            .build()))
    .build();

3. バケットを作成

CreateBucketRequest request = CreateBucketRequest.builder()
    .bucket(bucketName)
    .build();

s3Client.createBucket(request);

// 準備完了まで待機
s3Client.waiter().waitUntilBucketExists(
    HeadBucketRequest.builder().bucket(bucketName).build()
);

4. オブジェクトをアップロード

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)));

// アップロード完了を検証
HeadObjectResponse headResp = s3Client.headObject(HeadObjectRequest.builder()
    .bucket(bucketName)
    .key(key)
    .build());

5. オブジェクトをダウンロード

GetObjectRequest request = GetObjectRequest.builder()
    .bucket(bucketName)
    .key(key)
    .build();

s3Client.getObject(request, Paths.get(destPath));

6. 署名付き 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. Transfer Manager を使用(大容量ファイル)

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();
}

ベストプラクティス

パフォーマンス

  • S3 Transfer Manager を使用: ファイルが 100MB を超える場合は自動マルチパートアップロード
  • S3 クライアントを再利用: クライアントはスレッドセーフなため、アプリケーション全体で再利用
  • 非同期操作を有効化: I/O バウンド操作には S3AsyncClient を使用
  • タイムアウトを設定: 大容量ファイル操作に適切なタイムアウトを設定

セキュリティ

  • 一時的な認証情報を使用: IAM ロールまたは AWS STS で有効期限付きトークンを取得
  • 暗号化を有効化: 機密データには AES-256 または AWS KMS を使用
  • 署名付き URL を使用: 一時的なアクセスで認証情報の公開を回避
  • メタデータを検証: ユーザー提供のメタデータをサニタイズ

エラーハンドリング

  • リトライロジックを実装: ネットワーク操作にはエクスポーネンシャルバックオフを使用
  • スロットリングに対応: 429 レスポンスを適切に処理
  • 失敗時のクリーンアップ: 失敗したマルチパートアップロードを中止

コスト最適化

  • 適切なストレージクラスを使用: STANDARD、STANDARD_IA、INTELLIGENT_TIERING
  • ライフサイクルポリシーを実装: 自動的な遷移と有効期限切れ設定
  • API 呼び出しを最小化: 可能な限りバッチ操作を使用

制約と警告

  • オブジェクトサイズ: 単一 PUT は 5GB に制限。より大きいファイルはマルチパートを使用
  • バケット名: AWS アカウント全体でグローバルに一意である必要がある
  • オブジェクト不変性: オブジェクトは変更できません。完全に置き換える必要がある
  • 最終的一貫性: リスト操作はアップロード後、わずかな遅延が発生する可能性がある
  • 署名付き URL: 最大有効期限は 7 日間
  • マルチパートアップロード: パート(最後のパートを除く)は最小 5MB 必要

検証付きの完全なアップロードワークフロー

// 1. 検証付きでアップロード
PutObjectRequest putRequest = PutObjectRequest.builder()
    .bucket(bucketName)
    .key(key)
    .contentType(contentType)
    .build();

s3Client.putObject(putRequest, RequestBody.fromFile(Paths.get(filePath)));

// 2. headObject で検証
HeadObjectResponse headResp = s3Client.headObject(HeadObjectRequest.builder()
    .bucket(bucketName)
    .key(key)
    .build());

// 3. メタデータを確認
long fileSize = Files.size(Paths.get(filePath));
if (headResp.contentLength() != fileSize) {
    throw new IllegalStateException("Upload size mismatch");
}

失敗時に中止するマルチパートアップロード

// 1. マルチパートアップロードを開始
CreateMultipartUploadRequest createRequest = CreateMultipartUploadRequest.builder()
    .bucket(bucketName)
    .key(key)
    .build();

CreateMultipartUploadResponse multipartUpload = s3Client.createMultipartUpload(createRequest);
String uploadId = multipartUpload.uploadId();

try {
    // 2. パートをアップロード
    List<CompletedPart> parts = new ArrayList<>();
    int partNumber = 1;
    byte[] fileBytes = Files.readAllBytes(Paths.get(filePath));
    int chunkSize = 5 * 1024 * 1024; // 5MB 最小値

    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. マルチパートアップロードを完了
    CompleteMultipartUploadRequest completeRequest = CompleteMultipartUploadRequest.builder()
        .bucket(bucketName)
        .key(key)
        .uploadId(uploadId)
        .multipartUpload(CompletedMultipartUpload.builder().parts(parts).build())
        .build();
    s3Client.completeMultipartUpload(completeRequest);

} catch (Exception e) {
    // 4. 失敗時に中止
    AbortMultipartUploadRequest abortRequest = AbortMultipartUploadRequest.builder()
        .bucket(bucketName)
        .key(key)
        .uploadId(uploadId)
        .build();
    s3Client.abortMultipartUpload(abortRequest);
    throw new RuntimeException("Upload failed, cleanup performed", e);
}

リファレンス

  • references/s3-client-setup.md — クライアント設定と基本操作
  • references/s3-object-operations.md — 高度なオブジェクト操作
  • references/s3-transfer-patterns.md — Transfer Manager とマルチパートアップロード
  • references/s3-spring-boot-integration.md — Spring Boot 統合パターン
  • AWS S3 Developer Guide
  • AWS SDK for Java 2.x S3 API

関連スキル

  • aws-sdk-java-v2-core - Core AWS SDK パターンと設定
  • spring-boot-dependency-injection - Spring 依存性注入パターン

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
giuseppe-trisciuoglio
リポジトリ
giuseppe-trisciuoglio/developer-kit
ライセンス
MIT
最終更新
不明

Source: https://github.com/giuseppe-trisciuoglio/developer-kit / ライセンス: MIT

関連スキル

汎用DevOps・インフラ⭐ リポ 502

superpowers-streamer-cli

SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。

by rohanarun
汎用DevOps・インフラ⭐ リポ 493

catc-client-ops

Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。

by automateyournetwork
汎用DevOps・インフラ⭐ リポ 39,967

ci-cd-and-automation

CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。

by addyosmani
汎用DevOps・インフラ⭐ リポ 39,967

shipping-and-launch

本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。

by addyosmani
OpenAIDevOps・インフラ⭐ リポ 38,974

linear-release-setup

Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。

by novuhq
Anthropic ClaudeDevOps・インフラ⭐ リポ 2,159

tracking-application-response-times

API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。

by jeremylongshore
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: giuseppe-trisciuoglio · giuseppe-trisciuoglio/developer-kit · ライセンス: MIT