Todos los productos
Search
Centro de documentos

Object Storage Service:Lifecycle rules based on last modification time

Última actualización: Sep 23, 2026

Las reglas de ciclo de vida basadas en la última hora de modificación transfieren automáticamente los objetos a clases de almacenamiento más frías o los eliminan. Esto permite reducir los costos de almacenamiento.

Escenarios de uso

  • Un proveedor de servicios de salud carga registros médicos en OSS. Durante los primeros seis meses se accede a estos registros de forma ocasional y después casi nunca. Una regla de ciclo de vida los transfiere a Archive después de 180 días.

  • Una empresa carga grabaciones de su línea de atención en OSS. Estas grabaciones se usan activamente durante dos meses, se consultan de manera ocasional hasta el sexto mes y dejan de ser necesarias después de dos años. Una regla de ciclo de vida las transfiere a Infrequent Access a los 60 días, a Archive a los 180 días y las elimina a los 730 días.

  • Para eliminar todos los objetos de un bucket, configure una regla de ciclo de vida que aplique a todo el bucket y elimine los objetos después de un día.

Estas transiciones utilizan storage classes de OSS.

Límites

Condiciones de coincidencia

Las reglas de ciclo de vida solo permiten coincidir por prefijos y etiquetas. No son compatibles con coincidencias por comodines, sufijos ni expresiones regulares.

Límites para la caducidad de partes

No es posible configurar dos o más reglas de ciclo de vida que contengan una política de ciclo de vida de partes para objetos cuyos nombres tengan prefijos superpuestos. A continuación se muestran algunos ejemplos:

  • Ejemplo 1

    Si configura una regla de ciclo de vida con una política de partes para un bucket, no puede configurar otra regla de ciclo de vida con una política de partes para ningún objeto de ese bucket.

  • Ejemplo 2

    Si configura una regla de ciclo de vida con una política de partes para los objetos cuyo nombre contiene el prefijo dir1 dentro de un bucket, no puede configurar otra regla de ciclo de vida con una política de partes para objetos con prefijos superpuestos, como dir1/dir2.

Límites para la transición de clase de almacenamiento

  • Las reglas de ciclo de vida no pueden transferir objetos de tipo Appendable a las clases de almacenamiento Cold Archive o Deep Cold Archive. Para transferir un objeto Appendable, primero debe convertirlo en un objeto Normal mediante la operación SealAppendObject. Después de esta conversión, ya es posible aplicar la regla de ciclo de vida.

  • Las reglas de ciclo de vida no sirven para transferir enlaces simbólicos a las clases de almacenamiento Infrequent Access (IA), Archive, Cold Archive o Deep Cold Archive.

Consideraciones

Límite de reglas

Un bucket admite hasta 1,000 reglas de ciclo de vida. Una sola regla puede incluir políticas basadas tanto en la última hora de modificación como en la última hora de acceso.

Semántica de sobrescritura

La operación PutBucketLifecycle sobrescribe la configuración existente de una regla de ciclo de vida del bucket. Por ejemplo, si un bucket tiene configurada una regla llamada Rule1 y usted desea agregar otra llamada Rule2, siga estos pasos:

  1. Recupere Rule1.

  2. Combine Rule1 y Rule2.

  3. Actualice la configuración con las reglas combinadas (Rule1+Rule2).

Tiempo de entrada en vigor

Después de crear una regla de ciclo de vida, el estado en la lista de reglas de la consola muestra Starting. Este comportamiento es normal y el estado no cambia a Enabled. La ejecución de las reglas de ciclo de vida no genera recuentos de eliminación, registros ni notificaciones. Para confirmar si una regla se ejecutó, compruebe si los objetos de destino aún existen.

OSS carga una regla de ciclo de vida en un plazo de 24 horas después de su creación. Una vez cargada, OSS ejecuta la regla todos los días a las 08:00:00 (UTC+8).

En las reglas basadas en días, asegúrese de que transcurran como mínimo 24 horas entre la última hora de modificación del objeto y la hora de inicio de ejecución de la regla (08:00 UTC+8). Por ejemplo, si una regla elimina objetos un día después de cargarlos, OSS procesa un objeto cargado el 20 de julio de 2020 de la siguiente manera:

  • Los objetos cargados antes de las 08:00:00 (UTC+8) del 20 de julio de 2020 se eliminan entre las 08:00:00 (UTC+8) del 21 de julio de 2020 y las 08:00:00 (UTC+8) del 22 de julio de 2020.

  • Los objetos cargados después de las 08:00:00 (UTC+8) del 20 de julio de 2020 se eliminan entre las 08:00:00 (UTC+8) del 22 de julio de 2020 y las 08:00:00 (UTC+8) del 23 de julio de 2020.

Actualizar una regla de ciclo de vida puede interrumpir la tarea de ciclo de vida del día actual. Evite las actualizaciones frecuentes.

Compruebe la regla antes de aplicarla en producción

Antes de aplicar una regla de ciclo de vida a un bucket de producción, configúrela y compruébela en un bucket de prueba. Una vez que confirme que la regla funciona como espera, aplíquela al bucket de producción. Configurar una regla de ciclo de vida directamente en producción sin comprobarla antes puede provocar la eliminación accidental de datos.

Respalde los datos antes de configurar

Antes de configurar una regla de ciclo de vida, respalde los datos importantes. Puede utilizar same-region replication (SRR) o cross-region replication (CRR) para respaldar sus datos.

Tiempo de finalización de la ejecución

  • Una vez que una regla entra en vigor, las operaciones de ciclo de vida —como la eliminación de objetos, la transición de clase de almacenamiento y la caducidad de partes de cargas multiparte— suelen completarse en menos de 24 horas para un máximo de mil millones de objetos en las regiones China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen) y Singapore. En otras regiones, estas operaciones suelen completarse en menos de 24 horas para un máximo de 100 millones de objetos.

  • La ejecución puede tardar más de 24 horas y, en algunos casos, varios días o semanas. Esto ocurre cuando hay muchos objetos por analizar, muchos objetos afectados por la regla de ciclo de vida, muchas etiquetas, varias versiones de un mismo objeto o un volumen alto de objetos nuevos que se escriben mientras se ejecuta la tarea de ciclo de vida.

    Nota

    Si el control de versiones está habilitado en el bucket, cada operación sobre una versión de un objeto se cuenta como una operación independiente.

Facturación

Las transiciones de clase de almacenamiento y las eliminaciones generan cargos de almacenamiento y de solicitudes. Lifecycle Fees.

