Todos os produtos
Search
Central de documentação

Object Storage Service:Lifecycle rules based on last modification time

Última atualização: Sep 17, 2026

Regras de ciclo de vida baseadas na última modificação transferem objetos automaticamente para classes de armazenamento mais frias ou os excluem, reduzindo custos de armazenamento.

Casos de uso

  • Um provedor de saúde faz upload de prontuários médicos no OSS. Os registros são acessados ocasionalmente nos primeiros seis meses e raramente depois disso. Uma regra de ciclo de vida os transfere para Archive após 180 dias.

  • Uma empresa faz upload de gravações de hotline no OSS. As gravações são usadas ativamente por 2 meses, acessadas ocasionalmente até 6 meses e deixam de ser necessárias após 2 anos. Uma regra de ciclo de vida as transfere para Infrequent Access após 60 dias, para Archive após 180 dias e as exclui após 730 dias.

  • Para excluir todos os objetos de um bucket, configure uma regra de ciclo de vida que se aplique a todo o bucket e exclua os objetos após um dia.

Essas transições utilizam storage classes do OSS.

Limitações

Matching conditions

As regras de ciclo de vida suportam correspondência apenas com base em prefixos e tags. Não há suporte para correspondência por curinga, sufixo ou expressão regular.

Part expiration limitations

Não é possível configurar duas ou mais regras de ciclo de vida que contenham uma política de ciclo de vida de partes para objetos cujos nomes tenham prefixos sobrepostos. Exemplos:

  • Exemplo 1

    Se você configurar uma regra de ciclo de vida que contenha uma política de partes para um bucket, não poderá configurar outra regra de ciclo de vida com política de partes para nenhum objeto desse bucket.

  • Exemplo 2

    Se você configurar uma regra de ciclo de vida com política de partes para objetos cujos nomes contenham o prefixo dir1 em um bucket, não poderá configurar outra regra de ciclo de vida com política de partes para objetos cujos nomes contenham prefixos sobrepostos, como dir1/dir2.

Storage class transition limitations

  • Regras de ciclo de vida não podem transferir objetos Appendable para as classes de armazenamento Cold Archive ou Deep Cold Archive. Para transferir um objeto Appendable, converta-o primeiro em um objeto Normal chamando a operação SealAppendObject; só então uma regra de ciclo de vida poderá ser aplicada.

  • Não é possível usar regras de ciclo de vida para transferir links simbólicos para as classes de armazenamento Infrequent Access (IA), Archive, Cold Archive ou Deep Cold Archive.

Considerações

Rule limit

Um bucket suporta até 1.000 regras de ciclo de vida. Uma única regra pode incluir políticas baseadas tanto na última modificação quanto no último acesso.

Overwrite semantics

A operação PutBucketLifecycle substitui as configurações existentes de uma regra de ciclo de vida de um bucket. Por exemplo, se uma regra de ciclo de vida chamada Rule1 estiver configurada para um bucket e você quiser configurar outra regra chamada Rule2, execute as seguintes operações:

  1. Recupere a Rule1.

  2. Combine a Rule1 e a Rule2.

  3. Atualize a configuração com as regras combinadas (Rule1+Rule2).

Effective time

Após a criação de uma regra de ciclo de vida, o status na lista de regras do console exibe Starting. Isso é normal e o status não muda para Enabled. A execução das regras de ciclo de vida não fornece contagens de exclusão, logs ou notificações. Verifique se os objetos alvo ainda existem para confirmar se uma regra foi executada.

O OSS carrega uma regra de ciclo de vida dentro de 24 horas após sua criação. Depois que a regra é carregada, o OSS a executa diariamente às 08:00:00 (UTC+8).

