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

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

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

コンソールを使用する

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

AWS SDK の使用

このセクションのコード例では、バージョニングが有効なバケットからオブジェクトのリストを取得します。各リクエストは、最大 1000 個のバージョンを返します。バージョンの数がさらに多い場合は、すべてのバージョンのリストを取得するために、一連のリクエストを送信する必要があります。ページ分割の仕組みを説明するために、コード例では応答を 2 つのオブジェクトバージョンに制限しています。バケットに 2 つを超えるオブジェクトバージョンがある場合は、応答では値が "true" の IsTruncated 要素が返されます。また、NextKeyMarker 要素と NextVersionIdMarker 要素も含まれ、それらの値を使用して、次のオブジェクトキーのセットを取得できます。コード例では、次のオブジェクトのセットを取得するために、以降のリクエストにこれらの値を含めています。

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

Using the AWS SDK for Java

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

Copy
import java.io.IOException; import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.ListVersionsRequest; import com.amazonaws.services.s3.model.S3VersionSummary; import com.amazonaws.services.s3.model.VersionListing; public class ListKeysVersionEnabledBucket { private static String bucketName = "*** bucket name ***"; public static void main(String[] args) throws IOException { AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider()); try { System.out.println("Listing objects"); ListVersionsRequest request = new ListVersionsRequest() .withBucketName(bucketName) .withMaxResults(2); // you can specify .withPrefix to obtain version list for a specific object or objects with // the specified key prefix. VersionListing versionListing; do { versionListing = s3client.listVersions(request); for (S3VersionSummary objectSummary : versionListing.getVersionSummaries()) { System.out.println(" - " + objectSummary.getKey() + " " + "(size = " + objectSummary.getSize() + ")" + "(versionID= " + objectSummary.getVersionId() + ")"); } request.setKeyMarker(versionListing.getNextKeyMarker()); request.setVersionIdMarker(versionListing.getNextVersionIdMarker()); } while (versionListing.isTruncated()); } catch (AmazonServiceException ase) { System.out.println("Caught an AmazonServiceException, " + "which means your request made it " + "to Amazon S3, but was rejected with an error response " + "for some reason."); System.out.println("Error Message: " + ase.getMessage()); System.out.println("HTTP Status Code: " + ase.getStatusCode()); System.out.println("AWS Error Code: " + ase.getErrorCode()); System.out.println("Error Type: " + ase.getErrorType()); System.out.println("Request ID: " + ase.getRequestId()); } catch (AmazonClientException ace) { System.out.println("Caught an AmazonClientException, " + "which means the client encountered " + "an internal error while trying to communicate" + " with S3, " + "such as not being able to access the network."); System.out.println("Error Message: " + ace.getMessage()); } } }

AWS SDK for .NET の使用

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

Copy
using System; using Amazon.S3; using Amazon.S3.Model; namespace s3.amazon.com.docsamples { class ListObjectsVersioningEnabledBucket { static string bucketName = "*** bucket name ***"; public static void Main(string[] args) { using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1)) { Console.WriteLine("Listing objects stored in a bucket"); GetObjectListWithAllVersions(client); } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } static void GetObjectListWithAllVersions(IAmazonS3 client) { 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 = client.ListVersions(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 amazonS3Exception) { if (amazonS3Exception.ErrorCode != null && (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity"))) { Console.WriteLine("Check the provided AWS Credentials."); Console.WriteLine( "To sign up for service, go to http://aws.amazon.com/s3"); } else { Console.WriteLine( "Error occurred. Message:'{0}' when listing objects", amazonS3Exception.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 サブリソースを含めます。

    Copy
    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 であるか、またはそれで始まるオブジェクトを取得します。

Copy
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 を始点としたオブジェクトの取得

Copy
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=