Consideraciones por escenario

  • Eliminar los datos de origen después de la replicación: La replicación de datos y las operaciones de ciclo de vida son asíncronas. La replicación puede tardar minutos, horas o incluso días, según la cantidad de datos por replicar y el ancho de banda disponible. Antes de configurar una regla de ciclo de vida para eliminar los datos replicados del bucket de origen, compruebe que los datos ya se replicaron en el bucket de destino. Establezca un periodo de caducidad adecuado. De lo contrario, la regla de ciclo de vida podría eliminar los datos de origen antes de que termine la replicación, lo que provocaría pérdida de datos.

  • Buckets de OSS-HDFS:

    • Reglas de ciclo de vida para archivos de OSS

      Para configurar o modificar una regla de ciclo de vida basada en la última hora de modificación que coincida con todos los objetos de un bucket con OSS-HDFS habilitado, utilice el elemento NOT para excluir los objetos almacenados en el directorio .dlsdata/. Así evita que las acciones de eliminación de objetos o de conversión de clase de almacenamiento, desencadenadas por la regla de ciclo de vida, afecten los datos de OSS-HDFS y, por consecuencia, las operaciones de lectura y escritura sobre ellos.

    • Reglas de ciclo de vida para archivos de HDFS

      Para almacenar los datos de acceso frecuente en Standard y los de acceso poco frecuente en Infrequent Access, Archive o Deep Archive, utilice la función Use tiered storage, que se basa en reglas de ciclo de vida.

  • Reglas de ciclo de vida con control de versiones: Las transiciones de clase de almacenamiento por ciclo de vida no crean versiones anteriores.

Componentes

Condiciones de filtro

  • Coincidencia por prefijo: coincide con objetos y partes que tienen un prefijo específico. Puede crear varias reglas con prefijos distintos y no superpuestos. Los nombres de los prefijos siguen las reglas de nomenclatura de Object.

  • Coincidencia por tag: coincide con objetos mediante etiquetas de clave-valor específicas. Una sola regla puede tener varias etiquetas; la regla solo aplica a los objetos que contienen todas las etiquetas especificadas.

    Etiquetas de la regla de ciclo de vida

    Etiquetas del objeto

    Coincide

    a:1,b:2

    a:1

    No

    a:1,b:3

    No

    a:1,b:2

    Sí

    a:1,b:2,c:3

    Sí

    Nota

    Las reglas basadas en etiquetas no aplican a las partes.

  • Coincidencia por prefijo y etiquetas: coincide con objetos que tienen el prefijo y los filtros de etiqueta especificados.

  • Aplicar a todo el bucket: coincide con todos los objetos y partes del bucket.

  • Elemento NOT: excluye objetos específicos de una regla de ciclo de vida que, de otro modo, coincidirían por prefijo y etiquetas. Especifique los prefijos y las etiquetas que desea excluir. NOT element examples.

    Importante
    • Las reglas de ciclo de vida pueden incluir varios elementos NOT. Esta función se encuentra en vista previa solo por invitación. Póngase en contacto con soporte técnico para solicitar acceso.

    • Un bucket admite hasta 1,000 elementos NOT. Una sola regla admite hasta 100 elementos NOT. El total de elementos Prefix en todas las reglas tiene un límite de 2,000.

    • Después de configurar varios elementos NOT, utilice la consola para gestionar sus reglas de ciclo de vida.

    • Si la función de múltiples elementos NOT no está habilitada, no cree varias reglas donde cada una excluya un subdirectorio distinto. Los elementos NOT de diferentes reglas funcionan de manera independiente. Por ejemplo, si rule1 excluye únicamente dir/p1/, rule1 seguirá coincidiendo con dir/p2/ y lo eliminará. Si rule2 excluye únicamente dir/p2/, rule2 seguirá coincidiendo con dir/p1/ y lo eliminará. Como resultado, se eliminarán todos los archivos bajo el prefijo dir/.

Caducidad de objetos y acciones

  • Caducidad en días: la acción especificada se ejecuta N días después de la última hora de modificación del objeto. Aplica a todos los objetos de un bucket sin control de versiones y a las versiones actuales de un bucket con control de versiones.

  • Caducidad en una fecha: todos los objetos modificados por última vez antes de la fecha especificada caducan y la acción se ejecuta. Aplica a todos los objetos de un bucket sin control de versiones y a las versiones actuales de un bucket con control de versiones.

  • Días desde que dejó de ser la versión actual: una versión anterior caduca N días después de dejar de ser la versión actual y la acción se ejecuta.

Transfiera o elimine los objetos caducados según lo indicado en Lifecycle configuration elements.

Caducidad de partes y acciones

  • Caducidad en días: una parte se elimina un número específico de días (N) después de su última hora de modificación.

  • Caducidad en una fecha: se eliminan todas las partes cuya última modificación ocurrió antes de una fecha específica.

Funcionamiento de las reglas

Prefijos distintos

Por ejemplo, un bucket contiene los siguientes objetos:

logs/programl/log1.txt
logs/program2/log2.txt
logs/program3/log3.txt
doc/readme.txt

Si una regla de ciclo de vida especifica el prefijo logs/, solo aplica a los objetos que comienzan con logs/. Si el prefijo es doc/readme.txt, la regla aplica únicamente al objeto doc/readme.txt.

Nota

Puede especificar un prefijo con caracteres chinos para una regla de ciclo de vida.

Cuando ejecuta una operación GET o HEAD sobre un objeto que coincide con una política de caducidad, OSS agrega el encabezado de respuesta x-oss-expiration. expiry-date indica la fecha de caducidad del objeto y rule-id indica el identificador de la regla coincidente.

Mismo prefijo y etiquetas

Cuando varias reglas con el mismo prefijo y etiquetas aplican a un objeto, la eliminación tiene prioridad sobre la transición de clase de almacenamiento. Por ejemplo, si rule1 elimina los objetos con el prefijo abc y la etiqueta a=1 después de 20 días, la transición de clase de almacenamiento de rule2 no surte efecto.

Regla

Prefijo

Etiqueta

Acción

rule1

abc

a=1

Eliminar después de 20 días

rule2

abc

a=1

Transferir a Archive Storage después de 20 días

Prefijos superpuestos

rule1 transfiere todos los objetos con la etiqueta a=1 a Infrequent Access (IA) después de 10 días. rule2 elimina los objetos con el prefijo abc y la etiqueta a=1 después de 120 días.

Regla

Prefijo

Etiqueta

Acción

rule1

-

a=1

Transferir a IA después de 10 días

rule2

abc

a=1

Eliminar después de 120 días

rule3 transfiere todos los objetos con la etiqueta a=1 a Archive después de 20 días. Dado que los objetos en Archive no se pueden transferir a Infrequent Access (IA), rule4 —que transfiere a IA los objetos con el prefijo abc y la etiqueta a=1 después de 30 días— no surte efecto.

Regla

Prefijo

Etiqueta

Acción

rule3

-

a=1

Transferir a Archive Storage después de 20 días

rule4

abc

a=1

Transferir a IA después de 30 días

Elemento NOT