Para regras baseadas em dias, garanta pelo menos 24 horas entre a última modificação do objeto e o início da execução da regra (08:00 UTC+8). Por exemplo, se uma regra excluir objetos um dia após o upload, o OSS processará um objeto enviado em 20 de julho de 2020 da seguinte forma:

  • Objetos enviados antes das 08:00:00 (UTC+8) em 20 de julho de 2020 são excluídas entre 08:00:00 (UTC+8) de 21 de julho de 2020 e 08:00:00 (UTC+8) de 22 de julho de 2020.

  • Objetos enviados após as 08:00:00 (UTC+8) em 20 de julho de 2020 são excluídos entre 08:00:00 (UTC+8) de 22 de julho de 2020 e 08:00:00 (UTC+8) de 23 de julho de 2020.

Atualizar uma regra de ciclo de vida pode interromper a tarefa de ciclo de vida do dia atual. Evite atualizações frequentes.

Verify before applying to production

Antes de aplicar uma regra de ciclo de vida a um bucket de produção, configure e verifique a regra em um bucket de teste. Após confirmar que a regra funciona conforme o esperado, aplique-a ao bucket de produção. Configurar uma regra de ciclo de vida diretamente em um bucket de produção sem verificação pode resultar em exclusão não intencional de dados.

Back up data before configuration

Antes de configurar uma regra de ciclo de vida, faça backup dos dados importantes. Use replicação na mesma região (SRR) ou replicação entre regiões (CRR) para fazer backup dos seus dados.

Execution completion time

  • Após a entrada em vigor de uma regra, operações de ciclo de vida como exclusão de objetos, transição de classe de armazenamento e expiração de partes de upload multipart são normalmente concluídas em até 24 horas para até 1 bilhão de objetos nas regiões China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen) e Singapore. Em outras regiões, essas operações são geralmente concluídas em até 24 horas para até 100 milhões de objetos.

  • A execução pode levar mais de 24 horas e, em alguns casos, vários dias ou semanas, se houver muitos objetos para verificar, muitos objetos aos quais a regra de ciclo de vida se aplica, muitas tags, muitas versões para um único objeto ou um alto volume de novos objetos sendo gravados enquanto a tarefa de ciclo de vida está em execução.

    Nota

    Se o versionamento estiver ativado para o bucket, uma operação em cada versão de um objeto é contada como uma operação separada.

Billing

Transições de classe de armazenamento e exclusões geram taxas de armazenamento e requisição. Lifecycle Fees.

Considerações específicas de cenário

  • Excluir dados de origem após replicação: A replicação de dados e as operações de ciclo de vida são assíncronas. A replicação pode levar minutos, horas ou até dias, dependendo da quantidade de dados a serem replicados e da largura de banda disponível. Antes de configurar uma regra de ciclo de vida para excluir dados replicados do bucket de origem, verifique se os dados foram replicados para o bucket de destino. Defina um período de expiração adequado. Caso contrário, a regra de ciclo de vida pode excluir os dados de origem antes que a replicação seja concluída, causando perda de dados.

  • Buckets OSS-HDFS:

    • Regras de ciclo de vida para arquivos OSS

      Para configurar ou modificar uma regra de ciclo de vida baseada na última modificação que corresponda a todos os objetos em um bucket com OSS-HDFS habilitado, use o elemento NOT para excluir os objetos armazenados no diretório .dlsdata/. Isso impede que ações de exclusão de objetos ou conversão de classe de armazenamento acionadas por regras de ciclo de vida se apliquem aos dados do OSS-HDFS e, consequentemente, afetem as operações de leitura e gravação nesses dados.

    • Regras de ciclo de vida para arquivos HDFS

      Para organizar dados acessados frequentemente em Standard e dados acessados menos frequentemente em Infrequent Access, Archive ou Deep Archive, use o recurso Use tiered storage, que é baseado em regras de ciclo de vida.

  • Regras de ciclo de vida com versionamento: Transições de classe de armazenamento por ciclo de vida não criam versões anteriores.

Componentes

