Todos os produtos
Search
Central de documentação

Object Storage Service:Configurar regras de ciclo de vida com base no último horário de modificação para reduzir custos de armazenamento do OSS

Última atualização: Jun 23, 2026

Nem todos os dados enviados ao OSS exigem acesso frequente, mas alguns precisam ser mantidos por motivos de conformidade ou arquivamento. Pode ser necessário excluir em lote dados que não precisam mais ser armazenados em um bucket. Configure regras de ciclo de vida com base no último horário de modificação (Last Modified Time) para converter periodicamente objetos de tipos de armazenamento quente para tipos de armazenamento frio ou excluir objetos, reduzindo os custos de armazenamento.

Cenários de uso

  • Prontuários médicos de uma instituição de saúde, enviados ao OSS, são acessados ocasionalmente nos seis meses seguintes e praticamente não são acessados após esse período. Defina uma regra de ciclo de vida para converter os prontuários médicos enviados há 180 dias para armazenamento Archive.

  • Gravações da central de atendimento de uma empresa, enviadas ao OSS, são usadas para estatísticas e verificação nos dois primeiros meses. Após dois meses, o acesso é esporádico; após seis meses, praticamente inexistente; e, após dois anos, os dados não precisam mais ser armazenados. Defina uma regra de ciclo de vida para converter os dados para Infrequent Access após 60 dias, Archive após 180 dias e excluí-los após 730 dias.

  • Se um bucket contém um grande número de arquivos que precisam ser totalmente excluídos, configure uma regra de ciclo de vida correspondente a todo o bucket para excluir todos os arquivos após um dia.

Para obter informações sobre os tipos de armazenamento, consulte Tipos de armazenamento.

Limites de uso

Condições de correspondência

Lifecycle rules support matching only based on prefixes and tags. Wildcard matching, suffix matching, and regular expression matching are not supported.

Limite de expiração de parts

You cannot configure two or more lifecycle rules that contain a part lifecycle policy for objects whose names have overlapping prefixes. Examples:

  • Example 1

    If you configure a lifecycle rule that contains a part policy for a bucket, you cannot configure another lifecycle rule that contains a part policy for any objects in the bucket.

  • Example 2

    If you configure a lifecycle rule that contains a part policy for objects whose names contain the dir1 prefix in a bucket, you cannot configure another lifecycle rule that contains a part policy for objects whose names contain overlapping prefixes, such as dir1/dir2.

Limites de conversão de tipo de armazenamento

  • Lifecycle rules cannot transition Appendable objects to the Cold Archive or Deep Cold Archive storage classes. To transition an Appendable object, you must first convert it to a Normal object by calling the SealAppendObject operation, after which a lifecycle rule can be applied.

  • Lifecycle rules cannot be used to transition symbolic links to the Infrequent Access (IA), Archive, Cold Archive, or Deep Cold Archive storage classes.

Considerações

Quantidade de regras

Um único bucket aceita no máximo 1.000 regras de ciclo de vida. Uma única regra pode incluir simultaneamente políticas baseadas no último horário de modificação e no último horário de acesso.

Semântica de substituição

The PutBucketLifecycle operation overwrites the existing configurations of a lifecycle rule of a bucket. For example, if a lifecycle rule named Rule1 is configured for a bucket and you want to configure another lifecycle rule named Rule2 for the bucket, perform the following operations:

  1. Obtenha a Rule1.

  2. Adicione a Rule2.

  3. Atualize as regras para (Rule1+Rule2).

Horário de vigência

OSS loads a lifecycle rule within 24 hours after the rule is created. After the lifecycle rule is loaded, OSS runs the rule every day at 08:00:00 (UTC+8).