Si configura varias reglas de ciclo de vida para el mismo bucket y una de ellas incluye un elemento NOT, la lógica NOT aplica únicamente dentro de esa regla específica. A continuación se muestran algunos ejemplos:

  • Ejemplo 1

    • La regla de ciclo de vida 1 elimina los objetos con el prefijo dir/ en examplebucket después de 100 días.

    • La regla de ciclo de vida 2 utiliza un elemento NOT para eliminar todos los objetos de examplebucket, excepto los que tienen el prefijo dir/, después de 50 días.

    Una vez que estas reglas de ciclo de vida están activas, los objetos de examplebucket se eliminan de la siguiente manera:

    Objeto

    Comportamiento de eliminación

    Objetos con el prefijo dir/

    Se eliminan después de 100 días

    Objetos sin el prefijo dir/

    Se eliminan después de 50 días

  • Ejemplo 2

    • La regla de ciclo de vida 1 utiliza un elemento NOT para eliminar todos los objetos de examplebucket, excepto los que tienen la etiqueta (key1:value1), después de 30 días.

    • La regla de ciclo de vida 2 elimina todos los objetos de examplebucket con la etiqueta (key2:value2) después de 50 días.

    Una vez que estas reglas de ciclo de vida están activas, los objetos de examplebucket se eliminan de la siguiente manera:

    Objeto

    Comportamiento de eliminación

    Objetos sin las etiquetas key1:value1 o key2:value2

    Se eliminan después de 30 días

    Objetos solo con la etiqueta key1:value1

    No se eliminan

    Objetos solo con la etiqueta key2:value2

    Se eliminan después de 30 días

    Objetos con ambas etiquetas key1:value1 y key2:value2

    Se eliminan después de 50 días

Procedimiento

OSS console

  1. Inicie sesión en la consola de OSS.

  2. En el panel de navegación izquierdo, haga clic en Buckets. En la página que aparece, haga clic en el nombre del bucket de destino.

  3. En el panel de navegación izquierdo, elija Data Management > Lifecycle.

  4. En la página Lifecycle, haga clic en Create Rule.

    Nota

    El interruptor Enable Access Tracking de la página Lifecycle no es obligatorio para las reglas basadas únicamente en la última hora de modificación. Solo aplica a Lifecycle rules based on the last access time y genera cargos adicionales.

  5. En el panel Create Lifecycle Rule, configure la regla con ayuda de las siguientes tablas.

    • Si el control de versiones está deshabilitado para el bucket:

      Sección

      Parámetro

      Descripción

      Basic Settings

      Status

      Estado de la regla. Valores válidos: Start y Disable.

      • Si se habilita, OSS realiza la transición o elimina los objetos según la regla.

      • Si se deshabilita, la tarea de ciclo de vida se suspende.

      Applied To

      Alcance de la regla. Seleccione Object Prefix o Whole Bucket.

      Nota

      Si selecciona By Prefix, debe introducir el prefijo completo. Por ejemplo, para aplicar la regla a todos los objetos del directorio src/dir1/, establezca el prefijo como src/dir1/. Un prefijo dir1 no coincidiría con estos objetos como se espera. El prefijo no puede comenzar con una barra diagonal (/) ni con una barra diagonal inversa (\). Por ejemplo, /prod y /prod/ son prefijos no válidos. Utilice prod/ o prod en su lugar.

      Allow Overlapped Prefixes

      De forma predeterminada, OSS comprueba si los prefijos de las reglas de ciclo de vida se superponen. Por ejemplo, suponga que configura las dos reglas siguientes con prefijos superpuestos:

      • Regla 1

        Elimina todos los objetos con el prefijo dir1/ 180 días después de su última hora de modificación.

      • Regla 2

        Realiza la transición de todos los objetos con el prefijo dir1/dir2/ a la clase de almacenamiento Infrequent Access 30 días después de su última hora de modificación y los elimina 60 días después de dicha hora.

      Si no selecciona esta opción al configurar la regla 2, OSS detecta que los objetos del directorio dir1/dir2/ coinciden con dos reglas de eliminación. Como resultado, OSS rechaza la regla 2 y reporta un error Overlap for same action type Expiration..

      Si selecciona esta opción al configurar la regla 2, los objetos del directorio dir1/dir2/ pasan a la clase de almacenamiento Infrequent Access 30 días después de su última hora de modificación y se eliminan 60 días después de dicha hora. Los demás objetos del directorio dir1/ se eliminan 180 días después de su última hora de modificación.

      Nota

      Si configura varias reglas y una de ellas se aplica a todo el bucket, se considera un caso de prefijos superpuestos.

      Prefix

      Prefijo de objeto al que se aplica la regla.

      • Si establece el prefijo como img, la regla se aplica a todos los objetos cuyos nombres comienzan con img, como imgtest.png y img/example.jpg.

      • Si establece el prefijo como img/, la regla se aplica a todos los objetos cuyos nombres comienzan con img/, como img/example.jpg y img/test.jpg.

      El prefijo solo admite coincidencias exactas de cadenas y no admite variables dinámicas. Para más información, consulte Longest prefix match y Prefixes do not support dynamic variables en la descripción de la opción Allow Overlapped Prefixes.

      Tag

      Aplica la regla únicamente a los objetos que tienen la etiqueta especificada.

      • Si no establece un prefijo pero especifica una etiqueta con key=a y value=1, la regla se aplica a todos los objetos del bucket que tengan la etiqueta a=1.

      • Si establece el prefijo como img y especifica una etiqueta con key=a y value=1, la regla se aplica a todos los objetos del bucket cuyos nombres comienzan con img y que tienen la etiqueta a=1.

      Object tagging.

      NOT

      La opción NOT excluye de la regla de ciclo de vida los objetos que tienen un prefijo y una etiqueta específicos.

      Importante
      • Cuando habilite la opción NOT, debe especificar como mínimo un prefijo o una etiqueta.

      • La clave de una etiqueta especificada en la condición NOT no puede ser igual a una clave definida en la condición Tag.

      • No es posible configurar una política de caducidad de partes cuando la opción NOT está habilitada.

      Object Size

      Aplica la regla a los objetos dentro de un rango de tamaño específico.

      • Minimum Size: la regla de ciclo de vida se aplica a los objetos mayores que este valor. El valor debe ser mayor que 0 B y menor que 5 TB.

      • Maximum Size: la regla de ciclo de vida se aplica a los objetos menores que este valor. El valor debe ser mayor que 0 B y menor o igual que 5 TB.

      Importante

      Si especifica tanto un tamaño mínimo como un tamaño máximo de objeto en la misma regla de ciclo de vida:

      • Asegúrese de que el tamaño máximo sea mayor que el tamaño mínimo.

      • No se puede configurar una política de caducidad de partes.

      • No se puede configurar una política para limpiar marcadores de eliminación.

      Policy for Objects

      Object Lifecycle

      Seleccione una política de caducidad para los objetos. Elija By Days, By Date o Disabled. Si selecciona Disabled, la política de caducidad de objetos no surte efecto.

      Lifecycle-based Rules

      Configure reglas para realizar la transición de la clase de almacenamiento de los objetos o eliminar los objetos caducados. Seleccione Infrequent Access, Archive, Cold Archive, Deep Cold Archive o Data Deletion.

      Por ejemplo, si establece Object Lifecycle como By Date y especifica el 24 de septiembre de 2023, los objetos cuya última modificación sea anterior a esa fecha se eliminan automáticamente y no se pueden recuperar.

      Policy for Parts

      Part Lifecycle

      Configure una política de caducidad para las partes. Esta opción no está disponible si seleccionó Tag. Establezca la política de caducidad de partes como By Days o By Date, o bien seleccione Disabled. Si selecciona Disabled, la política de caducidad de partes no surte efecto.

      Importante

      Una regla de ciclo de vida debe incluir como mínimo una política de caducidad de objetos o una política de caducidad de partes.

      Rules for Parts

      Especifica cuándo caducan las partes según el número de días o la fecha seleccionada en la política de caducidad de partes. Las partes caducadas se eliminan automáticamente y no se pueden recuperar.

    • Si el control de versiones está habilitado para el bucket:

      Los parámetros de las secciones Basic Settings y Policy for Parts se configuran igual que en los buckets sin control de versiones. La siguiente tabla describe únicamente los parámetros que difieren.

      Importante

      Antes de configurar una regla de ciclo de vida, tenga en cuenta lo siguiente: si el control de versiones está habilitado en un bucket que sirve como destino de cross-region replication, los marcadores de eliminación sincronizados desde el bucket de origen convierten las versiones actuales de los objetos con el mismo nombre en el bucket de destino en versiones no actuales. Por lo tanto, configure con cuidado las reglas de limpieza para las versiones no actuales y evite así la eliminación accidental de datos.

      Sección

      Parámetro

      Descripción

      Policy for Current Versions

      Clean up expired object delete marker

      Si el control de versiones está habilitado, se añade la opción Clean Up Expired Object Delete Marker a la política de caducidad. Las demás opciones son iguales que en los buckets con el control de versiones deshabilitado.

      Si selecciona esta opción, OSS elimina el marcador de eliminación de un objeto caducado cuando es la única versión de dicho objeto. Si el objeto tiene varias versiones y la más reciente es un marcador de eliminación, OSS conserva ese marcador. Delete markers.

      Importante

      Esta regla no limpia los marcadores de eliminación si existen versiones no actuales. Se recomienda limpiar oportunamente los marcadores de eliminación y las versiones no actuales innecesarias. De lo contrario, una cantidad excesiva de marcadores de eliminación puede degradar el rendimiento de las operaciones de listado.

      Policy for Previous Versions

      Object Lifecycle

      Establezca la política de caducidad para las versiones no actuales. Seleccione By Days o Disabled. Si selecciona Disabled, la política de caducidad no surte efecto.

      Lifecycle-based Rules

      Especifique un número de días (N). Una versión no actual caduca N días después de convertirse en no actual, y la acción especificada se ejecuta al día siguiente de la caducidad. Por ejemplo, si establece el valor en 30, un objeto que se convierte en versión no actual el 1 de septiembre de 2023 pasa a la clase de almacenamiento especificada o se elimina el 1 de octubre de 2023.

      Importante

      Para determinar cuándo un objeto se convirtió en versión no actual, revise la última hora de modificación de la versión posterior de dicho objeto.

  6. Haga clic en OK.

    Una vez guardada la regla de ciclo de vida, podrá consultarla en la lista de reglas.