Filter conditions

  • Correspondência por prefixo: Corresponde a objetos e partes com um prefixo especificado. É possível criar várias regras com prefixos diferentes e não sobrepostos. A nomenclatura de prefixos segue as regras de nomenclatura Object.

  • Correspondência por tag: Corresponde a objetos por tags de chave-valor especificadas. Uma única regra pode ter várias tags; a regra se aplica apenas a objetos que contêm todas as tags especificadas.

    Lifecycle rule tags

    Object tags

    Matched

    a:1,b:2

    a:1

    No

    a:1,b:3

    No

    a:1,b:2

    Yes

    a:1,b:2,c:3

    Yes

    Nota

    Regras baseadas em tags não se aplicam a partes.

  • Correspondência por prefixo e tags: Corresponde a objetos com o prefixo e filtros de tag especificados.

  • Aplicar a todo o bucket: Corresponde a todos os objetos e partes no bucket.

  • Elemento NOT: Exclui objetos específicos de uma regra de ciclo de vida que, de outra forma, corresponderiam a um prefixo e tags. Especifique os prefixos e tags a serem excluídos. NOT element examples.

    Importante
    • Regras de ciclo de vida podem incluir múltiplos elementos NOT. Este recurso está em preview apenas por convite. Entre em contato com o suporte técnico para solicitar acesso.

    • Um único bucket suporta até 1.000 elementos NOT. Uma única regra suporta até 100 elementos NOT. O total de elementos Prefix em todas as regras é limitado a 2.000.

    • Após configurar múltiplos elementos NOT, use o console para gerenciar suas regras de ciclo de vida.

    • Se o recurso de múltiplos elementos NOT não estiver ativado, não crie várias regras que excluam subdiretórios diferentes cada uma. Elementos NOT em regras diferentes operam independentemente. Por exemplo, se a regra1 excluir apenas dir/p1/, dir/p2/ ainda será correspondido e excluído pela regra1. Se a regra2 excluir apenas dir/p2/, dir/p1/ ainda será correspondido e excluído pela regra2. Isso resulta na exclusão de todos os arquivos sob o prefixo dir/.

Object expiration and actions

  • Expiração em dias: A ação especificada é executada N dias após a última modificação do objeto. Aplica-se a todos os objetos em um bucket sem versionamento e às versões atuais em um bucket com versionamento.

  • Expiração em uma data: Todos os objetos modificados pela última vez antes da data especificada expiram e a ação é executada. Aplica-se a todos os objetos em um bucket sem versionamento e às versões atuais em um bucket com versionamento.

  • Dias desde que se tornou não atual: Uma versão não atual expira N dias após tornar-se não atual, e a ação é executada.

Transfira ou exclua objetos expirados conforme especificado em Lifecycle configuration elements.

Part expiration and actions

  • Expiração em dias: Uma parte é excluída um número especificado de dias (N) após sua última modificação.

  • Expiração em uma data: Todas as partes modificadas pela última vez antes de uma data especificada são excluídas.

Como as regras funcionam

Different prefixes

Por exemplo, um bucket contém os seguintes objetos:

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

Se uma regra de ciclo de vida especificar o prefixo logs/, ela se aplica apenas a objetos que começam com logs/. Se o prefixo for doc/readme.txt, a regra se aplica apenas ao objeto doc/readme.txt.

Nota

É possível especificar um prefixo contendo caracteres chineses para uma regra de ciclo de vida.

Ao executar uma operação GET ou HEAD em um objeto que corresponde a uma política de expiração, o OSS adiciona o cabeçalho de resposta x-oss-expiration. expiry-date indica a data de expiração do objeto, e rule-id indica o ID da regra correspondente.

Same prefix and tags

Quando várias regras com o mesmo prefixo e tags se aplicam a um objeto, a exclusão tem precedência sobre a transição de classe de armazenamento. Por exemplo, se a regra1 excluir objetos com prefixo abc e tag a=1 após 20 dias, a transição de classe de armazenamento da regra2 não entra em vigor.

Rule

Prefix

Tag

Action

rule1

abc

a=1

Delete after 20 days

rule2

abc

a=1

Transition to Archive Storage after 20 days

Overlapping prefixes

