Configurar el ciclo de vida de un bucket - Amazon Simple Storage Service

Configurar el ciclo de vida de un bucket

En esta sección, se explica cómo puede establecer una configuración de S3 Lifecycle en un bucket mediante los SDK de AWS, la AWS CLI o la consola de Amazon S3. Para obtener información acerca de la configuración de S3 Lifecycle, consulte Administración del ciclo de vida del almacenamiento.

Puede usar las reglas de ciclo de vida para definir acciones que quiera que realice Amazon S3 durante el periodo de vida de un objeto (por ejemplo: la transición de objetos a otra clase de almacenamiento, su archivado o su eliminación tras transcurrir un periodo de tiempo especificado).

Antes de establecer una configuración del ciclo de vida, tenga en cuenta lo siguiente:

Retraso de la propagación

Cuando añade una configuración de S3 Lifecycle a un bucket, por lo general se produce un cierto desfase antes de que una configuración de ciclo de vida nueva o actualizada se propague totalmente a todos los sistemas de Amazon S3. Habrá un retraso de algunos minutos antes de que la configuración entre en vigor completamente. Este retraso también se puede producir cuando elimina una configuración de S3 Lifecycle.

Deshabilitación o eliminación de las reglas de Lifecycle

Cuando se deshabilitan o eliminan reglas de Lifecycle, después de cierto retraso Amazon S3 deja de programar la eliminación o transición de nuevos objetos. Cualquier objeto que ya haya sido programado se desprograma y no se elimina ni se traslada.

nota

Antes de actualizar, deshabilitar o eliminar las reglas del ciclo de vida, utilice las operaciones de la API LIST (como ListObjectsV2, ListObjectVersions, and ListMultipartUploads) o Inventario de Amazon S3 para comprobar que Amazon S3 ha realizado la transición y ha caducado los objetos aptos en función de sus casos de uso. Si tiene problemas para actualizar, deshabilitar o eliminar las reglas del ciclo de vida, consulte Solucionar problemas de Amazon S3 Lifecycle.

Objetos existentes y nuevos

Cuando añade una configuración de ciclo de vida a un bucket, las reglas de configuración se aplican a los objetos existentes y a los objetos que añade posteriormente. Por ejemplo, si hoy añade una regla de configuración de Lifecycle con una acción de vencimiento que causa que objetos con un prefijo específico expiren 30 días después de la creación, Amazon S3 pondrá en cola de eliminación cualquier objeto existente con más de 30 días de antigüedad.

Cambios en la facturación

Es posible que haya un desfase entre la fecha en que se cumplen las reglas de configuración de ciclo de vida y la fecha en que se realiza la acción para cumplir la regla. Sin embargo, los cambios en la facturación se producen ni bien se cumple la regla de configuración de ciclo de vida, incluso aunque la acción todavía no se haya realizado.

Un ejemplo es cuando no se le cobra por el almacenamiento después del tiempo de vencimiento del objeto, incluso aunque el objeto no se elimine inmediatamente. Otro ejemplo es cuando se le cobran las tarifas de almacenamiento de S3 Glacier Flexible Retrieval en cuanto transcurre el tiempo de transición del objeto, incluso aunque el objeto no se traslade de inmediato a la clase de almacenamiento S3 Glacier Flexible Retrieval. Las transiciones del ciclo de vida a la clase de almacenamiento de S3 Intelligent-Tiering son la excepción. Los cambios en la facturación no se producen hasta que el objeto haya pasado a la clase de almacenamiento de S3 Intelligent-Tiering.

Puede definir una regla de ciclo de vida para todos los objetos o para un subconjunto de objetos del bucket mediante un prefijo compartido (nombres de objetos que comienzan por una cadena común) o una etiqueta. Mediante una regla de ciclo de vida puede definir acciones específicas a las versiones de objetos actualizadas y no actualizadas. Para obtener más información, consulte los siguientes temas:

Para crear una regla de ciclo de vida
  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, seleccione el nombre del bucket para el que desea crear una regla de ciclo de vida.

  3. Seleccione la pestaña Management (Administración) y seleccione Create lifecycle rule (Crear regla de ciclo de vida).

  4. En Lifecycle rule name (Nombre de regla de ciclo de vida), escriba un nombre para la regla.

    El nombre debe ser único dentro del bucket.

  5. Elija el ámbito de la regla de ciclo de vida:

    • Para aplicar esta regla de ciclo de vida a todos los objetos con un prefijo o etiqueta específicos, elija Limit the scope to specific prefixes or tags (Limitar el ámbito a prefijos o etiquetas específicos).

      • Para limitar el ámbito por prefijo, en Prefix (Prefijo), escriba el prefijo.

      • Para limitar el ámbito por etiqueta, seleccione Add tag (Agregar etiqueta) e introduzca la clave y el valor de la etiqueta.

      Para obtener más información acerca de los prefijos de nombre de objeto, consulte Creación de nombres de clave de objeto. Para obtener más información acerca de las etiquetas de objeto, consulte Categorización del almacenamiento mediante etiquetas.

    • Para aplicar esta regla de ciclo de vida a todos los objetos del bucket, seleccione This rule applies to all objects in the bucket (Esta regla se aplica a todos los objetos del bucket) y seleccione I acknowledge that this rule applies to all objects in the bucket (Reconozco que esta regla se aplica a todos los objetos del bucket).

  6. Para filtrar una regla por tamaño de objeto, puede verificar Specify minimum object size (Especificar el tamaño mínimo de objeto), Specify maximum object size (Especificar tamaño máximo de objeto) o ambas opciones.

    • Cuando especifica un tamaño mínimo de objeto o un tamaño máximo de objeto, el valor debe ser superior a 0 bytes y hasta 5 TB. Puede indicar este valor en bytes, KB, MB o GB.

    • Cuando especifica ambos, el tamaño máximo de objeto debe ser superior al tamaño mínimo de objeto.

  7. En Lifecycle rule actions (Acciones de regla de ciclo de vida), elija las acciones que desea que realice la regla de ciclo de vida:

    • Realizar la transición de versiones de objetos actuales entre clases de almacenamiento

    • Realizar la transición de versiones de objetos anteriores entre clases de almacenamiento

    • Caducar las versiones de objetos actuales

    • Eliminar permanentemente versiones de objetos anteriores

    • Eliminar marcadores de eliminación caducados o cargas multiparte incompletas

    Dependiendo de las acciones que elija, aparecerán diferentes opciones.

  8. Para realizar la transición de versiones de objetos actuales entre clases de almacenamiento, en Transition current versions of objects between storage classes (Realizar la transición de versiones de objetos actuales entre clases de almacenamiento):

    1. En Storage class transitions (Transiciones de clase de almacenamiento), seleccione la clase de almacenamiento a la que quiera realizar la transición:

      • Standard-IA

      • Intelligent-Tiering (Capas avanzadas)

      • One Zone-IA

      • S3 Glacier Flexible Retrieval

      • Glacier Deep Archive

    2. En Days after object creation (Días después de la creación del objeto), introduzca el número de días posteriores a la creación del objeto en los que quiera realizar la transición.

    Para obtener más información acerca de las clases de almacenamiento, consulte Uso de las clases de almacenamiento de Amazon S3. Puede definir transiciones para versiones de objetos actuales o anteriores, o tanto para las actuales como para las anteriores. El control de versiones le permite mantener varias versiones de un objeto en un bucket. Para obtener más información sobre el control de versiones, consulte Uso de la consola de S3.

    importante

    Si elige la clase de almacenamiento S3 Glacier Flexible Retrieval o Glacier Deep Archive, los objetos permanecen en Amazon S3. No puede acceder a ellos directamente a través del servicio independiente de Amazon S3 Glacier. Para obtener más información, consulte Transición de objetos con Amazon S3 Lifecycle.

  9. Para realizar la transición de versiones de objetos no actuales entre clases de almacenamiento, en Transition non-current versions of objects between storage classes (Realizar la transición de versiones de objetos no actuales entre clases de almacenamiento):

    1. En Storage class transitions (Transiciones de clase de almacenamiento), seleccione la clase de almacenamiento a la que quiera realizar la transición:

      • Standard-IA

      • Intelligent-Tiering (Capas avanzadas)

      • One Zone-IA

      • S3 Glacier Flexible Retrieval

      • Glacier Deep Archive

    2. En Days after object becomes non-current (Días después de que el objeto se vuelve no actual), introduzca el número de días posteriores a la creación del objeto en los que quiera realizar la transición.

  10. Para hacer caducar versiones de objetos actuales, en Expire current versions of objects (Hacer caducar versiones de objetos actuales), en Number of days after object creation (Número de días después de la creación del objeto), ingrese el número de días.

    importante

    En un bucket sin control de versiones, la acción de vencimiento da como resultado que Amazon S3 elimine de forma permanente el objeto. Para obtener más información sobre las acciones del ciclo de vida, consulte Elementos para describir las acciones del ciclo de vida.

  11. Para eliminar de manera permanente versiones anteriores de objetos, en Permanently delete noncurrent versions of objects (Eliminar de manera permanente versiones no actuales de objetos), en Days after objects become noncurrent (Días después de que los objetos se vuelven no actuales), escriba el número de días. Puede especificar opcionalmente el número de versiones más recientes que desea retener introduciendo un valor en Number of newer versions to retain (Número de versiones más recientes que se deben retener).

  12. Bajo Delete expired markers or incomplete multipart uploads (Eliminar marcadores caducados o cargas multiparte incompletas), seleccione Delete expired object delete markers (Eliminar marcadores de eliminación de objetos caducados) y Delete incomplete multipart uploads (Eliminar cargas multiparte incompletas). A continuación, escriba el número de días que han de transcurrir entre el inicio de la carga multiparte y el momento en que quiera finalizarla y limpiar las cargas incompletas.

    Para obtener más información acerca de las cargas multipartes, consulte Carga y copia de objetos con la carga multiparte.

  13. Elija Create rule (Crear regla).

    Si la regla no contiene ningún error, Amazon S3 la habilita y se puede ver en la ficha Management (Administración) en Lifecycle rules (Reglas del ciclo de vida).