SDK

A continuación se muestran ejemplos que configuran reglas de ciclo de vida mediante los SDK más comunes. Para ver todos los SDK compatibles, consulte SDK overview.

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.common.utils.DateUtil;
import com.aliyun.oss.model.LifecycleRule;
import com.aliyun.oss.model.SetBucketLifecycleRequest;
import com.aliyun.oss.model.StorageClass;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo {

    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";
        // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance. 
        // Call the shutdown method to release resources when the OSSClient is no longer in use.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Create a request by using SetBucketLifecycleRequest. 
            SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);

            // Specify the ID of the lifecycle rule. 
            String ruleId0 = "rule0";
            // Specify the prefix that you want the lifecycle rule to match. 
            String matchPrefix0 = "A0/";
            // Specify the tag that you want the lifecycle rule to match. 
            Map<String, String> matchTags0 = new HashMap<String, String>();
            // Specify the key and value of the tag. In the example, the key is set to owner and the value is set to John. 
            matchTags0.put("owner", "John");

            String ruleId1 = "rule1";
            String matchPrefix1 = "A1/";
            Map<String, String> matchTags1 = new HashMap<String, String>();
            matchTags1.put("type", "document");

            String ruleId2 = "rule2";
            String matchPrefix2 = "A2/";

            String ruleId3 = "rule3";
            String matchPrefix3 = "A3/";

            String ruleId4 = "rule4";
            String matchPrefix4 = "A4/";

            String ruleId5 = "rule5";
            String matchPrefix5 = "A5/";

            String ruleId6 = "rule6";
            String matchPrefix6 = "A6/";

            // Set the expiration time to three days after the last modified time. 
            LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
            rule.setTags(matchTags0);
            request.AddLifecycleRule(rule);

            // Specify that objects that are created before the specified date expire. 
            rule = new LifecycleRule(ruleId1, matchPrefix1, LifecycleRule.RuleStatus.Enabled);
            rule.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setTags(matchTags1);
            request.AddLifecycleRule(rule);

            // Specify that parts expire three days after they are last modified. 
            rule = new LifecycleRule(ruleId2, matchPrefix2, LifecycleRule.RuleStatus.Enabled);
            LifecycleRule.AbortMultipartUpload abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setExpirationDays(3);
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // Specify that parts that are created before the specific date expire. 
            rule = new LifecycleRule(ruleId3, matchPrefix3, LifecycleRule.RuleStatus.Enabled);
            abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // Specify that the storage classes of objects are changed to IA 10 days after they are last modified, and to Archive 30 days after they are last modified. 
            rule = new LifecycleRule(ruleId4, matchPrefix4, LifecycleRule.RuleStatus.Enabled);
            List<LifecycleRule.StorageTransition> storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.IA);
            storageTransition.setExpirationDays(10);
            storageTransitions.add(storageTransition);
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(30);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            request.AddLifecycleRule(rule);

            // Specify that the storage classes of objects that are last modified before October 12, 2022 are changed to Archive. 
            rule = new LifecycleRule(ruleId5, matchPrefix5, LifecycleRule.RuleStatus.Enabled);
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();

            storageTransition.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));

            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            request.AddLifecycleRule(rule);

            // Specify that rule6 is configured for versioning-enabled buckets. 
            rule = new LifecycleRule(ruleId6, matchPrefix6, LifecycleRule.RuleStatus.Enabled);
            // Specify that the storage classes of objects are changed to Archive 365 days after the objects are last modified. 
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(365);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            // Configure the lifecycle rule to automatically delete expired delete markers. 
            rule.setExpiredDeleteMarker(true);
            // Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified. 
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(10).withStrorageClass(StorageClass.IA);
            // Specify that the storage classes of the previous versions of objects are changed to Archive 20 days after the objects are last modified. 
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition2 =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(20).withStrorageClass(StorageClass.Archive);
            // Specify that the previous versions of objects are deleted 30 days after the objects are last modified. 
            LifecycleRule.NoncurrentVersionExpiration noncurrentVersionExpiration = new LifecycleRule.NoncurrentVersionExpiration().withNoncurrentDays(30);
            List<LifecycleRule.NoncurrentVersionStorageTransition> noncurrentVersionStorageTransitions = new ArrayList<LifecycleRule.NoncurrentVersionStorageTransition>();
            noncurrentVersionStorageTransitions.add(noncurrentVersionStorageTransition2);
            rule.setStorageTransition(storageTransitions);
            rule.setNoncurrentVersionExpiration(noncurrentVersionExpiration);
            rule.setNoncurrentVersionStorageTransitions(noncurrentVersionStorageTransitions);
            request.AddLifecycleRule(rule);

            // Initiate a request to configure lifecycle rules. 
            ossClient.setBucketLifecycle(request);

            // Query the lifecycle rules that are configured for the bucket. 
            List<LifecycleRule> listRules = ossClient.getBucketLifecycle(bucketName);
            for(LifecycleRule rules : listRules){
                System.out.println("ruleId="+rules.getId()+", matchPrefix="+rules.getPrefix());
            }
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