Se a política de tempo da regra de ciclo de vida especificar um número de dias (Days), o intervalo entre o último horário de modificação do objeto e o horário de início da execução da regra (8:00) deve ser superior a 24 horas. Por exemplo, se a regra especificar que os objetos devem ser excluídos um dia após o envio, os horários de exclusão dos arquivos enviados em 20 de julho de 2020 são os seguintes:

  • Objects uploaded before 08:00:00 (UTC+8) on July 20, 2020 are deleted from 08:00:00 (UTC+8) on July 21, 2020 to 08:00:00 (UTC+8) on July 22, 2020.

  • Objects uploaded after 08:00:00 (UTC+8) on July 20, 2020 are deleted from 08:00:00 (UTC+8) on July 22, 2020 to 08:00:00 (UTC+8) on July 23, 2020.

Atualizar as regras de ciclo de vida pode interromper as tarefas de ciclo de vida do dia. Evite atualizações frequentes das regras de ciclo de vida.

Tempo de conclusão da execução

  • After a rule takes effect, lifecycle operations such as object deletion, storage class transition, and expiration of multipart upload parts are typically completed within 24 hours for up to 1 billion objects in the China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), and Singapore regions. In other regions, these operations are typically completed within 24 hours for up to 100 million objects.

  • Execution may take longer than 24 hours, and in some cases several days or weeks, if there are many objects to scan, many objects to which the lifecycle rule applies, many tags, many versions for a single object, or a high volume of new objects being written while the lifecycle task is running.

    null

    If versioning is enabled for the bucket, an operation on each version of an object is counted as a separate operation.

Descrição de taxas

Para obter detalhes sobre as taxas de armazenamento e de solicitação que podem ser aplicadas ao converter o tipo de armazenamento de objetos ou excluir objetos usando regras de ciclo de vida, consulte Lifecycle Fees.

Configurar regras de ciclo de vida em um bucket com o serviço OSS-HDFS habilitado

  • Configurar regras de ciclo de vida com base em arquivos OSS em um bucket com o serviço OSS-HDFS habilitado

    To configure or modify a lifecycle rule based on the last modified time to match all objects in a bucket for which OSS-HDFS is enabled, use the NOT element to exclude the objects that are stored in the .dlsdata/ directory. This prevents lifecycle rule-triggered object deletion or storage class conversion actions from applying to OSS-HDFS data and consequently affecting read and write operations on OSS-HDFS data.

    p571593..jpeg

  • Configurar regras de ciclo de vida com base em arquivos HDFS em um bucket com o serviço OSS-HDFS habilitado

    Para armazenar dados acessados com frequência no tipo Standard e dados menos acessados nos tipos Infrequent Access, Archive e Cold Archive, use o recurso de armazenamento em camadas quente/frio com base em regras de ciclo de vida. Para obter mais informações, consulte Usar armazenamento em camadas quente/frio.

Elementos

Elementos de correspondência

  • Correspondência por prefixo: corresponde a objetos e parts pelo prefixo especificado. É possível criar várias regras para diferentes prefixos, que não podem ser duplicados. As convenções de nomenclatura de prefixos são as mesmas dos objetos. Para obter mais informações, consulte Object.

  • Correspondência por Tag: corresponde a objetos pela chave e pelo valor da tag especificada. Uma única regra pode ser configurada com várias tags, e a regra de ciclo de vida é executada somente quando o objeto contém todas as tags.

    Tags configuradas na regra de ciclo de vida

    Tags do objeto

    A regra de ciclo de vida se aplica ao objeto?

    a:1,b:2

    a:1

    Não

    a:1,b:3

    Não

    a:1,b:2

    Sim

    a;1,b:2,c:3

    Sim

    null

    As regras de correspondência por tag não se aplicam a parts.

  • Correspondência por prefixo + tag: corresponde a objetos pelas condições de filtragem de prefixo e tag especificados.

  • Aplicar a todo o bucket: corresponde a todos os objetos e parts do bucket.

  • Elemento NOT: para processar objetos que correspondem ao prefixo e às tags de acordo com a regra de ciclo de vida e ignorar objetos que não precisam ser processados, use o elemento NOT para especificar o prefixo e as tags dos objetos a serem ignorados. Para obter exemplos de configuração do elemento NOT, consulte Exemplos de NOT.

    null
    • As regras de ciclo de vida agora aceitam configurações com vários elementos NOT, mas esse recurso está em fase de teste por convite e ainda não está disponível para todos os usuários. Entre em contato com technical support para solicitar o uso.

    • O limite total de elementos NOT por bucket é 1.000. O limite de elementos NOT por regra é 100, e o limite total de elementos Prefix em todas as regras é 2.000.

    • Após usar vários elementos NOT, gerencie as operações subsequentes de regras de ciclo de vida pelo console.

