메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

버전 관리를 사용하는 버킷의 객체 목록

이 단원에서는 버전 관리를 사용하는 버킷의 객체 버전을 나열하는 예제를 제공합니다. Amazon S3에서는 객체 버전 정보를 버킷에 연결된 versions 하위 리소스에 저장합니다(버킷 구성 옵션 참조).

콘솔 사용

콘솔에서 객체 버전을 나열하는 방법에 대한 자세한 내용은 S3 객체의 버전을 보려면 어떻게 해야 합니까?(출처: Amazon Simple Storage Service 콘솔 사용 설명서)를 참조하십시오.

AWS SDK 사용

이 단원의 코드 예제에서는 버전 관리를 사용하는 버킷에서 객체 목록을 가져옵니다. 각 요청별로 최대 1,000개의 버전을 반환합니다. 더 많은 버전이 있는 경우 일련의 요청을 보내 전체 버전 목록을 가져와야 합니다. 페이지 매김 작동 방식을 설명하기 위해 코드 예제에서는 응답을 두 가지 객체 버전으로 제한합니다. 버킷에 세 개 이상의 객체 버전이 있는 경우, 응답에서는 IsTruncated 요소를 "true" 값으로 반환하며 NextKeyMarkerNextVersionIdMarker 요소 역시 응답에 포함합니다. 이들 요소의 값을 사용하여 객체 키의 다음 집합을 가져올 수 있습니다. 코드 예제에서는 이러한 값을 후속 요청에 포함하여 객체의 다음 집합을 가져옵니다.

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

Using the 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개의 객체만 가져올 수 있으며, 각 객체 버전은 각각 하나의 객체로 온전히 취급됩니다. 따라서 버킷에 두 개의 키(예: photo.gifpicture.jpg)가 포함되어 있고 첫 번째 키에 990개의 버전이, 두 번째 키에 400개의 버전이 있는 경우, 단일 요청으로는 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=

버킷에서 객체의 하위 집합 가져오기

이 단원에서는 다음 두 가지 예제 시나리오를 다룹니다.

  • 예를 들어 버킷에서 전체 객체 버전의 하위 집합을 가져오려는 경우 특정 객체의 전체 버전을 가져옵니다.

  • 응답의 객체 버전 수가 max-key의 값(기본값은 1,000)을 초과하므로 나머지 객체 버전을 가져오기 위한 두 번째 요청을 제출해야 합니다.

객체 버전의 하위 집합을 가져오려면 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>가 포함되며 요청을 충족하지만 반환되지 않은 첫 번째 키와 첫 번째 버전 ID를 각각 NextKeyMarkerNextVersionIdMarker에 포함시킵니다. 그러한 반환된 값을 후속 요청의 시작 지점으로 사용하여 GET 요청을 충족하는 추가 객체를 가져옵니다.

다음 프로세스를 사용하여 버킷에서 GET Bucket versions 요청을 충족하는 추가 객체를 가져옵니다. key-marker, version-id-marker, NextKeyMarkerNextVersionIdMarker에 대한 자세한 내용은 GET Bucket 단원을 참조하십시오.

원본 GET 요청을 충족하는 추가 응답 가져오기

1 key-marker의 값을 이전 응답의 NextKeyMarker에서 반환된 키로 설정합니다.
2 version-id-marker의 값을 이전 응답의 NextVersionIdMarker에서 반환된 버전 ID로 설정합니다.
3 key-markerversion-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=