PHP

<?php

// Include the autoload file to load dependencies.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;
use AlibabaCloud\Oss\V2\Models\LifecycleConfiguration;

// Describe command-line parameters.
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located', 'required' => True], // (Required) Specify the region in which the bucket is located.
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS', 'required' => False], // (Optional) Specify the OSS endpoint.
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // (Required) Specify the name of the bucket.
];

// Generate a long options list to parse the command-line parameters.
$longopts = \array_map(function ($key) {
    return "$key:"; // Add a colon (:) to the end of each parameter to indicate that a value is required.
}, array_keys($optsdesc));

// Parse the command-line parameters.
$options = getopt("", $longopts); 

// Check whether the required parameters are missing.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // Display the required but missing parameters.
        exit(1); 
    }
}

// Obtain the values of the command-line parameters and assign the values to variables.
$region = $options["region"]; // The region in which the bucket is located.
$bucket = $options["bucket"]; // The name of the bucket.

// Load the AccessKey ID and AccessKey secret from environment variables.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Use the default configuration of the SDK.
$cfg = Oss\Config::loadDefault();

// Specify the credential provider.
$cfg->setCredentialsProvider($credentialsProvider);

// Specify the region.
$cfg->setRegion($region);

// If an endpoint is provided, specify the endpoint.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// Create an OSS client instance.
$client = new Oss\Client($cfg);

// Define a lifecycle rule that moves objects whose names are prefixed with "log/" to IA 30 days after they were last modified.
$lifecycleRule = new Oss\Models\LifecycleRule(
    prefix: 'log/', // The prefix of object names.
    transitions: array(
        new Oss\Models\LifecycleRuleTransition(
            days: 30, // Specify the days.
            storageClass: 'IA' // Change to IA.
        )
    ),
    id: 'rule', // The rule ID.
    status: 'Enabled' // Enable the rule.
);

// Create a lifecycle configuration and add lifecycle rules to the configuration.
$lifecycleConfiguration = new LifecycleConfiguration(
    rules: array($lifecycleRule)
);

// Create a request to set a lifecycle configuration and pass the lifecycle configuration.
$request = new Oss\Models\PutBucketLifecycleRequest(
    bucket: $bucket,
    lifecycleConfiguration: $lifecycleConfiguration
);

// Call the putBucketLifecycle method to configure the lifecycle rules.
$result = $client->putBucketLifecycle($request);

// Display the result.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // The HTTP response status code.
    'request id:' . $result->requestId . PHP_EOL // The request ID.
);

Node.js

const OSS = require('ali-oss')

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of the bucket. 
  bucket: 'yourbucketname'
});