A regra1 transfere todos os objetos com a tag a=1 para Infrequent Access (IA) após 10 dias. A regra2 exclui objetos com o prefixo abc e a tag a=1 após 120 dias.

Rule

Prefix

Tag

Action

rule1

-

a=1

Transition to IA after 10 days

rule2

abc

a=1

Delete after 120 days

A regra3 transfere todos os objetos com a tag a=1 para Archive após 20 dias. Como objetos em Archive não podem ser transferidos para Infrequent Access (IA), a regra4, que transfere objetos com prefixo abc e tag a=1 para IA após 30 dias, não entra em vigor.

Rule

Prefix

Tag

Action

rule3

-

a=1

Transition to Archive Storage after 20 days

rule4

abc

a=1

Transition to IA after 30 days

NOT element

Se você configurar várias regras de ciclo de vida para o mesmo bucket e uma delas incluir um elemento NOT, a lógica NOT se aplica apenas dentro dessa regra específica. Exemplos:

  • Exemplo 1

    • A regra de ciclo de vida 1 exclui objetos com o prefixo dir/ no examplebucket após 100 dias.

    • A regra de ciclo de vida 2 usa um elemento NOT para excluir todos os objetos no examplebucket, exceto aqueles com o prefixo dir/, após 50 dias.

    Uma vez ativas essas regras de ciclo de vida, os objetos no examplebucket são excluídos da seguinte forma:

    Object

    Deletion behavior

    Objects with the prefix dir/

    Delete after 100 days

    Objects without the prefix dir/

    Delete after 50 days

  • Exemplo 2

    • A regra de ciclo de vida 1 usa um elemento NOT para excluir todos os objetos no examplebucket, exceto aqueles com a tag (key1:value1), após 30 dias.

    • A regra de ciclo de vida 2 exclui todos os objetos no examplebucket com a tag (key2:value2) após 50 dias.

    Uma vez ativas essas regras de ciclo de vida, os objetos no examplebucket são excluídos da seguinte forma:

    Object

    Deletion behavior

    Objects without the tags key1:value1 or key2:value2

    Delete after 30 days

    Objects with only the tag key1:value1

    Not deleted

    Objects with only the tag key2:value2

    Delete after 30 days

    Objects with both the key1:value1 and key2:value2 tags

    Delete after 50 days

Procedimento