Prazo de expiração e operações de objetos

  • Dias de expiração: especifique um número de dias N e defina a operação a ser executada quando todos os objetos sem versionamento e as versões atuais dos objetos com versionamento expirarem. O objeto expira N dias após seu último horário de modificação e a operação especificada é executada.

  • Data de expiração: especifique uma data de expiração e defina a operação a ser executada quando todos os objetos sem versionamento e as versões atuais dos objetos com versionamento expirarem. Todos os objetos cujo último horário de modificação seja anterior a essa data expiram e a operação especificada é executada.

  • Dias como versão não atual: especifique um número de dias N e defina a operação a ser executada quando objetos de versão não atual expirarem. O objeto expira N dias após se tornar uma versão não atual e a operação especificada é executada.

Converta o tipo de armazenamento de objetos expirados ou exclua-os. Para obter mais informações, consulte Elementos de configuração do ciclo de vida.

Prazo de expiração e operações de parts

  • Dias de expiração: especifique um número de dias N. Os parts são excluídos N dias após seu último horário de modificação.

  • Data de expiração: especifique uma data de expiração. Todos os parts cujo último horário de modificação seja anterior a essa data serão excluídos.

Descrição das regras

Prefixos diferentes

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 o prefixo especificado na regra de ciclo de vida for logs/, ela se aplica somente aos objetos com nomes que começam com logs/. Se o prefixo especificado for doc/readme.txt, ela se aplica somente ao objeto doc/readme.txt.

null

É possível especificar prefixos em chinês para as regras de ciclo de vida.

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

Mesmo prefixo e tag

Quando diferentes regras de ciclo de vida se aplicam a objetos com o mesmo prefixo e tag, a operação de exclusão tem prioridade sobre a conversão de tipo de armazenamento. A rule1 especifica que todos os objetos com prefixo abc e tag a=1 serão excluídos após 20 dias. A rule2 não entra em vigor.

rule

prefix

tag

action

rule1

abc

a=1

Excluir após 20 dias

rule2

abc

a=1

Converter para Archive após 20 dias

Prefixos sobrepostos + mesma tag

A rule1 especifica que todos os objetos com tag a=1 serão convertidos para IA após 10 dias. A rule2 especifica que os objetos com prefixo abc e tag a=1 serão excluídos após 120 dias.

rule

prefix

tag

action

rule1

-

a=1

Converter para IA após 10 dias

rule2

abc

a=1

Excluir após 120 dias

A rule3 especifica que todos os objetos com tag a=1 serão convertidos para Archive após 20 dias. Como objetos do tipo Archive não podem ser convertidos para o tipo IA, a rule4, que especifica que objetos com prefixo abc e tag a=1 sejam convertidos para IA após 30 dias, não entra em vigor.

rule

prefix

tag

action

rule3

-

a=1

Converter para Archive após 20 dias

rule4

abc

a=1

Converter para IA após 30 dias

NOT