async function putBucketLifecycle(lifecycle) {
  try {
    const result = await client.putBucketLifecycle('yourbucketname', [
    lifecycle
  ]);
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

const lifecycle1 = {
  id: 'rule1',
  status: 'Enabled',
  prefix: 'foo/',
  expiration: {
    // Specify that the current versions of objects expire three days after the objects are last modified. 
    days: 3 
  }
}
putBucketLifecycle(lifecycle1)

const lifecycle2 = {
  id: 'rule2',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // Specify that the objects that are created before the specified date expire. 
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle2)

const lifecycle3 = {
  id: 'rule3',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // Specify that parts expire in three days. 
    days: 3 
  },
}
putBucketLifecycle(lifecycle3)

const lifecycle4 = {
  id: 'rule4',
  status: 'Enabled',
  prefix: 'foo/', 
  abortMultipartUpload: {
    // Specify that parts created before the specified date expire. 
    createdBeforeDate: '2020-02-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle4)

const lifecycle5 = {
  id: 'rule5',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    // Specify that the storage classes of the current versions of objects are changed to Archive 20 days after the objects are last modified. 
    days: 20,
    storageClass: 'Archive'
  },
  expiration: {
    // Specify that the current versions of objects expire 21 days after the objects are last modified. 
    days: 21 
  },
}
putBucketLifecycle(lifecycle5)

const lifecycle6 = {
  id: 'rule6',
  status: 'Enabled',
  prefix: 'foo/', 
  transition: {
    //Specify that the storage classes of the objects that are created before the specified date are changed to Archive. 
    createdBeforeDate: '2023-02-19T00:00:00.000Z', 
    storageClass: 'Archive'
  },
  expiration: {
    // Specify that objects created before the specified date are deleted. 
    createdBeforeDate: '2023-01-18T00:00:00.000Z' 
  },
}
putBucketLifecycle(lifecycle6)

const lifecycle7 = {
  id: 'rule7',
  status: 'Enabled',
  prefix: 'foo/', 
  expiration: {
    // Specify that delete markers are automatically removed when they expire. 
    expiredObjectDeleteMarker: true 
  }
}
putBucketLifecycle(lifecycle7)

const lifecycle8 = {
  id: 'rule8',
  status: 'Enabled',
  prefix: 'foo/', 
  // Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified. 
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  }
}
putBucketLifecycle(lifecycle8)

const lifecycle9 = {
  id: 'rule9',
  status: 'Enabled',
  prefix: 'foo/', 
  // Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified. 
  noncurrentVersionTransition: {
    noncurrentDays: '10',
    storageClass: 'IA'
  },
  // Specify the tags for objects that you want to match the rules. 
  tag: [{
    key: 'key1',
    value: 'value1'
  },
   {
     key: 'key2',
     value: 'value2'
   }]
}
putBucketLifecycle(lifecycle9)

Python

import argparse
import alibabacloud_oss_v2 as oss

# Create a command-line argument parser to receive user-entered parameters.
parser = argparse.ArgumentParser(description="put bucket lifecycle sample")

# Add the --region command-line argument, which specifies the region where the bucket is located. This argument is required.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)

# Add the --bucket command-line argument, which specifies the name of the bucket. This argument is required.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)

# Add the --endpoint command-line argument, which specifies the domain name that other services can use to access OSS. This argument is optional.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
  # Parse command-line arguments.
  args = parser.parse_args()

  # Load credentials (AccessKey ID and AccessKey secret) from environment variables.
  credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

  # Load the default configurations of the SDK.
  cfg = oss.config.load_default()

  # Set the credentials provider.
  cfg.credentials_provider = credentials_provider

  # Set the region where the bucket is located.
  cfg.region = args.region

  # If a custom endpoint is provided by the user, set it in the configuration.
  if args.endpoint is not None:
    cfg.endpoint = args.endpoint

    # Initialize the OSS client using the configuration object.
  client = oss.Client(cfg)

  result = client.put_bucket_lifecycle(oss.PutBucketLifecycleRequest(
    bucket=args.bucket,
    lifecycle_configuration=oss.LifecycleConfiguration(
      rules=[oss.LifecycleRule(
        # Specify lifecycle rule rule1. In this rule, objects that have the prefix foo/ and the tag k1:v1 are converted to the Infrequent Access (IA) storage class 30 days after they are last modified.
        id='rule1',
        status='Enabled',
        prefix='foo/',
        transitions=[oss.LifecycleRuleTransition(
          days=30,
          storage_class=oss.StorageClassType.IA,
          is_access_time=False, # Set to false, which indicates that the policy is based on the last modified time.
        )],
        tags=[oss.Tag(
          key='k1',
          value='v1',
        )],
      ), oss.LifecycleRule(
        # Specify lifecycle rule rule2. In this rule, for objects that have the prefix dir/, delete markers are automatically deleted if the objects are in a versioning-enabled bucket and have only delete markers. Non-current versions of objects expire and are deleted after 30 days. Non-current versions of objects are converted to the IA storage class after 10 days.
        id='rule2',
        status='Enabled',
        prefix='dir/',
        expiration=oss.LifecycleRuleExpiration(
          expired_object_delete_marker=True
        ),
        noncurrent_version_expiration=oss.NoncurrentVersionExpiration(
          noncurrent_days=30,
        ),
        noncurrent_version_transitions=[oss.NoncurrentVersionTransition(
          noncurrent_days=10,
          storage_class=oss.StorageClassType.IA,
          is_access_time=False,
        )],
      )]
    ),
  ))

  # Print the status code and request ID of the operation.
  print(f'status code: {result.status_code}, '  # The HTTP status code, which indicates whether the request is successful.
        f'request id: {result.request_id}')    # The request ID, which is used to track request logs and for debugging.

if __name__ == "__main__":
  # The program entry point that calls the main function to execute the logic.
  main()

C#

using Aliyun.OSS;
using Aliyun.OSS.Common;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the bucket name. Example: examplebucket. 
var bucketName = "examplebucket";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";

// Create a ClientConfiguration instance and modify the default parameters based on your requirements.
var conf = new ClientConfiguration();

// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;

// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
    // Create the first lifecycle rule. 
    LifecycleRule lcr1 = new LifecycleRule()
    {
        ID = "delete obsoleted files",
        Prefix = "obsoleted/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 3,
        Tags = new Tag[1]
    };
    // Specify a tag for the rule. 
    var tag1 = new Tag
    {
        Key = "project",
        Value = "projectone"
    };

    lcr1.Tags[0] = tag1;

    // Create the second lifecycle rule. 
    LifecycleRule lcr2 = new LifecycleRule()
    {
        ID = "delete temporary files",
        Prefix = "temporary/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 20,
        Tags = new Tag[1]         
    };
    // Specify a tag for the rule. 
    var tag2 = new Tag
    {
        Key = "user",
        Value = "jsmith"
    };
    lcr2.Tags[0] = tag2;

    // Specify that parts expire 30 days after they are last modified. 
    lcr2.AbortMultipartUpload = new LifecycleRule.LifeCycleExpiration()
    {
        Days = 30
    };

    LifecycleRule lcr3 = new LifecycleRule();
    lcr3.ID = "only NoncurrentVersionTransition";
    lcr3.Prefix = "test1";
    lcr3.Status = RuleStatus.Enabled;
    lcr3.NoncurrentVersionTransitions = new LifecycleRule.LifeCycleNoncurrentVersionTransition[2]
    {
        // Specify that the storage classes of the previous versions of objects are converted to IA 90 days after they are last modified. 
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.IA,
            NoncurrentDays = 90
        },
        // Specify that the storage classes of the previous versions of objects are converted to Archive 180 days after they are last modified. 
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.Archive,
            NoncurrentDays = 180
        }
    };
    setBucketLifecycleRequest.AddLifecycleRule(lcr1);
    setBucketLifecycleRequest.AddLifecycleRule(lcr2);
    setBucketLifecycleRequest.AddLifecycleRule(lcr3);

    // Configure lifecycle rules. 
    client.SetBucketLifecycle(setBucketLifecycleRequest);
    Console.WriteLine("Set bucket:{0} Lifecycle succeeded ", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}

Android

PutBucketLifecycleRequest request = new PutBucketLifecycleRequest();
request.setBucketName("examplebucket");

BucketLifecycleRule rule1 = new BucketLifecycleRule();
// Set the rule ID and file prefix.
rule1.setIdentifier("1");
rule1.setPrefix("A");
// Specify whether to execute the lifecycle rule. If the value is true, OSS periodically executes the rule. If the value is false, OSS ignores the rule.
rule1.setStatus(true);
// Expire objects 200 days after the last modified time.
rule1.setDays("200");
// Transition objects to the Archive storage class after 30 days.
rule1.setArchiveDays("30");
// Expire incomplete multipart uploads after 3 days.
rule1.setMultipartDays("3");
// Transition objects to the Infrequent Access (IA) storage class after 15 days.
rule1.setIADays("15");

BucketLifecycleRule rule2 = new BucketLifecycleRule();
rule2.setIdentifier("2");
rule2.setPrefix("B");
rule2.setStatus(true);
rule2.setDays("300");
rule2.setArchiveDays("30");
rule2.setMultipartDays("3");
rule2.setIADays("15");

ArrayList<BucketLifecycleRule> lifecycleRules = new ArrayList<BucketLifecycleRule>();
lifecycleRules.add(rule1);
lifecycleRules.add(rule2);
request.setLifecycleRules(lifecycleRules);
OSSAsyncTask task = oss.asyncPutBucketLifecycle(request, new OSSCompletedCallback<PutBucketLifecycleRequest, PutBucketLifecycleResult>() {
    @Override
    public void onSuccess(PutBucketLifecycleRequest request, PutBucketLifecycleResult result) {
        OSSLog.logInfo("code::"+result.getStatusCode());

    }

    @Override
    public void onFailure(PutBucketLifecycleRequest request, ClientException clientException, ServiceException serviceException) {
        OSSLog.logError("error: "+serviceException.getRawMessage());

    }
});

task.waitUntilFinished();