OSS console

  1. Faça login no console do OSS.

  2. No painel de navegação à esquerda, clique em Buckets. Na página exibida, clique no nome do bucket desejado.

  3. No painel de navegação à esquerda, escolha Data Management > Lifecycle.

  4. Na página Lifecycle, clique em Create Rule.

    Nota

    O interruptor Enable Access Tracking na página Lifecycle não é necessário para regras baseadas apenas na última modificação. Ele se aplica apenas a Lifecycle rules based on the last access time e gera taxas adicionais.

  5. No painel Create Lifecycle Rule, configure a regra usando as tabelas a seguir.

    • Se o versionamento estiver desativado para o bucket:

      Section

      Parameter

      Description

      Basic Settings

      Status

      O status da regra. Valores válidos: Start e Disable.

      • Se ativado, o OSS transfere ou exclui objetos com base na regra.

      • Se desativado, a tarefa de ciclo de vida é suspensa.

      Applied To

      O escopo da regra. Selecione Object Prefix ou Whole Bucket.

      Nota

      Se você selecionar By Prefix, deverá inserir o prefixo completo. Por exemplo, para aplicar a regra a todos os objetos no diretório src/dir1/, defina o prefixo como src/dir1/. Um prefixo dir1 não corresponderia a esses objetos conforme o esperado. O prefixo não pode começar com uma barra (/) ou uma barra invertida (\). Por exemplo, /prod e /prod/ são prefixos inválidos. Use prod/ ou prod em vez disso.

      Allow Overlapped Prefixes

      Por padrão, o OSS verifica se os prefixos das regras de ciclo de vida se sobrepõem. Por exemplo, você configura as duas regras a seguir com prefixos sobrepostos:

      • Regra 1

        Exclui todos os objetos com o prefixo dir1/ 180 dias após sua última modificação.

      • Regra 2

        Transfere todos os objetos com o prefixo dir1/dir2/ para a classe de armazenamento Infrequent Access 30 dias após sua última modificação e os exclui 60 dias após sua última modificação.

      Se você não selecionar esta opção ao configurar a Regra 2, o OSS detectará que os objetos no diretório dir1/dir2/ correspondem a duas regras de exclusão. Como resultado, o OSS rejeita a Regra 2 e relata um erro Overlap for same action type Expiration..

      Se você selecionar esta opção ao configurar a Regra 2, os objetos no diretório dir1/dir2/ serão transferidos para a classe de armazenamento Infrequent Access 30 dias após sua última modificação e serão excluídos 60 dias após sua última modificação. Outros objetos no diretório dir1/ serão excluídos 180 dias após sua última modificação.

      Nota

      Se você configurar várias regras e uma delas se aplicar a todo o bucket, isso é considerado um caso de prefixos sobrepostos.

      Prefix

      O prefixo de objeto ao qual a regra se aplica.

      • Se você definir o prefixo como img, a regra se aplicará a todos os objetos cujos nomes começam com img, como imgtest.png e img/example.jpg.

      • Se você definir o prefixo como img/, a regra se aplicará a todos os objetos cujos nomes começam com img/, como img/example.jpg e img/test.jpg.

      O prefixo suporta apenas correspondência exata de string e não suporta variáveis dinâmicas; consulte Longest prefix match e Prefixes do not support dynamic variables na descrição da opção Allow Overlapped Prefixes para obter detalhes.

      Tag

      Aplica a regra apenas a objetos com a tag especificada.

      • Se você não definir um prefixo, mas especificar uma tag com key=a e value=1, a regra se aplicará a todos os objetos no bucket com a tag a=1.

      • Se você definir o prefixo como img e especificar uma tag com key=a e value=1, a regra se aplicará a todos os objetos no bucket cujos nomes começam com img e possuem a tag a=1.

      Object tagging.

      NOT

      A opção NOT exclui objetos com um prefixo e tag específicos da regra de ciclo de vida.

      Importante
      • Ao ativar a opção NOT, você deve especificar pelo menos um prefixo ou uma tag.

      • A chave de uma tag especificada na condição NOT não pode ser igual a uma chave definida na condição Tag.

      • Não é possível configurar uma política de expiração de partes quando a opção NOT está ativada.

      Object Size

      Aplica a regra a objetos dentro de um intervalo de tamanho especificado.

      • Minimum Size: A regra de ciclo de vida se aplica a objetos maiores que este valor. O valor deve ser maior que 0 B e menor que 5 TB.

      • Maximum Size: A regra de ciclo de vida se aplica a objetos menores que este valor. O valor deve ser maior que 0 B e menor ou igual a 5 TB.

      Importante

      Se você especificar tanto um tamanho mínimo quanto máximo de objeto na mesma regra de ciclo de vida:

      • Certifique-se de que o tamanho máximo seja maior que o tamanho mínimo.

      • Não é possível configurar uma política de expiração de partes.

      • Não é possível configurar uma política para limpar marcadores de exclusão.

      Policy for Objects

      Object Lifecycle

      Selecione uma política de expiração para objetos. Escolha By Days, By Date ou Disabled. Se você selecionar Disabled, a política de expiração de objetos não entrará em vigor.

      Lifecycle-based Rules

      Configure regras para transferir a classe de armazenamento de objetos ou excluir objetos expirados. Selecione Infrequent Access, Archive, Cold Archive, Deep Cold Archive ou Data Deletion.

      Por exemplo, se você definir Object Lifecycle como By Date e especificar 24 de setembro de 2023, objetos modificados pela última vez antes dessa data serão excluídos automaticamente e não poderão ser recuperados.

      Policy for Parts

      Part Lifecycle

      Configure uma política de expiração para partes. Esta opção fica indisponível se você tiver selecionado Tag. Defina a política de expiração de partes como By Days ou By Date, ou selecione Disabled. Se você selecionar Disabled, a política de expiração de partes não entrará em vigor.

      Importante

      Uma regra de ciclo de vida deve incluir pelo menos uma política de expiração de objetos ou uma política de expiração de partes.

      Rules for Parts

      Especifica quando as partes expiram com base no número de dias ou na data selecionada na política de expiração de partes. Partes expiradas são excluídas automaticamente e não podem ser recuperadas.

    • Se o versionamento estiver ativado para o bucket:

      Os parâmetros nas seções Basic Settings e Policy for Parts são configurados da mesma forma que para buckets sem versionamento. A tabela a seguir descreve apenas os parâmetros que são diferentes.

      Importante

      Antes de configurar uma regra de ciclo de vida, observe que, se o versionamento estiver ativado em um bucket que serve como destino para replicação entre regiões, os marcadores de exclusão sincronizados do bucket de origem alteram as versões atuais de objetos com o mesmo nome no bucket de destino para versões não atuais. Portanto, configure cuidadosamente as regras de limpeza para versões não atuais para evitar exclusão não intencional de dados.

      Section

      Parameter

      Description

      Policy for Current Versions

      Clean up expired object delete marker

      Se o versionamento estiver ativado, a opção Clean Up Expired Object Delete Marker é adicionada à política de expiração. Outras opções são as mesmas que para buckets com versionamento desativado.

      Se você selecionar esta opção, o OSS excluirá o marcador de exclusão de um objeto expirado se ele for a única versão do objeto. Se o objeto tiver várias versões e a versão mais recente for um marcador de exclusão, o OSS manterá o marcador de exclusão. Delete markers.

      Importante

      Esta regra não limpa marcadores de exclusão se existirem versões não atuais. Recomendamos que você limpe prontamente marcadores de exclusão e versões não atuais desnecessárias. Caso contrário, um número excessivo de marcadores de exclusão pode degradar o desempenho de listagem.

      Policy for Previous Versions

      Object Lifecycle

      Defina a política de expiração para versões não atuais. Selecione By Days ou Disabled. Se você selecionar Disabled, a política de expiração não entrará em vigor.

      Lifecycle-based Rules

      Especifique um número de dias (N). Uma versão não atual expira N dias após tornar-se não atual, e a ação especificada é executada no dia seguinte à expiração. Por exemplo, se você definir o valor como 30, um objeto que se torna uma versão não atual em 1º de setembro de 2023 será transferido para a classe de armazenamento especificada ou excluído em 1º de outubro de 2023.

      Importante

      Você pode determinar quando um objeto se tornou uma versão não atual verificando a última modificação da versão subsequente do objeto.

  6. Clique em OK.

    Depois que a regra de ciclo de vida for salva, você poderá visualizá-la na lista de regras.