Ao configurar várias regras de ciclo de vida para o mesmo bucket, quando uma regra envolve um elemento NOT, o comportamento especificado pelo elemento NOT se aplica somente a essa regra. Exemplos:

  • Exemplo 1

    • Pela regra de ciclo de vida 1, os objetos com prefixo dir/ no examplebucket são excluídos após 100 dias.

    • Pela regra de ciclo de vida 2, o elemento NOT especifica que todos os objetos no examplebucket que não tenham o prefixo dir/ serão excluídos após 50 dias.

    A partir da data de vigência das regras de ciclo de vida, o comportamento de exclusão dos objetos no examplebucket é descrito na tabela a seguir.

    Object

    Comportamento de exclusão

    Objetos com prefixo dir/

    Excluir após 100 dias

    Objetos sem o prefixo dir/

    Excluir após 50 dias

  • Exemplo 2

    • Pela regra de ciclo de vida 1, o elemento NOT especifica que todos os objetos no examplebucket que não tenham a tag (key1:value1) serão excluídos após 30 dias.

    • Pela regra de ciclo de vida 2, todos os objetos no examplebucket que contenham a tag (key2:value2) serão excluídos após 50 dias.

    A partir da data de vigência das regras de ciclo de vida, o comportamento de exclusão dos objetos no examplebucket é descrito na tabela a seguir:

    Object

    Comportamento de exclusão

    Objetos que não contêm nenhuma das tags acima

    Excluir após 30 dias

    Objetos que contêm apenas a tag key1:value1

    Não excluir

    Objetos que contêm apenas a tag key2:value2

    Excluir após 30 dias

    Objetos que contêm as tags key1:value1 e key2:value2

    Excluir após 50 dias

Métodos de operação

