Mostrar objetos en un bucket con control de versiones habilitado - Amazon Simple Storage Service

Mostrar objetos en un bucket con control de versiones habilitado

En esta sección se presenta un ejemplo de cómo listar versiones de un objeto en un bucket con control de versiones habilitado. Amazon S3 almacena la información de versión de un objeto en el subrecurso de versiones asociado con el bucket. Para obtener más información, consulte Opciones de configuración de buckets. Para enumerar los objetos de un bucket con control de versiones activado, necesita el permiso ListBucketVersions.

Siga estos pasos para utilizar la consola de Amazon S3 a fin de ver las diferentes versiones de un objeto.

Para ver múltiples versiones de un objeto
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En la lista Buckets (Buckets), elija el nombre del bucket que contiene el objeto.

  3. Para ver una lista de las versiones de los objetos en el bucket, elija el modificador Show versions (Mostrar versiones).

    Para cada versión de objeto, la consola muestra un ID de versión único, la fecha y la hora en que se creó la versión del objeto, y otras propiedades. (Los objetos almacenados en un bucket antes de establecer el estado del control de versiones tienen el ID de versión null (nulo)).

    Para listar los objetos sin las versiones, elija el modificador List versions (Enumerar versiones) .

También puede ver, descargar y eliminar las versiones de los objetos en el panel de información general de objetos de la consola. Para obtener más información, consulte Visualización de información general sobre objetos en la consola de Amazon S3.

nota

Para acceder a versiones de objetos anteriores a 300 versiones, debe usar la AWS CLI o la URL del objeto.

importante

Solo puede anular la eliminación de un objeto si se ha eliminado en su última versión (la más reciente). No puede anular la eliminación de una versión anterior de un objeto que se haya eliminado. Para obtener más información, consulte Usar el control de versiones en buckets de S3.

Los ejemplos en esta sección muestran cómo recuperar un listado de objetos de un bucket con control de versiones habilitado. Cada solicitud devuelve hasta 1000 versiones, a menos que especifique un número más bajo. Si el bucket tiene más versiones que ese límite, tendrá que enviar varias solicitudes para recuperar la lista de todas las versiones. Este proceso de devolución de resultados en "páginas" se llama paginación.

Para mostrar cómo funciona la paginación, los ejemplos limitan cada respuesta a dos versiones de objetos. Después de recuperar la primera página de resultados, cada ejemplo realiza una comprobación para determinar si se truncó la lista de la versión. Si fue así, el ejemplo continúa recuperando páginas hasta que se hayan recuperado todas las versiones.

nota

El siguiente ejemplo también funciona con un bucket que no tiene habilitado el control de versiones u objetos que no tienen versiones individuales. En esos casos, Amazon S3 devuelve un listado de objetos con un ID de versión null.

Para obtener información acerca del uso de otros SDK de AWS, consulte el Centro de desarrolladores de AWS.

Java

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de los ejemplos de código de Java de Amazon S3.

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

Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3.

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); } } } }
ejemplo — Listar todas las versiones de objetos en un bucket

Para enumerar todas las versiones de todos los objetos de un bucket, use el subrecurso versions en una solicitud GET Bucket. Amazon S3 solo puede recuperar un máximo de 1000 objetos, y cada versión del objeto cuenta como un objeto. Por tanto, si un bucket contiene dos claves (por ejemplo, photo.gif y picture.jpg), la primera clave tiene 990 versiones y la segunda tiene 400 versiones, una única solicitud recuperaría las 990 versiones de photo.gif y solo las 10 versiones más recientes de picture.jpg.

Amazon S3 devuelve las versiones de objetos en el orden en el que se almacenaron y devuelve las almacenadas más recientemente primero.

En una solicitud GET Bucket, incluya el subrecurso 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=
ejemplo — Recuperar todas las versiones de una clave

Para recuperar un subconjunto de las versiones de un objeto, use los parámetros de la solicitud GET Bucket Bucket. Para obtener más información, consulte GET Bucket.

  1. Establezca el prefix parámetro en la clave del objeto que quiera recuperar.

  2. Envíe una solicitud GET Bucket con el subrecurso versions y prefix.

    GET /?versions&prefix=objectName HTTP/1.1

ejemplo — Recuperar objetos mediante un prefijo

En el siguiente ejemplo se recuperan objetos cuya clave es o comienza por 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=

Puede usar los otros parámetros de solicitud para recuperar un subconjunto de todas las versiones del objeto. Para obtener más información, consulte GET Bucket en la Referencia de la API de Amazon Simple Storage Service.

ejemplo — Recuperar un listado de objetos adicionales si la respuesta está truncada

Si el número de objetos que se pueden devolver con una solicitud GET supera el valor de max-keys, la respuesta contendrá <isTruncated>true</isTruncated> e incluirá la primera clave (en NextKeyMarker) y el primer ID de versión (en NextVersionIdMarker) que se ajusten a la solicitud, pero no se hayan devuelto. Puede usar esos valores como posición de inicio en una solicitud subsiguiente para recuperar los objetos adicionales que se ajusten a la solicitud GET.

Puede usar el siguiente proceso para recuperar objetos adicionales que se ajusten a la solicitud GET Bucket versions original desde un bucket. Para obtener más información sobre key-marker, version-id-marker, NextKeyMarker y NextVersionIdMarker, consulte GET Bucket en la Referencia de la API de Amazon Simple Storage Service.

Las siguientes son respuestas adicionales que satisfacen la solicitud GET original:

  • Establezca el valor de key-marker de acuerdo con la clave devuelta en NextKeyMarker en la respuesta anterior.

  • Establezca el valor de version-id-marker de acuerdo con el ID de versión devuelto en NextVersionIdMarker en la respuesta anterior.

  • Envíe una solicitud GET Bucket versions con el subrecurso key-marker y version-id-marker.

ejemplo — Recuperar objetos que comienzan con una clave y un ID de versión específicos
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=

El siguiente comando devuelve los metadatos de todas las versiones de los objetos de un bucket.

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

Para obtener más información sobre list-object-versions, consulte list-object-versions en la Referencia de los comandos de AWS CLI.