メニュー
Amazon Simple Storage Service
開発者ガイド (API バージョン 2006-03-01)

バージョニングが有効なバケットでのオブジェクトのリスト

このセクションでは、バージョニングが有効なバケットからオブジェクトバージョンを一覧表示する例を示します。Amazon S3 では、バケットに関連付けられている versions サブリソース (「バケット設定オプション」を参照) にオブジェクトバージョン情報を保存します。

コンソールを使用する

Amazon S3 コンソールでオブジェクトバージョンを一覧表示する方法については、「S3 オブジェクトのバージョンを表示するには」(Amazon Simple Storage Service コンソールユーザーガイド) を参照してください。

AWS SDK の使用

このセクションの例では、バージョニングが有効なバケットのオブジェクトを一覧表示する方法を示します。各リクエストは最大 1,000 個のバージョンを返します (これ未満の数を指定した場合を除きます)。バケット内のバージョン数が、この上限数を超えている場合は、複数のリクエストを送信してすべてのバージョンを一覧表示します。このように「ページ」に分けて結果を返すプロセスは、ページ分割と呼ばれます。ページ分割の仕組みを示すために、例ではレスポンスごとのオブジェクトバージョン数を 2 個に制限しています。各例では、最初のページの結果を取得すると、バージョンリストが切り詰められているかどうかを確認します。切り詰められている場合は、引き続きページの取得を繰り返し、すべてのバージョンを取得します。

注記

以下の例は、バージョニングが有効になっていないバケットや、個別のバージョンを持たないオブジェクトにも使用できます。これらの場合、Amazon S3 で返される各オブジェクトのバージョン ID は null になります。

他の AWS SDK の使用については、サンプルコードとライブラリのページを参照してください。

AWS SDK for Java の使用

有効な例を作成してテストする方法については、「Amazon S3 Java コード例のテスト」を参照してください。