Usar o console do OSS

  1. Log on to the OSS console.

  2. In the left-side navigation pane, click Buckets. On the page that appears, click the name of the target bucket.

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

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

    null

    Se você precisa criar apenas regras de ciclo de vida baseadas na política de último horário de modificação, não é necessário ativar o botão Lifecycle na página 启用访问跟踪. A ativação do rastreamento de acesso gera custos adicionais. O rastreamento de acesso é usado para criar regras de ciclo de vida baseadas na política de último horário de acesso. Para obter mais informações, consulte Regras de ciclo de vida com base no último horário de acesso.

  5. Na página 创建生命周期规则, configure a regra de ciclo de vida conforme descrito a seguir.

    • Bucket sem versionamento habilitado

      Área

      Item de configuração

      Descrição

      Basic Settings

      Status

      Defina o status da regra de ciclo de vida. Escolha entre Start ou 禁用.

      • Após ativar a regra de ciclo de vida, os tipos de armazenamento dos dados são convertidos ou os dados são excluídos de acordo com a regra configurada.

      • Após desabilitar a regra de ciclo de vida, as tarefas de ciclo de vida são interrompidas.

      Applied To

      Selecione os objetos aos quais a regra de ciclo de vida se aplica. Escolha entre Object Prefix ou Whole Bucket.

      null

      Ao selecionar a correspondência por prefixo, insira o caminho completo do prefixo. Por exemplo, para que a regra se aplique apenas a todos os arquivos em src/dir1, o prefixo deve ser src/dir1. Preencher apenas dir1 não terá efeito.

      Allow Overlapped Prefixes

      Por padrão, o OSS verifica se os prefixos de cada regra de ciclo de vida estão sobrepostos. Por exemplo, se as duas regras de ciclo de vida a seguir com prefixos sobrepostos forem definidas:

      • Regra 1

        Especifica que todos os objetos com prefixo dir1/ no bucket serão excluídos 180 dias após o último horário de modificação.

      • Regra 2

        Especifica que todos os objetos com prefixo dir1/dir2/ no bucket serão convertidos para o tipo Infrequent Access 30 dias após o último horário de modificação e excluídos após 60 dias.

      Se essa opção não estiver selecionada ao configurar a regra 2, como o sistema detecta que os objetos no diretório dir1/dir2/ correspondem a duas regras de exclusão ao mesmo tempo, a configuração da regra 2 será recusada com o erro Overlap for same action type Expiration..

      Se essa opção estiver selecionada ao configurar a regra 2, os objetos em dir1/dir2/ serão convertidos para o tipo Infrequent Access após 30 dias e excluídos após 60 dias. dir1/Os outros objetos em dir1/ serão excluídos após 180 dias.

      null

      Se várias regras forem configuradas e uma delas for baseada no bucket inteiro, isso será considerado uma situação de sobreposição de prefixos.

      Prefix

      Insira o prefixo dos nomes de objetos que a regra deve corresponder.

      • Se o prefixo for definido como img, todos os objetos com nomes que começam com img serão correspondidos, como imgtest.png, img/example.jpg, etc.

      • Se o prefixo for definido como img/, todos os objetos com nomes que começam com img/ serão correspondidos, como img/example.jpg, img/test.jpg, etc.

      Tag

      A regra de ciclo de vida se aplica somente a objetos que possuem a tag especificada.

      • Se nenhum prefixo for definido e apenas a tag for configurada com a chave a e o valor 1, a regra corresponderá a todos os objetos do bucket com a tag a=1.

      • Se o prefixo for definido como img e a tag for configurada com a chave a e o valor 1, a regra corresponderá a todos os objetos do bucket com nomes que começam com img e tag a=1.

      Para obter mais informações, consulte Tag objects.

      NOT

      A opção NOT define que a regra de ciclo de vida não se aplica a objetos com o prefixo e as tags especificados.

      null
      • Ao ativar a opção NOT, deve haver pelo menos um prefixo ou tag definido.

      • A chave da tag definida na semântica NOT não pode ser igual à chave definida no item de configuração Tag.

      • Após ativar a opção NOT, a configuração de política de expiração de parts não é permitida.

      Object Size

      Especifique o tamanho do arquivo para o qual a regra de ciclo de vida se aplica.

      • Minimum Size: a regra de ciclo de vida se aplica a arquivos maiores que esse 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 arquivos menores que esse valor. O valor deve ser maior que 0 B e menor ou igual a 5 TB.

      null

      Se tanto o tamanho mínimo quanto o tamanho máximo do arquivo forem configurados na mesma regra de ciclo de vida:

      • O valor do tamanho máximo deve ser maior que o valor do tamanho mínimo.

      • A configuração de política de execução de parts não é permitida.

      • A configuração de política de limpeza de marcadores de exclusão não é permitida.

      Policy for Objects

      Object Lifecycle

      Selecione a política de expiração de objetos. Escolha entre 指定天数, 指定日期 e Disabled.. Ao selecionar Disabled, a política de expiração de arquivos não entra em vigor.

      Lifecycle-based Rules

      Configure regras para converter o tipo de armazenamento de objetos ou excluir objetos expirados. Escolha entre 低频访问, 归档存储, 冷归档存储, 深度冷归档存储 e 数据删除.

      Por exemplo, ao definir Object Lifecycle como 指定日期 e a data como 24 de setembro de 2023, os objetos cujo último horário de modificação for anterior a 24 de setembro de 2023 serão excluídos automaticamente. A exclusão é irreversível.

      Policy for Parts

      Part Lifecycle

      Configure a política de execução de parts. Se a opção Tag estiver selecionada, essa opção não poderá ser configurada. Escolha entre 指定天数 ou 指定日期 para executar a política de expiração de parts ou selecione Disabled para a política de expiração de parts. Ao selecionar Disabled, a política de expiração de parts não entra em vigor.

      null

      Uma regra de ciclo de vida deve conter pelo menos uma política de expiração de arquivo ou de expiração de parts.

      Rules for Parts

      Defina quando os parts expiram de acordo com os dias ou a data de expiração selecionados na política de expiração de parts. Os parts expirados são excluídos automaticamente e a exclusão é irreversível.

    • Bucket com versionamento habilitado

      Basic Settings e Policy for PartsÁrea涉及的Item de configuração, e 未开启版本控制的配置方法相同.以下表格仅介绍 e 未开启版本控制相比,开启版本控制后Item de configuração存Na página 的差异.

      null

      Antes de configurar regras de ciclo de vida, confirme: se o bucket tiver o versionamento habilitado e for o destino de replicação entre regiões, os marcadores de exclusão (Delete Markers) sincronizados a partir da origem converterão objetos de mesmo nome no bucket de versões atuais para versões históricas. Portanto, configure com cuidado as regras de limpeza de versões históricas para evitar a exclusão não intencional de dados.

      Área

      Item de configuração

      Descrição

      Policy for Current Versions

      清理对象删除标记

      Após habilitar o versionamento, a opção 清理对象删除标记 é adicionada à política de limpeza. As demais opções são as mesmas de quando o versionamento não está habilitado.

      Ao selecionar essa opção, se o objeto atual tiver apenas uma versão que seja um marcador de exclusão, o OSS excluirá o marcador de exclusão do objeto expirado. 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. Para obter mais informações sobre marcadores de exclusão, consulte Delete marker.

      null

      Quando existem versões históricas, essa regra não limpa os marcadores de exclusão de objetos. Recomenda-se limpar os marcadores de exclusão e as versões históricas desnecessárias em tempo hábil. Caso contrário, o excesso de marcadores de exclusão armazenados no bucket pode degradar o desempenho de listagem.

      Policy for Previous Versions

      Object Lifecycle

      Defina a política de expiração de arquivos de versões históricas. Escolha entre 指定天数 e Disabled. Ao selecionar Disabled, a política de expiração de arquivos não entra em vigor.

      Lifecycle-based Rules

      Especifique um número de dias N. O objeto de versão histórica expira N dias após ser convertido em versão histórica, e a operação especificada é executada no dia seguinte à expiração. Por exemplo, se definido como 30, um objeto convertido em versão histórica em 1 de setembro de 2023 será convertido para o tipo de armazenamento especificado ou excluído em 1 de outubro de 2023.

      null

      O momento em que um objeto foi convertido em versão histórica pode ser determinado pelo último horário de modificação da versão seguinte do objeto.

  6. Clique em OK.

    Após salvar a regra de ciclo de vida com sucesso, você pode visualizar as regras configuradas na lista de políticas.