Para obtener información sobre las plantillas y los ejemplos de CloudFormation, consulte Uso de plantillas de AWS CloudFormation y AWS::S3::Bucket en la Guía del usuario de AWS CloudFormation.

Puede utilizar los siguientes comandos de la AWS CLI para administrar configuraciones de ciclo de vida de S3:

  • put-bucket-lifecycle-configuration

  • get-bucket-lifecycle-configuration

  • delete-bucket-lifecycle

Para obtener instrucciones acerca de cómo configurar la AWS CLI, consulte Desarrollo con Amazon S3 mediante la AWS CLI.

La configuración de Amazon S3 Lifecycle es un archivo XML. Pero cuando se usa la AWS CLI no se puede especificar el XML. Debe especificar el JSON en su lugar. A continuación se describen configuraciones de ciclo de vida de ejemplo de JSON equivalentes que puede especificar en el comando de la AWS CLI.

Considere la siguiente configuración de S3 Lifecycle de ejemplo:

ejemplo Ejemplo 1
JSON
{ "Rules": [ { "Filter": { "Prefix": "documents/" }, "Status": "Enabled", "Transitions": [ { "Days": 365, "StorageClass": "GLACIER" } ], "Expiration": { "Days": 3650 }, "ID": "ExampleRule" } ] }
XML
<LifecycleConfiguration> <Rule> <ID>ExampleRule</ID> <Filter> <Prefix>documents/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>365</Days> <StorageClass>GLACIER</StorageClass> </Transition> <Expiration> <Days>3650</Days> </Expiration> </Rule> </LifecycleConfiguration>
ejemplo Ejemplo 2
JSON
{ "Rules": [ { "ID": "id-1", "Filter": { "And": { "Prefix": "myprefix", "Tags": [ { "Value": "mytagvalue1", "Key": "mytagkey1" }, { "Value": "mytagvalue2", "Key": "mytagkey2" } ] } }, "Status": "Enabled", "Expiration": { "Days": 1 } } ] }
XML
<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Rule> <ID>id-1</ID> <Expiration> <Days>1</Days> </Expiration> <Filter> <And> <Prefix>myprefix</Prefix> <Tag> <Key>mytagkey1</Key> <Value>mytagvalue1</Value> </Tag> <Tag> <Key>mytagkey2</Key> <Value>mytagvalue2</Value> </Tag> </And> </Filter> <Status>Enabled</Status> </Rule> </LifecycleConfiguration>

