버전 관리를 사용하는 버킷의 객체 목록 - Amazon Simple Storage Service

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

이 섹션에서는 버전 관리를 사용하는 버킷의 객체 버전을 나열하는 예제를 제공합니다. Amazon S3에서는 객체 버전 정보를 버킷에 연결된 versions 하위 리소스에 저장합니다. 자세한 내용은 버킷 구성 옵션 단원을 참조하십시오. 버전 관리가 활성화된 버킷의 객체를 나열하려면 ListBucketVersions 권한이 필요합니다.

다음 단계에 따라 Amazon S3 콘솔을 사용하여 객체의 여러 버전을 확인합니다.

객체의 여러 버전 보기
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷(Buckets) 목록에서 객체가 포함된 버킷의 이름을 선택합니다.

  3. 버킷에 있는 객체 버전 목록을 확인하려면 버전 표시 스위치를 선택합니다.

    각 객체 버전에 대해 콘솔에 고유한 버전 ID, 객체 버전이 생성된 날짜/시간 및 기타 속성이 표시됩니다. (버전 관리 상태로 설정하기 전에 버킷에 저장된 객체의 버전 ID는 null이 됩니다.)

    해당 버전이 없는 객체를 나열하려면 버전 나열(List versions) 스위치를 선택합니다.

또한, 콘솔의 객체 개요 패널에서도 객체 버전을 보고, 다운로드하며, 삭제할 수 있습니다. 자세한 내용은 Amazon S3 콘솔에서 객체 개요 보기 단원을 참조하십시오.

참고

300개 버전 이전의 객체 버전에 액세스하려면 AWS CLI 또는 객체의 URL을 사용해야 합니다.

중요

객체는 최신 버전으로 삭제한 경우에만 삭제를 취소할 수 있습니다. 삭제했던 객체의 이전 버전은 삭제를 취소할 수 없습니다. 자세한 내용은 S3 버킷에서 버전 관리 사용 섹션을 참조하세요.

이 섹션의 예제에서는 버전 관리를 사용하는 버킷에서 객체 목록을 가져오는 방법을 보여줍니다. 더 낮은 개수를 지정했더라도 각 요청에서는 최대 1,000개의 버전을 반환합니다. 버킷에 이 제한보다 더 많은 버전이 포함되어 있는 경우 일련의 요청을 보내 모든 버전 목록을 가져옵니다. "페이지"에 표시되는 이러한 결과 반환 프로세스를 페이지 매김이라고 합니다.

페이지 매김 작동 방식을 설명하기 위해 예제에서는 각 응답을 두 가지 객체 버전으로 제한합니다. 결과의 첫 페이지를 가져온 후 각 예제에서는 버전 목록이 잘렸는지 여부를 확인합니다. 잘린 경우 계속해서 모든 버전을 가져올 때까지 페이지를 가져옵니다.

참고

다음 예제 역시 버전 관리를 사용하지 않는 버킷이나 개별 버전이 없는 객체를 사용합니다. 이러한 경우 Amazon S3는 null의 버전 ID를 사용하여 객체 목록을 반환합니다.

다른 AWS SDK 사용에 대한 자세한 내용은 AWS 개발자 센터를 참조하세요.

Java

실제 예제를 작성 및 테스트하는 방법에 대한 자세한 내용은 Amazon S3 Java 코드 예제 테스트 섹션을 참조하세요.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; 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) { Regions clientRegion = Regions.DEFAULT_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(); } } }
.NET

실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Amazon S3 .NET 코드 예제 실행 섹션을 참조하세요.

using Amazon; 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); } } } }
예 - 버킷의 모든 객체 버전 나열

버킷에 있는 전체 객체의 버전을 모두 나열하려면 versions 요청에 GET Bucket 하위 리소스를 사용합니다. Amazon S3에서는 최대 1,000개의 객체를 검색할 수 있으며, 각 객체 버전은 각각 하나의 객체로 온전히 취급됩니다. 따라서 버킷에 두 개의 키(예: photo.gifpicture.jpg)가 포함되어 있고 첫 번째 키에 990개의 버전이, 두 번째 키에 400개의 버전이 있는 경우, 단일 요청으로는 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=
예 - 키의 전체 버전 검색

객체 버전의 하위 집합을 가져오려면 GET Bucket에 요청 파라미터를 사용합니다. 자세한 내용은 GET Bucket 단원을 참조하십시오.

  1. prefix 파라미터를 검색하려는 객체의 키로 설정합니다.

  2. GET Bucket 하위 리소스 및 versions를 사용하여 prefix 요청을 보냅니다.

    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=

기타 요청 파라미터를 사용하여 전체 객체 버전의 하위 집합을 가져올 수 있습니다. 자세한 내용은 Amazon Simple Storage Service API 참조에서 GET Bucket를 참조하십시오.

예 - 응답이 잘린 경우 추가 객체의 목록 검색

GET 요청에서 반환될 수 있는 객체 수가 max-keys 값을 초과한 경우, 응답에는 <isTruncated>true</isTruncated>가 포함되며 요청을 충족하지만 반환되지 않은 첫 번째 키와 첫 번째 버전 ID를 각각 NextKeyMarkerNextVersionIdMarker에 포함시킵니다. 그러한 반환된 값을 후속 요청의 시작 지점으로 사용하여 GET 요청을 충족하는 추가 객체를 가져옵니다.

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

다음은 원래 GET 요청을 충족하는 추가 응답입니다.

  • key-marker의 값을 이전 응답의 NextKeyMarker에서 반환된 키로 설정합니다.

  • version-id-marker의 값을 이전 응답의 NextVersionIdMarker에서 반환된 버전 ID로 설정합니다.

  • GET Bucket versionskey-marker를 사용하여 version-id-marker 요청을 보냅니다.

예 - 지정된 키 및 버전 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=

다음 명령은 버킷에 있는 객체의 모든 버전에 대한 메타데이터를 반환합니다.

aws s3api list-object-versions --bucket DOC-EXAMPLE-BUCKET1

list-object-versions에 대한 자세한 정보는 AWS CLI 명령 참조의 list-object-versions 섹션을 참조하세요.