SDK

Os exemplos a seguir configuram regras de ciclo de vida usando SDKs comuns. Para todos os SDKs suportados, 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 regras de ciclo de vida com o ossutil (Install ossutil).

O exemplo a seguir define uma regra de ciclo de vida para o 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 regras de ciclo de vida via REST API (requer cálculo de assinatura), use PutBucketLifecycle.

FAQ

Como excluir rapidamente todos os objetos em um bucket usando políticas de ciclo de vida

Non-versioned buckets

  1. Acesse a página Buckets no console do OSS e clique no nome do bucket.

  2. Na árvore de navegação à esquerda, escolha Content Security > Versioning e verifique se o versionamento está ativado.

    未开启版本控制

  3. Na árvore de navegação à esquerda, escolha Data Management > Lifecycle. Configure uma regra de ciclo de vida para excluir automaticamente todos os objetos no bucket um dia após sua última modificação e para excluir partes geradas há mais de um dia.

    screenshot_2025-07-01_17-59-32

Versioned buckets

Você pode configurar uma regra de ciclo de vida para excluir automaticamente todos os objetos e partes de tarefas de upload multipart incompletas em buckets sem versionamento.

  1. Acesse a página Buckets no console do OSS e clique no nome do bucket.

  2. Na árvore de navegação à esquerda, escolha Content Security > Versioning e verifique se o versionamento está ativado.

    未开启版本控制

  3. Na árvore de navegação à esquerda, escolha Data Management > Lifecycle. Configure uma regra de ciclo de vida para excluir automaticamente todos os objetos no bucket um dia após sua última modificação e para excluir partes geradas há mais de um dia.

    screenshot_2025-07-01_17-59-32

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