Puede probar la put-bucket-lifecycle-configuration de la siguiente manera.

Para probar la configuración
  1. Guarde la configuración del ciclo de vida de JSON en un archivo (lifecycle.json).

  2. Ejecute el siguiente comando de la AWS CLI para establecer la configuración del ciclo de vida en su bucket.

    $ aws s3api put-bucket-lifecycle-configuration  \ --bucket bucketname  \ --lifecycle-configuration file://lifecycle.json
  3. Para verificar, recupere la configuración del ciclo de vida de S3 con el comando get-bucket-lifecycle-configuration de la AWS CLI de la siguiente manera.

    $ aws s3api get-bucket-lifecycle-configuration  \ --bucket bucketname
  4. Para eliminar la configuración del ciclo de vida de S3, utilice el comando delete-bucket-lifecycle de la AWS CLI de la siguiente manera.

    aws s3api delete-bucket-lifecycle \ --bucket bucketname
Java

Puede utilizar AWS SDK for Java para administrar la configuración del ciclo de vida de S3 de un bucket. Para obtener más información acerca de cómo administrar la configuración de S3 Lifecycle, consulte Administración del ciclo de vida del almacenamiento.

nota

Cuando añade una configuración de S3 Lifecycle a un bucket, Amazon S3 reemplaza la configuración de Lifecycle actual, si la hubiera. Para actualizar una configuración, debe recuperarla, hacer los cambios deseados y luego añadir la configuración revisada al bucket.