C++

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize the OSS account information. */
    
    /* Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region to cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Specify the bucket name. For example, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Initialize network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run this code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    SetBucketLifecycleRequest request(BucketName);
    std::string date("2022-10-12T00:00:00.000Z");

    /* Set tags. */
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));

    /* Specify a lifecycle rule. */
    auto rule1 = LifecycleRule();
    rule1.setID("rule1");
    rule1.setPrefix("test1/");
    rule1.setStatus(RuleStatus::Enabled);
    rule1.setExpiration(3);
    rule1.setTags(tagging.Tags());

    /* Specify the expiration time. */
    auto rule2 = LifecycleRule();
    rule2.setID("rule2");
    rule2.setPrefix("test2/");
    rule2.setStatus(RuleStatus::Disabled);
    rule2.setExpiration(date);

    /* rule3 is a lifecycle rule for a bucket with versioning enabled. */
    auto rule3 = LifecycleRule();
    rule3.setID("rule3");
    rule3.setPrefix("test3/");
    rule3.setStatus(RuleStatus::Disabled);

    /* Transition objects to the Archive storage class 365 days after they are last modified. */  
    auto transition = LifeCycleTransition();  
    transition.Expiration().setDays(365);
    transition.setStorageClass(StorageClass::Archive);
    rule3.addTransition(transition);

    /* Automatically remove expired delete markers. */
    rule3.setExpiredObjectDeleteMarker(true);

    /* Transition noncurrent versions of objects to the Infrequent Access storage class 10 days after they become noncurrent. */
    auto transition1 = LifeCycleTransition();  
    transition1.Expiration().setDays(10);
    transition1.setStorageClass(StorageClass::IA);

    /* Transition noncurrent versions of objects to the Archive storage class 20 days after they become noncurrent. */
    auto transition2 = LifeCycleTransition();  
    transition2.Expiration().setDays(20);
    transition2.setStorageClass(StorageClass::Archive);

    /* Delete objects 30 days after they become noncurrent versions. */
    auto expiration  = LifeCycleExpiration(30);
    rule3.setNoncurrentVersionExpiration(expiration);

    LifeCycleTransitionList noncurrentVersionStorageTransitions{transition1, transition2};
    rule3.setNoncurrentVersionTransitionList(noncurrentVersionStorageTransitions);

    /* Set the lifecycle rules. */
    LifecycleRuleList list{rule1, rule2, rule3};
    request.setLifecycleRules(list);
    auto outcome = client.SetBucketLifecycle(request);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "SetBucketLifecycle fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Release network resources. */
    ShutdownSdk();
    return 0;
}

C

#include "oss_api.h"
#include "aos_http_io.h"
/* Replace yourEndpoint with the Endpoint of the region where your bucket is located. For example, for the China (Hangzhou) region, the Endpoint is https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Replace with your bucket name. For example, examplebucket. */
const char *bucket_name = "examplebucket";
/* Replace yourRegion with the ID of the region where your bucket is located. For example, for the China (Hangzhou) region, the region ID is cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Initialize an aos_string_t variable with a char* string. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Obtain access credentials from environment variables. Before you run this sample code, make sure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // You must also configure the following two parameters.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Specify whether to use a CNAME to access OSS. A value of 0 means that a CNAME is not used. */
    options->config->is_cname = 0;
    /* Set network parameters, such as the timeout period. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Call the aos_http_io_initialize method at the program entry point to initialize global resources, such as the network and memory. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* The memory pool (pool) for memory management is equivalent to apr_pool_t. The implementation is in the apr library. */
    aos_pool_t *pool;
    /* Create a memory pool. The second parameter is NULL, which indicates that the new memory pool does not inherit from another memory pool. */
    aos_pool_create(&pool, NULL);
    /* Create and initialize options. This parameter includes global configurations, such as endpoint, access_key_id, access_key_secret, is_cname, and curl. */
    oss_request_options_t *oss_client_options;
    /* Allocate memory for options in the memory pool. */
    oss_client_options = oss_request_options_create(pool);
    /* Initialize the client options, oss_client_options. */
    init_options(oss_client_options);
    /* Initialize parameters. */
    aos_string_t bucket;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_list_t lifecycle_rule_list;   
    aos_str_set(&bucket, bucket_name);
    aos_list_init(&lifecycle_rule_list);
    /* Specify the expiration in days. */
    oss_lifecycle_rule_content_t *rule_content_days = oss_create_lifecycle_rule_content(pool);
    aos_str_set(&rule_content_days->id, "rule-1");
    /* Set the object prefix. */
    aos_str_set(&rule_content_days->prefix, "dir1");
    aos_str_set(&rule_content_days->status, "Enabled");
    rule_content_days->days = 3;
    aos_list_add_tail(&rule_content_days->node, &lifecycle_rule_list);
    /* Specify the expiration date. */
    oss_lifecycle_rule_content_t *rule_content_date = oss_create_lifecycle_rule_content(pool);
    aos_str_set(&rule_content_date->id, "rule-2");
    aos_str_set(&rule_content_date->prefix, "dir2");
    aos_str_set(&rule_content_date->status, "Enabled");
    /* The expiration date must be in UTC format.
    aos_str_set(&rule_content_date->date, "2023-10-11T00:00:00.000Z");
    aos_list_add_tail(&rule_content_date->node, &lifecycle_rule_list);
    /* Set the lifecycle rule. */
    resp_status = oss_put_bucket_lifecycle(oss_client_options, &bucket, &lifecycle_rule_list, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("put bucket lifecycle succeeded\n");
    } else {
        printf("put bucket lifecycle failed, code:%d, error_code:%s, error_msg:%s, request_id:%s\n",
            resp_status->code, resp_status->error_code, resp_status->error_msg, resp_status->req_id);
    }
    /* Release the memory pool. This releases the memory allocated to resources during the request. */
    aos_pool_destroy(pool);
    /* Release the previously allocated global resources. */
    aos_http_io_deinitialize();
    return 0;
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # The China (Hangzhou) Endpoint is used as an example. Replace it with the actual Endpoint.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Specify the bucket name.
bucket = client.get_bucket('examplebucket')
# Set the lifecycle rules.
bucket.lifecycle = [
  Aliyun::OSS::LifeCycleRule.new(
    :id => 'rule1', :enable => true, :prefix => 'foo/', :expiry => 3),
  Aliyun::OSS::LifeCycleRule.new(
    :id => 'rule2', :enable => false, :prefix => 'bar/', :expiry => Date.new(2016, 1, 1))
]

Go

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Define global variables.
var (
	region     string // The region where the bucket is located.
	bucketName string // The name of the bucket.
)

// The init function initializes command-line arguments.
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// Parse command-line arguments.
	flag.Parse()

	// Check if the bucket name is provided.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// Check if the region is provided.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// Load the default configuration, and set the credentials provider and region.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Create an OSS client.
	client := oss.NewClient(cfg)

	// Create a request to set lifecycle rules for the bucket.
	request := &oss.PutBucketLifecycleRequest{
		Bucket: oss.Ptr(bucketName), // The name of the bucket.
		LifecycleConfiguration: &oss.LifecycleConfiguration{
			Rules: []oss.LifecycleRule{
				{
					// Specify lifecycle rule "rule1".
					// This rule transitions objects with the prefix "foo/" and the tag {k1: v1}
					// to the Infrequent Access (IA) storage class 30 days after they are last modified.
					Status: oss.Ptr("Enabled"),
					ID:     oss.Ptr("rule1"),
					Prefix: oss.Ptr("foo/"),
					Transitions: []oss.LifecycleRuleTransition{
						{
							Days:         oss.Ptr(int32(30)),
							StorageClass: oss.StorageClassIA,
							IsAccessTime: oss.Ptr(false), // Set to false for a rule based on last modified time.
						},
					},
					Tags: []oss.Tag{
						{
							Key:   oss.Ptr("k1"),
							Value: oss.Ptr("v1"),
						},
					},
				},
				{
					// Specify lifecycle rule "rule2". This rule applies to objects with the prefix "dir/".
					// It expires current versions 10 days after they are last modified, deletes non-current versions after 30 days,
					// and transitions non-current versions to the IA storage class 10 days after they become non-current.
					ID:     oss.Ptr("rule2"),
					Prefix: oss.Ptr("dir/"),
					Status: oss.Ptr("Enabled"),
					Expiration: &oss.LifecycleRuleExpiration{
						Days: oss.Ptr(int32(10)),
					},
					NoncurrentVersionExpiration: &oss.NoncurrentVersionExpiration{
						NoncurrentDays: oss.Ptr(int32(30)),
					},
					NoncurrentVersionTransitions: []oss.NoncurrentVersionTransition{{
						NoncurrentDays: oss.Ptr(int32(10)),
						StorageClass:   oss.StorageClassIA,
						IsAccessTime:   oss.Ptr(false), // Set to false for a rule based on last modified time.
					}},
				},
			},
		},
	}

	// Set the lifecycle rules for the bucket.
	result, err := client.PutBucketLifecycle(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket lifecycle %v", err)
	}

	// Print the result of setting the lifecycle rules.
	log.Printf("put bucket lifecycle result:%#v\n", result)
}