import java.io.IOException; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; 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.S3VersionSummary; import com.amazonaws.services.s3.model.VersionListing; public class ListKeysVersioningEnabledBucket { public static void main(String[] args) throws IOException { String clientRegion = "*** Client region ***"; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Retrieve the list of versions. If the bucket contains more versions // than the specified maximum number of results, Amazon S3 returns // one page of results per request. ListVersionsRequest request = new ListVersionsRequest() .withBucketName(bucketName) .withMaxResults(2); VersionListing versionListing = s3Client.listVersions(request); int numVersions = 0, numPages = 0; while(true) { numPages++; for (S3VersionSummary objectSummary : versionListing.getVersionSummaries()) { System.out.printf("Retrieved object %s, version %s\n", objectSummary.getKey(), objectSummary.getVersionId()); numVersions++; } // Check whether there are more pages of versions to retrieve. If // there are, retrieve them. Otherwise, exit the loop. if(versionListing.isTruncated()) { versionListing = s3Client.listNextBatchOfVersions(versionListing); } else { break; } } System.out.println(numVersions + " object versions retrieved in " + numPages + " pages"); } catch(AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch(SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }

AWS SDK for .NET の使用

作業サンプルを作成およびテストする方法については、「Amazon S3 .NET コード例の実行」を参照してください。

using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class ListObjectsVersioningEnabledBucketTest { static string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main(string[] args) { s3Client = new AmazonS3Client(bucketRegion); GetObjectListWithAllVersionsAsync().Wait(); } static async Task GetObjectListWithAllVersionsAsync() { try { ListVersionsRequest request = new ListVersionsRequest() { BucketName = bucketName, // You can optionally specify key name prefix in the request // if you want list of object versions of a specific object. // For this example we limit response to return list of 2 versions. MaxKeys = 2 }; do { ListVersionsResponse response = await s3Client.ListVersionsAsync(request); // Process response. foreach (S3ObjectVersion entry in response.Versions) { Console.WriteLine("key = {0} size = {1}", entry.Key, entry.Size); } // If response is truncated, set the marker to get the next // set of keys. if (response.IsTruncated) { request.KeyMarker = response.NextKeyMarker; request.VersionIdMarker = response.NextVersionIdMarker; } else { request = null; } } while (request != null); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }

REST API の使用

バケット内の各オブジェクトのすべてのバージョンを一覧表示するには、GET Bucket リクエストで versions サブリソースを使用します。Amazon S3 で取得できるオブジェクトは最大 1,000 個のみです。オブジェクトバージョンごとに完全な 1 個のオブジェクトとしてカウントされます。したがって、バケット内に 2 つのキー (例: photo.gifpicture.jpg) があり、最初のキーに 990 個のバージョン、2 番目のキーに 400 個のバージョンがある場合、1 つのリクエストで取得されるバージョンは、photo.gif の 990 個と、picture.jpg のうち最新の 10 個のみです。

Amazon S3 は、保存時刻の新しい順にオブジェクトバージョンを一覧表示します。

バケット内のすべてのオブジェクトバージョンを一覧表示するには

  • GET Bucket リクエストに、versions サブリソースを含めます。

    GET /?versions HTTP/1.1 Host: bucketName.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 +0000 Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

バケット内のオブジェクトのサブセットの取得

このセクションでは、次のような 2 つの例のシナリオについて説明します。

  • バケット内のすべてのオブジェクトのサブセットを取得する必要があるとします。たとえば、特定のオブジェクトのすべてのバージョンを取得するとします。

  • 応答に含まれるオブジェクトバージョンの数が max-key の値 (デフォルトでは 1,000) を超えているため、残りのオブジェクトバージョンを取得するために 2 つ目のリクエストを送信する必要があります。

オブジェクトバージョンのサブセットを取得するには、GET Bucket のリクエストパラメータを使用します。詳細については、「GET Bucket」を参照してください

例 1: 特定のオブジェクトのみのすべてのバージョンの取得

以下の手順に従って、versions サブリソースおよび prefix リクエストパラメータを使用すると、オブジェクトのすべてのバージョンを取得できます。prefix の詳細については、「GET Bucket」を参照してください。

キーのすべてのバージョンの取得

1 prefix パラメータを、取得するオブジェクトのキーに設定します。
2

versions サブリソースおよび prefix を使用して、GET Bucket リクエストを送信します。

GET /?versions&prefix=objectName HTTP/1.1

例 プレフィックスを使用したオブジェクトの取得

次の例では、キーが myObject であるか、またはそれで始まるオブジェクトを取得します。

GET /?versions&prefix=myObject HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

オブジェクトのすべてのバージョンのサブセットを取得するには、他のリクエストパラメータを使用します。詳細については、「GET Bucket」を参照してください

例 2: レスポンスが切り詰められた後の残ったオブジェクトの一覧表示

GET リクエストで返すことができるオブジェクトの数が max-keys の値を超えた場合、レスポンスには <isTruncated>true</isTruncated> と、リクエストを満たすが返されなかった最初のキー (NextKeyMarker 内) および最初のバージョン ID (NextVersionIdMarker 内) が含まれます。GET リクエストを満たす追加のオブジェクトを取得する後続のリクエストで、これらの戻り値を開始位置として使用します。

バケットの元の GET Bucket versions リクエストを満たす追加のオブジェクトを取得するには、以下の手順に従ってください。key-markerversion-id-markerNextKeyMarker、および NextVersionIdMarker の詳細については、「GET Bucket」を参照してください。

元の GET リクエストを満たす追加のレスポンスの取得

1 key-marker の値を、前のレスポンスの NextKeyMarker で返されたキーに設定します。
2 version-id-marker の値を、前のレスポンスの NextVersionIdMarker で返されたバージョン ID に設定します。
3 key-marker および version-id-marker を使用して GET Bucket versions リクエストを送信します。

例 指定したキーおよびバージョン ID を始点としたオブジェクトの取得

GET /?versions&key-marker=myObject&version-id-marker=298459348571 HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=