Usar o SDK da Alibaba Cloud

Os exemplos de código a seguir demonstram a configuração de regras de ciclo de vida usando SDKs comuns. Para exemplos de código com outros SDKs, consulte Visão geral do SDK.

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-Java

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 automatically removes expired object delete markers, 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)),
						ExpiredObjectDeleteMarker: oss.Ptr(true),
					},
					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)
}

Usar a ferramenta de linha de comando ossutil

Use a ferramenta de linha de comando ossutil para definir regras de ciclo de vida. Para instalar o ossutil, consulte Install ossutil.

O exemplo a seguir mostra como definir informações 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\"}}}"

Para obter mais informações sobre esse comando, consulte put-bucket-lifecycle.

APIs relacionadas

Os métodos de operação acima são implementados com base em APIs. Se o programa exigir alto grau de personalização, você pode enviar solicitações REST API diretamente. O envio direto de solicitações REST API requer a codificação manual do cálculo de assinatura. Para obter mais informações, consulte PutBucketLifecycle.

Perguntas frequentes

Erro Set bucket lifecycle error, InvalidArgument, Days in the Transition action for StorageClass Archive must be more than the Transition action for StorageClass IA — O que fazer?

Esse erro ocorre porque os períodos de conversão entre os diferentes tipos de armazenamento não atendem aos requisitos. O ciclo de conversão configurado para o bucket deve atender à seguinte ordem: Infrequent Access < Archive < Cold Archive < Deep Cold Archive.

As regras de ciclo de vida se aplicam a objetos já existentes no bucket?

As regras de ciclo de vida se aplicam tanto a objetos existentes anteriores à configuração quanto a novos objetos enviados após a configuração. Por exemplo, se uma regra configurada em 7 de outubro especificar exclusão após 30 dias, um objeto enviado em 5 de outubro será excluído em 6 de novembro e um objeto enviado em 8 de outubro será excluído em 9 de novembro.

Como modificar a configuração de uma ou mais regras de ciclo de vida?