ossutil

Configure las reglas de ciclo de vida con ossutil (Install ossutil).

A continuación se muestra un ejemplo que configura una regla de ciclo de vida para el bucket examplebucket.

ossutil api put-bucket-lifecycle --bucket examplebucket --lifecycle-configuration "{\"Rule\":{\"ID\":\"rule1\",\"Prefix\":\"tmp/\",\"Status\":\"Enabled\",\"Expiration\":{\"Days\":\"10\"},\"Transition\":{\"Days\":\"5\",\"StorageClass\":\"IA\"},\"AbortMultipartUpload\":{\"Days\":\"10\"}}}"

put-bucket-lifecycle.

API relacionada

Para configurar reglas de ciclo de vida mediante la API REST (requiere cálculo de firma), utilice PutBucketLifecycle.

Preguntas frecuentes

Cómo eliminar rápidamente todos los objetos de un bucket mediante políticas de ciclo de vida

Buckets sin control de versiones

  1. Vaya a la página Buckets en la consola de OSS y haga clic en el nombre del bucket.

  2. En el árbol de navegación izquierdo, elija Content Security > Versioning y compruebe si el control de versiones está habilitado.

    未开启版本控制

  3. En el árbol de navegación izquierdo, elija Data Management > Lifecycle. Configure una regla de ciclo de vida para eliminar automáticamente todos los objetos del bucket un día después de su última modificación y para borrar las partes generadas hace más de un día.

    screenshot_2025-07-01_17-59-32

Buckets con control de versiones

Puede configurar una regla de ciclo de vida para eliminar automáticamente todos los objetos y las partes de tareas de carga multiparte incompletas en buckets sin control de versiones.

  1. Vaya a la página Buckets en la consola de OSS y haga clic en el nombre del bucket.

  2. En el árbol de navegación izquierdo, elija Content Security > Versioning y compruebe si el control de versiones está habilitado.

    未开启版本控制

  3. En el árbol de navegación izquierdo, elija Data Management > Lifecycle. Configure una regla de ciclo de vida para eliminar automáticamente todos los objetos del bucket un día después de su última modificación y para borrar las partes generadas hace más de un día.

    screenshot_2025-07-01_17-59-32

Error: Set bucket lifecycle error, InvalidArgument, Days in the Transition action for StorageClass Archive must be more than the Transition action for StorageClass IA

Los periodos de transición tienen un orden incorrecto. Deben seguir esta secuencia: Infrequent Access < Archive < Cold Archive < Deep Cold Archive.

Reglas de ciclo de vida y objetos existentes

Las reglas de ciclo de vida se aplican tanto a los objetos existentes como a los recién cargados. Por ejemplo, si configura una regla el 7 de octubre para eliminar objetos después de 30 días, un objeto cargado el 5 de octubre se elimina el 5 de noviembre, mientras que uno cargado el 8 de octubre se elimina el 8 de noviembre.

Modificar reglas de ciclo de vida

Para modificar una regla de ciclo de vida específica (por ejemplo, Rule1) cuando existen varias reglas:

  1. Llame a la operación GetBucketLifecycle para obtener todas las reglas de ciclo de vida actuales del bucket.

  2. Modifique la configuración de Rule1.

  3. Llame a la operación PutBucketLifecycle para reemplazar la configuración existente. Para ello, envíe tanto la Rule1 modificada como la Rule2 original.

Eliminar reglas de ciclo de vida

La operación DeleteBucketLifecycle elimina todas las reglas de ciclo de vida de un bucket. Para quitar una sola regla (por ejemplo, Rule1) y conservar las demás (como Rule2), debe reemplazar toda la configuración:

  1. Llame a la operación GetBucketLifecycle para obtener todas las reglas de ciclo de vida actuales del bucket.

  2. Elimine Rule1.

  3. Llame a la operación PutBucketLifecycle para reemplazar la configuración existente enviando únicamente Rule2.

Registros de las operaciones de ciclo de vida

Sí. Todas las transiciones y expiraciones exitosas activadas por reglas de ciclo de vida se registran. Los campos de registro relevantes son:

  • Operation

    • CommitTransition: indica una transición de clase de almacenamiento.

    • ExpireObject: indica la eliminación de un objeto caducado.

  • Sync Request

    lifecycle: la transición o eliminación fue activada por una regla de ciclo de vida.

Log fields describe el esquema completo. Billing rules detalla los costos de consulta de registros.

Limpiar marcadores de eliminación y versiones actuales

Sí. Una sola regla de ciclo de vida puede hacer caducar las versiones actuales de los objetos y limpiar los marcadores de eliminación caducados.

Transición de Infrequent Access a Standard

No. Utilice uno de los siguientes métodos para pasar objetos de Infrequent Access a Standard:

  • Mediante la operación CopyObject

    Llame a CopyObject para cambiar un objeto de Infrequent Access a Standard.

  • Con la herramienta ossutil

    Ejecute el comando set-meta de ossutil con la opción X-Oss-Storage-Class para pasar objetos de Infrequent Access a Standard. Set or update metadata.

¿OSS almacena los objetos cargados como Standard o la regla de ciclo de vida los pasa directamente a una clase de almacenamiento de menor costo?

De forma predeterminada, los objetos se almacenan en la clase Standard al momento de cargarlos, sin importar si hay una regla de ciclo de vida configurada. La regla de ciclo de vida se ejecuta de manera asíncrona en segundo plano. Cada día a las 08:00:00 (UTC+8), pasa a la clase de almacenamiento destino los objetos que cumplen las condiciones especificadas. Esta regla no surte efecto durante la carga.

Si prefiere definir la clase de almacenamiento al cargar el archivo, establezca el encabezado de solicitud x-oss-storage-class. Por ejemplo, para cargar un objeto directamente con almacenamiento Infrequent Access (IA) mediante ossutil:

ossutil cp test.txt oss://bucket/ --meta x-oss-storage-class:IA

Documentos relacionados