Os períodos de transição estão ordenados incorretamente. Eles devem seguir: Infrequent Access < Archive < Cold Archive < Deep Cold Archive.

Regras de ciclo de vida e objetos existentes

As regras de ciclo de vida se aplicam tanto a objetos existentes quanto a objetos recém-enviados. Por exemplo, se você configurar uma regra em 7 de outubro para excluir objetos após 30 dias, um objeto enviado em 5 de outubro será excluído em 5 de novembro, e um enviado em 8 de outubro será excluído em 8 de novembro.

Modificar regras de ciclo de vida

Para modificar uma regra de ciclo de vida específica (por exemplo, Rule1) quando existem várias regras:

  1. Chame a operação GetBucketLifecycle para recuperar todas as regras de ciclo de vida atuais do bucket.

  2. Modifique as configurações da Rule1.

  3. Chame a operação PutBucketLifecycle para substituir a configuração existente enviando tanto a Rule1 modificada quanto a Rule2 original.

Excluir regras de ciclo de vida

DeleteBucketLifecycle exclui todas as regras de ciclo de vida de um bucket. Para excluir uma única regra (por exemplo, Rule1) mantendo outras (por exemplo, Rule2), substitua toda a configuração:

  1. Chame a operação GetBucketLifecycle para recuperar todas as regras de ciclo de vida atuais do bucket.

  2. Exclua a Rule1.

  3. Chame a operação PutBucketLifecycle para substituir a configuração existente enviando apenas a Rule2.

Logs para operações de ciclo de vida

Sim. Todas as transições e expirações bem-sucedidas acionadas por regras de ciclo de vida são registradas em log. Campos de log relevantes:

  • Operation

    • CommitTransition: Indica uma transição de classe de armazenamento.

    • ExpireObject: Indica a exclusão de um objeto expirado.

  • Sync Request

    lifecycle: A transição ou exclusão foi acionada por uma regra de ciclo de vida.

Log fields descreve o esquema completo. Billing rules aborda os custos de consulta de logs.

Limpar marcadores de exclusão e versões atuais

Sim. Uma única regra de ciclo de vida pode expirar versões atuais de objetos e limpar marcadores de exclusão expirados.

Transição de Infrequent Access para Standard

Não. Use um dos seguintes métodos para transferir objetos de Infrequent Access para Standard:

  • Usando a operação CopyObject

    Chame CopyObject para transferir um objeto de Infrequent Access para Standard.

  • Usando a ferramenta ossutil

    Use o comando set-meta do ossutil com a opção X-Oss-Storage-Class para transferir objetos de Infrequent Access para Standard. Set or update metadata.

O OSS armazena objetos enviados como Standard ou a regra de ciclo de vida os transfere diretamente para uma classe de armazenamento de custo inferior?

Os objetos são armazenados na classe de armazenamento Standard por padrão quando são enviados, independentemente de haver uma regra de ciclo de vida configurada. A regra de ciclo de vida é executada de forma assíncrona em segundo plano e transfere objetos que atendem às condições especificadas para a classe de armazenamento alvo todos os dias às 08:00:00 (UTC+8). A regra não entra em vigor no momento do upload.

Para especificar uma classe de armazenamento no momento do upload, defina o cabeçalho de requisição x-oss-storage-class. Por exemplo, para enviar um objeto diretamente como armazenamento Infrequent Access (IA) usando o ossutil:

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

Documentos relacionados