Suponha que o bucket tenha duas regras de ciclo de vida configuradas, Rule1 e Rule2, e você deseje modificar um item de configuração da Rule1. Execute as seguintes operações:

  1. Chame a API GetBucketLifecycle para obter todas as regras de ciclo de vida configuradas para o bucket, ou seja, Rule1 e Rule2.

  2. Modifique o item de configuração da regra de ciclo de vida Rule1.

  3. Chame a API PutBucketLifecycle para atualizar as regras de ciclo de vida para Rule1+Rule2.

Como excluir uma ou mais regras de ciclo de vida?

Chamar DeleteBucketLifecycle exclui todas as regras de ciclo de vida configuradas para o bucket de uma vez. Suponha que o bucket tenha duas regras de ciclo de vida, Rule1 e Rule2, e você queira excluir apenas a Rule1. Execute as seguintes operações:

  1. Chame a API GetBucketLifecycle para obter todas as regras de ciclo de vida configuradas para o bucket, ou seja, Rule1 e Rule2.

  2. Exclua a Rule1.

  3. Chame a API PutBucketLifecycle para atualizar as regras de ciclo de vida para Rule2.

As operações de conversão de tipo e exclusão por expiração realizadas por regras de ciclo de vida são registradas em log?

Todas as operações de conversão de tipo e exclusão por expiração executadas com sucesso por regras de ciclo de vida são registradas em log. Os campos do registro de log são os seguintes:

  • Operation

    • CommitTransition: converter o tipo de armazenamento.

    • ExpireObject: excluir objetos expirados.

  • Sync Request

    lifecycle: operações de conversão e exclusão acionadas.

Para obter mais informações sobre os campos de log do OSS, consulte Log fields. Para obter informações sobre as taxas de consulta de logs, consulte Billing rules.

É possível criar uma única regra de ciclo de vida para limpar marcadores de exclusão de objetos e objetos da versão atual ao mesmo tempo?

Não. Crie primeiro uma regra para limpar os marcadores de exclusão de objetos e, em seguida, crie outra regra para excluir os objetos da versão atual.

As regras de ciclo de vida com base no último horário de modificação permitem converter objetos do tipo Infrequent Access para o tipo Standard?

Não. Converta objetos do tipo Infrequent Access para o tipo Standard usando os seguintes métodos:

  • Usando CopyObject

    CopyObject — essa API converte um único objeto do tipo Infrequent Access para o tipo Standard.

  • Usando a ferramenta ossutil

    O ossutil converte um ou mais objetos do tipo Infrequent Access para o tipo Standard por meio do comando set-meta com a opção X-Oss-Storage-Class. Para obter detalhes sobre a operação, consulte Set or update metadata.

Documentação relacionada

  • Por padrão, o OSS define o horário de envio do objeto como seu último horário de modificação. A conversão de tipo de armazenamento por regras de ciclo de vida não atualiza o último horário de modificação do objeto. Para saber quais operações afetam o atributo LastModified do objeto, consulte What are the operations that affect the LastModified attribute of OSS objects?.

  • Quando objetos dos tipos Infrequent Access, Archive, Cold Archive ou Deep Cold Archive são convertidos ou excluídos antecipadamente antes de atingir a duração mínima de armazenamento, são cobradas taxas de capacidade de armazenamento insuficiente. Para obter mais informações, consulte How am I charged for objects whose storage duration is less than the minimum storage duration?.

  • As regras de ciclo de vida só permitem conversão ou exclusão em lote de dados em todo o bucket ou correspondentes a um prefixo. Para excluir em lote dados com um sufixo específico, use o comando ossutil rm.

  • Para que o OSS monitore automaticamente os padrões de acesso aos dados, identifique dados frios e converta o tipo de armazenamento para reduzir custos, configure Regras de ciclo de vida com base no último horário de acesso.

  • Para visualizar o tipo de armazenamento de todos os objetos em um bucket, consulte List objects.