El siguiente ejemplo muestra cómo usar AWS SDK for Java para añadir, actualizar y eliminar una configuración de ciclo de vida de un bucket. En el ejemplo se realiza lo siguiente:

  • Añade una configuración de ciclo de vida a un bucket.

  • Recupera la configuración de ciclo de vida y la actualiza añadiendo otra regla.

  • Añade la configuración de Lifecycle modificada al bucket. Amazon S3 reemplaza la configuración existente.

  • Recupera la configuración de nuevo y verifica que tiene el número correcto de reglas a partir del número impreso de reglas.

  • Elimina la configuración de nuevo y verifica que se ha eliminado intentando volver a recuperarla.

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.BucketLifecycleConfiguration; import com.amazonaws.services.s3.model.BucketLifecycleConfiguration.Transition; import com.amazonaws.services.s3.model.StorageClass; import com.amazonaws.services.s3.model.Tag; import com.amazonaws.services.s3.model.lifecycle.LifecycleAndOperator; import com.amazonaws.services.s3.model.lifecycle.LifecycleFilter; import com.amazonaws.services.s3.model.lifecycle.LifecyclePrefixPredicate; import com.amazonaws.services.s3.model.lifecycle.LifecycleTagPredicate; import java.io.IOException; import java.util.Arrays; public class LifecycleConfiguration { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; // Create a rule to archive objects with the "glacierobjects/" prefix to Glacier // immediately. BucketLifecycleConfiguration.Rule rule1 = new BucketLifecycleConfiguration.Rule() .withId("Archive immediately rule") .withFilter(new LifecycleFilter(new LifecyclePrefixPredicate("glacierobjects/"))) .addTransition(new Transition().withDays(0).withStorageClass(StorageClass.Glacier)) .withStatus(BucketLifecycleConfiguration.ENABLED); // Create a rule to transition objects to the Standard-Infrequent Access storage // class // after 30 days, then to Glacier after 365 days. Amazon S3 will delete the // objects after 3650 days. // The rule applies to all objects with the tag "archive" set to "true". BucketLifecycleConfiguration.Rule rule2 = new BucketLifecycleConfiguration.Rule() .withId("Archive and then delete rule") .withFilter(new LifecycleFilter(new LifecycleTagPredicate(new Tag("archive", "true")))) .addTransition(new Transition().withDays(30) .withStorageClass(StorageClass.StandardInfrequentAccess)) .addTransition(new Transition().withDays(365).withStorageClass(StorageClass.Glacier)) .withExpirationInDays(3650) .withStatus(BucketLifecycleConfiguration.ENABLED); // Add the rules to a new BucketLifecycleConfiguration. BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration() .withRules(Arrays.asList(rule1, rule2)); try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Save the configuration. s3Client.setBucketLifecycleConfiguration(bucketName, configuration); // Retrieve the configuration. configuration = s3Client.getBucketLifecycleConfiguration(bucketName); // Add a new rule with both a prefix predicate and a tag predicate. configuration.getRules().add(new BucketLifecycleConfiguration.Rule().withId("NewRule") .withFilter(new LifecycleFilter(new LifecycleAndOperator( Arrays.asList(new LifecyclePrefixPredicate("YearlyDocuments/"), new LifecycleTagPredicate(new Tag( "expire_after", "ten_years")))))) .withExpirationInDays(3650) .withStatus(BucketLifecycleConfiguration.ENABLED)); // Save the configuration. s3Client.setBucketLifecycleConfiguration(bucketName, configuration); // Retrieve the configuration. configuration = s3Client.getBucketLifecycleConfiguration(bucketName); // Verify that the configuration now has three rules. configuration = s3Client.getBucketLifecycleConfiguration(bucketName); System.out.println("Expected # of rules = 3; found: " + configuration.getRules().size()); // Delete the configuration. s3Client.deleteBucketLifecycleConfiguration(bucketName); // Verify that the configuration has been deleted by attempting to retrieve it. configuration = s3Client.getBucketLifecycleConfiguration(bucketName); String s = (configuration == null) ? "No configuration found." : "Configuration found."; System.out.println(s); } 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

Puede utilizar AWS SDK for .NET para administrar la configuración del ciclo de vida de S3 en un bucket. Para obtener más información acerca de cómo administrar la configuración del ciclo de vida, consulte Administración del ciclo de vida del almacenamiento.

nota

Cuando añade una configuración de ciclo de vida, Amazon S3 reemplaza la configuración existente en el bucket especificado. Para actualizar una configuración, primero debe recuperar la configuración de ciclo de vida existente, hacer los cambios y luego añadir la configuración de ciclo de vida revisada al bucket.

El siguiente ejemplo muestra cómo usar AWS SDK for .NET para añadir, actualizar y eliminar una configuración de ciclo de vida de un bucket. Este ejemplo de código hace lo siguiente:

  • Añade una configuración de ciclo de vida a un bucket.

  • Recupera la configuración de ciclo de vida y la actualiza añadiendo otra regla.

  • Añade la configuración de Lifecycle modificada al bucket. Amazon S3 reemplaza la configuración de ciclo de vida existente.

  • Recupera la configuración de nuevo y la verifica imprimiendo el número de reglas en la configuración.

  • Elimina la configuración del ciclo de vida y verifica la eliminación.

Para obtener instrucciones 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.Collections.Generic; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class LifecycleTest { private const string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); AddUpdateDeleteLifecycleConfigAsync().Wait(); } private static async Task AddUpdateDeleteLifecycleConfigAsync() { try { var lifeCycleConfiguration = new LifecycleConfiguration() { Rules = new List<LifecycleRule> { new LifecycleRule { Id = "Archive immediately rule", Filter = new LifecycleFilter() { LifecycleFilterPredicate = new LifecyclePrefixPredicate() { Prefix = "glacierobjects/" } }, Status = LifecycleRuleStatus.Enabled, Transitions = new List<LifecycleTransition> { new LifecycleTransition { Days = 0, StorageClass = S3StorageClass.Glacier } }, }, new LifecycleRule { Id = "Archive and then delete rule", Filter = new LifecycleFilter() { LifecycleFilterPredicate = new LifecyclePrefixPredicate() { Prefix = "projectdocs/" } }, Status = LifecycleRuleStatus.Enabled, Transitions = new List<LifecycleTransition> { new LifecycleTransition { Days = 30, StorageClass = S3StorageClass.StandardInfrequentAccess }, new LifecycleTransition { Days = 365, StorageClass = S3StorageClass.Glacier } }, Expiration = new LifecycleRuleExpiration() { Days = 3650 } } } }; // Add the configuration to the bucket. await AddExampleLifecycleConfigAsync(client, lifeCycleConfiguration); // Retrieve an existing configuration. lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client); // Add a new rule. lifeCycleConfiguration.Rules.Add(new LifecycleRule { Id = "NewRule", Filter = new LifecycleFilter() { LifecycleFilterPredicate = new LifecyclePrefixPredicate() { Prefix = "YearlyDocuments/" } }, Expiration = new LifecycleRuleExpiration() { Days = 3650 } }); // Add the configuration to the bucket. await AddExampleLifecycleConfigAsync(client, lifeCycleConfiguration); // Verify that there are now three rules. lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client); Console.WriteLine("Expected # of rulest=3; found:{0}", lifeCycleConfiguration.Rules.Count); // Delete the configuration. await RemoveLifecycleConfigAsync(client); // Retrieve a nonexistent configuration. lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered ***. 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); } } static async Task AddExampleLifecycleConfigAsync(IAmazonS3 client, LifecycleConfiguration configuration) { PutLifecycleConfigurationRequest request = new PutLifecycleConfigurationRequest { BucketName = bucketName, Configuration = configuration }; var response = await client.PutLifecycleConfigurationAsync(request); } static async Task<LifecycleConfiguration> RetrieveLifecycleConfigAsync(IAmazonS3 client) { GetLifecycleConfigurationRequest request = new GetLifecycleConfigurationRequest { BucketName = bucketName }; var response = await client.GetLifecycleConfigurationAsync(request); var configuration = response.Configuration; return configuration; } static async Task RemoveLifecycleConfigAsync(IAmazonS3 client) { DeleteLifecycleConfigurationRequest request = new DeleteLifecycleConfigurationRequest { BucketName = bucketName }; await client.DeleteLifecycleConfigurationAsync(request); } } }
Ruby

Puede utilizar AWS SDK for Ruby para administrar la configuración del ciclo de vida de S3 en un bucket con la clase AWS::S3::BucketLifecycleConfiguration. Para obtener más información acerca del uso de AWS SDK for Ruby con Amazon S3, consulte Uso de la versión 3 de AWS SDK for Ruby. Para obtener más información acerca de cómo administrar la configuración del ciclo de vida, consulte Administración del ciclo de vida del almacenamiento.

En las secciones siguientes de la referencia de la API de Amazon Simple Storage Service se describe la API de REST relacionada con la configuración de S3 Lifecycle.