AWS SDK for Java
開発者ガイド

Amazon S3 バケットの作成、一覧表示、削除

Amazon S3 の各オブジェクト (ファイル) は、オブジェクトのコレクション (コンテナ) を表すバケット内に存在している必要があります。各バケットはキー (名前) で識別され、それは一意である必要があります。バケットおよびその設定に関する詳細については、『Amazon S3 Developer Guide』の「Amazon S3 バケットの使用」を参照してください。

注記

ベストプラクティス

Amazon S3 バケットで AbortIncompleteMultipartUpload ライフサイクルルールを有効にすることをお勧めします。

このルールは、開始後、指定された日数内に完了しないマルチパートアップロードを中止するよう Amazon S3 に指示できます。設定した時間制限を超えると、Amazon S3 はアップロードを中止して、不完全なアップロードデータを削除します。

詳細については、Amazon S3 User Guide の「バージョニングが有効なバケットのライフサイクル設定」を参照してください。

注記

これらのコード例では、ユーザーが「AWS SDK for Java の使用」の内容を理解し、「開発用の AWS 認証情報とリージョンのセットアップ」の情報を使用してデフォルトの AWS 認証情報を設定していることを前提としています。

バケットの作成

AmazonS3 クライアントの createBucket メソッドを使用します。新しいバケットが返されます。createBucket メソッドでは、バケットが既に存在する場合、例外が発生します。

注記

同じ名前のバケットを作成する前にバケットが既に存在するかどうかを確認するには、doesBucketExist メソッドを呼び出してください。バケットが存在する場合は true を返し、それ以外の場合は false を返します。

インポート

import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.AmazonS3Exception; import com.amazonaws.services.s3.model.Bucket; import java.util.List;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); Bucket b = null; if (s3.doesBucketExist(bucket_name)) { System.out.format("Bucket %s already exists.\n", bucket_name); b = getBucket(bucket_name); } else { try { b = s3.createBucket(bucket_name); } catch (AmazonS3Exception e) { System.err.println(e.getErrorMessage()); } } return b;

GitHub で完全な例をご覧ください。

バケットの一覧表示

AmazonS3 クライアントの listBucket メソッドを使用します。成功すると、バケットのリストが返されます。

インポート

import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.Bucket; import java.util.List;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); List<Bucket> buckets = s3.listBuckets(); System.out.println("Your Amazon S3 buckets are:"); for (Bucket b : buckets) { System.out.println("* " + b.getName()); }

GitHub で完全な例をご覧ください。

バケットの削除

Amazon S3 バケットを削除する前に、バケットが空であることを必ず確認してください。空になっていないとエラーが発生します。バージョニングされたバケットがある場合は、このバケットに関連付けられているすべてのバージョニングされたオブジェクトも削除する必要があります。

注記

完全な例には、これらの各ステップが順に含まれており、Amazon S3 バケットとそのコンテンツを削除するための完全なソリューションを提供しています。

バケットを削除する前にバージョニングされていないバケットからオブジェクトを削除する

AmazonS3 クライアントの listObjects メソッドを使用してオブジェクトのリストおよび deleteObject を取得し、それぞれを削除します。

インポート

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; import java.util.Iterator;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { System.out.println(" - removing objects from bucket"); ObjectListing object_listing = s3.listObjects(bucket_name); while (true) { for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext();) { S3ObjectSummary summary = (S3ObjectSummary)iterator.next(); s3.deleteObject(bucket_name, summary.getKey()); } // more object_listing to retrieve? if (object_listing.isTruncated()) { object_listing = s3.listNextBatchOfObjects(object_listing); } else { break; } }; } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。

バケットを削除する前にバージョニングされているバケットからオブジェクトを削除する

バージョニングされたバケットを使用している場合は、バケットを削除する前に、バケットに保存されているすべてのバージョンのオブジェクトも削除する必要があります。

バケット内のオブジェクトを削除する際に使用したのと同じような方法で、バージョニングされたオブジェクトを削除します。まず、AmazonS3 クライアントの listVersions メソッドを使用してすべてのバージョニングされたオブジェクトを一覧表示し、次に deleteVersion を使用して各オブジェクトを削除します。

インポート

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListVersionsRequest; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; import com.amazonaws.services.s3.model.S3VersionSummary; import com.amazonaws.services.s3.model.VersionListing; import java.util.Iterator;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { System.out.println(" - removing objects from bucket"); ObjectListing object_listing = s3.listObjects(bucket_name); while (true) { for (Iterator<?> iterator = object_listing.getObjectSummaries().iterator(); iterator.hasNext();) { S3ObjectSummary summary = (S3ObjectSummary)iterator.next(); s3.deleteObject(bucket_name, summary.getKey()); } // more object_listing to retrieve? if (object_listing.isTruncated()) { object_listing = s3.listNextBatchOfObjects(object_listing); } else { break; } }; System.out.println(" - removing versions from bucket"); VersionListing version_listing = s3.listVersions( new ListVersionsRequest().withBucketName(bucket_name)); while (true) { for (Iterator<?> iterator = version_listing.getVersionSummaries().iterator(); iterator.hasNext();) { S3VersionSummary vs = (S3VersionSummary)iterator.next(); s3.deleteVersion( bucket_name, vs.getKey(), vs.getVersionId()); } if (version_listing.isTruncated()) { version_listing = s3.listNextBatchOfVersions( version_listing); } else { break; } } } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。

空のバケットを削除する

バケットからオブジェクト (すべてのバージョニングされたオブジェクトを含む) を削除したら、AmazonS3 クライアントの deleteBucket メソッドを使用してバケット自体を削除できます。

インポート

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder;

コード

final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient(); try { s3.deleteBucket(bucket_name); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }

GitHub で完全な例をご覧ください。