Todos os produtos
Search
Central de documentação

Object Storage Service:Lifecycle rules based on last access time

Última atualização: Jul 30, 2026

Use regras de ciclo de vida baseadas no último acesso para monitorar automaticamente os padrões de acesso aos dados e identificar dados frios. Em seguida, transfira esses dados frios identificados para uma classe de armazenamento diferente. Isso permite implementar o armazenamento em camadas para dados quentes e frios, reduzindo seus custos de armazenamento.

Cenários

  • Multimídia

    Um site armazena seus vídeos e imagens no OSS. Com o tempo, os dados históricos passam gradualmente de quentes para frios. Talvez você queira mover dados não acessados por um longo período para a classe de armazenamento Infrequent Access. No entanto, alguns dados mais antigos permanecem populares e precisam ser mantidos na classe de armazenamento Standard. Nesse cenário, utilize uma regra de ciclo de vida baseada no último acesso para identificar automaticamente dados quentes e frios para armazenamento em camadas, reduzindo assim os custos de armazenamento.

  • Álbuns de fotos ou unidades de cloud

    Defina um período de transição personalizado para mover automaticamente dados frios não acessados por um longo período para a classe de armazenamento Infrequent Access, garantindo ainda o acesso em tempo real.

  • Ciências da vida

    A grande quantidade de dados comerciais gerados pelo sequenciamento genético é frequentemente classificada como quente ou fria com base no último acesso, e não na última modificação. Anteriormente, os clientes só podiam gerenciar as camadas de dados manualmente, analisando logs ou usando outros métodos. Uma regra de ciclo de vida baseada no último acesso permite que o servidor identifique automaticamente dados quentes e frios e implemente o armazenamento em camadas. Também é possível combinar políticas baseadas tanto no último acesso quanto na última modificação dentro da mesma regra de ciclo de vida para um gerenciamento de dados mais flexível.

Limites

Sem exclusão de dados

Regras de ciclo de vida baseadas no último acesso não podem ser usadas para excluir dados.

Condições de correspondência

As regras de ciclo de vida suportam correspondência apenas com base em prefixos e tags. Correspondência por caractere curinga, sufixo e expressão regular não são suportadas.

Limites de expiração de partes

Não configure 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 será possível configurar outra regra de ciclo de vida com política de partes para quaisquer objetos nesse bucket.

  • Exemplo 2

    Caso configure uma regra de ciclo de vida com política de partes para objetos cujos nomes contenham o prefixo dir1 em um bucket, não configure outra regra de ciclo de vida com política de partes para objetos cujos nomes contenham prefixos sobrepostos, como dir1/dir2.

Observações de uso

Limite de regras

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

Semântica de sobrescrita

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

  • Chame a operação GetBucketLifecycle para consultar a Rule1.

  • Adicione tanto a Rule1 quanto a Rule2 à configuração da regra de ciclo de vida.

  • Chame a operação PutBucketLifecycle para criar a Rule1 e a Rule2 no bucket.

Tempo de vigência

Após a criação de uma regra de ciclo de vida, o OSS carrega a regra em até 24 horas. Depois que a regra é carregada, o OSS começa a executá-la às 08:00 (UTC+8) todos os dias.

Tempo de conclusão da execução

  • Depois que uma regra entra em vigor, as 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, geralmente são concluídas em 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 normalmente são concluídas em 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 será contada como uma operação separada.

Faturamento

  • Taxas de monitoramento e gerenciamento de objetos

    Ao ativar o rastreamento de acesso, taxas de monitoramento e gerenciamento de objetos são geradas. No entanto, o OSS atualmente não cobra essas taxas.

  • Taxas por não cumprir a duração mínima de armazenamento do Infrequent Access

    Objetos na classe de armazenamento Infrequent Access têm uma duração mínima de armazenamento de 30 dias. Se um objeto for armazenado por menos de 30 dias, você será cobrado pela parte restante da duração mínima. Os exemplos a seguir descrevem como esse item de faturamento funciona com as regras de ciclo de vida:

    Exemplo 1: Uma regra de ciclo de vida faz a transição de um objeto Standard para a classe de armazenamento Infrequent Access 10 dias após sua criação. Cinco dias depois, ele retorna para a classe de armazenamento Standard. Nesse caso, você é cobrado por 15 dias de armazenamento para atender ao requisito de duração mínima de armazenamento do Infrequent Access.

    Exemplo 2: Uma regra de ciclo de vida faz a transição de um objeto Standard para a classe de armazenamento Infrequent Access 10 dias após sua criação. O objeto é excluído 15 dias depois. Nesse caso, você é cobrado por 5 dias de armazenamento para atender ao requisito de duração mínima de armazenamento do Infrequent Access.

    Para obter mais informações, consulte Storage fees.

  • Taxas de recuperação de dados do Infrequent Access

    As taxas para acessar arquivos na classe de armazenamento Infrequent Access são calculadas com base na quantidade de dados recuperados. Para obter mais informações, consulte Data processing fees.

  • Taxas de solicitação

    Uma regra de ciclo de vida gera taxas de solicitação quando faz a transição da classe de armazenamento de um objeto. Para obter mais informações, consulte Request fees.

Outras considerações

  • Política de atualização do último acesso:

    Após ativar o rastreamento de acesso, o OSS atualiza o LastAccessTime de um objeto com base nas seguintes regras:

    1. Inicialização: Quando o rastreamento de acesso é ativado, o OSS define o LastAccessTime de todos os objetos no bucket para o momento em que o rastreamento foi ativado.

    2. Regras de atualização: Após a inicialização, operações como baixar ou sobrescrever um objeto atualizam o LastAccessTime do objeto. Para obter mais informações sobre quais operações atualizam o LastAccessTime de um objeto, consulte How common operations affect the last access time of objects.

    3. Mecanismo de atualização:

      • O LastAccessTime é atualizado de forma assíncrona. A atualização geralmente é concluída em 24 horas.

      • Se o mesmo objeto for acessado várias vezes dentro de 24 horas, o OSS registra o horário do primeiro acesso como o LastAccessTime do objeto. Acessos subsequentes dentro do período de 24 horas não acionam uma atualização.

  • Classes de armazenamento de objetos para transição:

    • Regras de ciclo de vida baseadas no último acesso suportam a transição de objetos da classe de armazenamento Standard para a classe Infrequent Access. Você também pode escolher se deseja fazer a transição automática de um objeto de volta para a classe Standard mediante acesso.

    • Regras baseadas no último acesso suportam a transição de objetos das classes Standard ou Infrequent Access para as classes Archive, Cold Archive ou Deep Cold Archive. Também é possível fazer a transição de objetos da classe Archive para Cold Archive ou Deep Cold Archive. Se quiser transferir objetos das classes Standard ou Infrequent Access para Archive, Cold Archive ou Deep Cold Archive, envie um ticket para solicitar permissões. Após a aprovação da sua solicitação, especifique a classe de armazenamento de destino para a transição.

      Importante

      Após a aprovação do seu ticket, se você usar uma política baseada no último acesso para transferir um objeto da classe Standard ou Infrequent Access para Archive, Cold Archive ou Deep Cold Archive, o último acesso do objeto na classe de armazenamento de destino será definido, por padrão, como o momento em que o rastreamento de acesso foi ativado para o bucket.

  • Configurar regras de ciclo de vida em um bucket com OSS-HDFS ativado:

    Para configurar ou modificar uma regra de ciclo de vida baseada no último acesso que corresponda a todos os objetos em um bucket com OSS-HDFS ativado, use o elemento NOT para excluir os objetos armazenados no diretório .dlsdata/. Isso evita que ações de exclusão de objetos ou conversão de classe de armazenamento acionadas pela regra de ciclo de vida sejam aplicadas aos dados do OSS-HDFS e, consequentemente, afetem as operações de leitura e gravação nesses dados.

Procedimento

OSS console

  1. Faça login no OSS console.

  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, ative a chave Enable Access Tracking e clique em Create Rule.

  5. No painel Create Lifecycle Rule, configure a regra de ciclo de vida conforme as descrições a seguir.

    • O bucket tem o versionamento desativado

      Seção

      Parâmetro

      Descrição

      Basic Settings

      Status

      Defina o status da regra de ciclo de vida. Selecione Enabled ou Disabled.

      • Ao ativar a regra de ciclo de vida, o OSS faz a transição das classes de armazenamento dos dados com base na regra.

      • Ao desativar a regra de ciclo de vida, a tarefa de ciclo de vida é suspensa.

      Applied To

      Selecione os objetos aos quais a regra de ciclo de vida se aplica. Escolha Objects with Specified Prefix ou Whole Bucket.

      Allow Overlapped Prefixes

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

      • Regra 1

        Faz a transição de todos os objetos com o prefixo dir1/ no bucket para a classe de armazenamento Infrequent Access 180 dias após o último acesso.

      • Regra 2

        Faz a transição de todos os objetos com o prefixo dir1/dir2/ no bucket para a classe de armazenamento Archive 30 dias após o último acesso.

      Se esta opção não estiver selecionada, o OSS rejeitará essa configuração porque os objetos no diretório dir1/dir2/ corresponderiam a ambas as regras de transição.

      Se esta opção estiver selecionada, os objetos no diretório dir1/dir2/ serão transferidos para a classe de armazenamento Archive após 30 dias. Outros objetos no diretório dir1/ serão transferidos para a classe de armazenamento Infrequent Access após 180 dias.

      Prefix

      Insira o prefixo do objeto para correspondência da regra.

      • Se você definir o prefixo como img, a regra corresponderá 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 corresponderá a todos os objetos cujos nomes começam com img/, como img/example.jpg e img/test.jpg.

      Tag

      A regra de ciclo de vida aplica-se apenas a objetos com a tag especificada. Por exemplo, se você selecionar Objects with Specified Prefix, definir o prefixo como img e definir a chave da tag como a e o valor como 1, a regra corresponderá a todos os objetos cujos nomes começam com img e que possuem a tag a=1. Para obter mais informações sobre tags de objetos, consulte Object tagging.

      NOT

      Use a opção NOT para excluir objetos que possuem um prefixo e uma tag específicos da regra de ciclo de vida.

      Importante
      • Se a opção NOT estiver ativada, especifique pelo menos um prefixo ou uma tag.

      • A chave definida para a tag na condição NOT não pode ser igual à chave definida no parâmetro Tag.

      • Se a opção NOT estiver ativada, não será possível configurar uma política de expiração de partes.

      Object Size

      Especifique o tamanho do objeto ao qual a regra de ciclo de vida se aplica.

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

      Importante

      Se você configurar tanto Minimum size quanto Maximum size na mesma regra de ciclo de vida, observe os seguintes itens:

      • Certifique-se de que o valor de Maximum size seja maior que o valor de Minimum size.

      • 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 Validity Period (Days), Expiration Date ou Disabled. Se selecionar Disabled, a política de expiração de objetos não entrará em vigor.

      Lifecycle-based Rules

      Configure a regra para fazer a transição da classe de armazenamento dos objetos. Os dados podem ser transferidos para as seguintes classes de armazenamento:

      • IA (Data Remains in IA After Access)

      • IA (Data Is Converted to Standard After Access)

      • Archive

      • Cold Archive

      • Deep Cold Archive

      Por exemplo, se você selecionar a política Access Time, definir Validity Period (Days) como 30 e especificar que os dados devem ser transferidos automaticamente para IA (Data Remains in IA After Access) após o período especificado, um objeto acessado pela última vez em 1º de setembro de 2021 será transferido para essa classe de armazenamento em 1º de outubro de 2021.

      Policy for Parts

      Part Lifecycle

      Defina a ação a ser executada em partes expiradas. Se você tiver especificado uma Tag, não será possível configurar este parâmetro. Selecione Validity Period (Days) ou Expiration Date para a política de expiração de partes, ou selecione Disabled. Se 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

      Especifique quando as partes expiram com base no período de validade ou na data de expiração selecionada na política de expiração de partes. Partes expiradas são excluídas automaticamente e não podem ser recuperadas.

    • O bucket tem o versionamento ativado

      Após ativar o versionamento, os itens de configuração nas seções Basic Settings e Policy for Parts são configurados da mesma forma que quando o versionamento está desativado. A tabela a seguir descreve apenas as diferenças de configuração quando o versionamento está ativado.

      Seção

      Parâmetro

      Descrição

      Policy for Current Versions

      Clear delete markers

      Quando o versionamento está ativado, a opção Clear Delete Markers é adicionada à política de limpeza. As outras opções permanecem iguais às do versionamento desativado.

      Se você selecionar esta opção e a versão atual de um objeto for a única versão e for um marcador de exclusão, o OSS removerá 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 de exclusão. Para obter mais informações sobre marcadores de exclusão, consulte Delete markers.

      Policy for Previous Versions

      Object Lifecycle

      Defina a política de expiração para versões não atuais de objetos. Selecione Validity Period (Days) ou Disabled. Se selecionar Disabled, a política de expiração de objetos não entrará em vigor.

      Lifecycle-based Rules

      Defina um período de N dias. Após o acesso a uma versão não atual de um objeto, ela será transferida para uma classe de armazenamento diferente após N dias. Por exemplo, se você definir o período como 30 dias, uma versão não atual acessada em 1º de setembro de 2021 será transferida para a classe de armazenamento especificada em 1º de outubro de 2021.

  6. Clique em OK.

    Após salvar a regra, ela aparecerá na lista de políticas.

SDK

Os SDKs do OSS para Java, Go, Python e PHP suportam a criação de regras de ciclo de vida baseadas no último acesso. Antes de criar uma regra de ciclo de vida baseada no último acesso, ative o rastreamento de acesso para o bucket especificado. Para códigos de exemplo, 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.model.*;
import java.util.ArrayList;
import java.util.List;

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 {
            ossClient.putBucketAccessMonitor(bucketName, AccessMonitor.AccessMonitorStatus.Enabled.toString());
            // Create a lifecycle rule and set the ID to rule1. Specify that the storage classes of objects whose names contain the logs prefix and whose size is less than or equal to 64 KB are changed to IA 30 days after the objects are last accessed. In addition, specify that the objects whose name contain the logs prefix are still stored as IA objects when the objects are accessed again. 
            LifecycleRule lifecycleRule = new LifecycleRule("rule1", "logs", LifecycleRule.RuleStatus.Enabled);
            List<LifecycleRule> lifecycleRuleList = new ArrayList<LifecycleRule>();
            SetBucketLifecycleRequest setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);

            LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.IA);
            storageTransition.setExpirationDays(30);
            storageTransition.setIsAccessTime(true);
            storageTransition.setReturnToStdWhenVisit(false);
            storageTransition.setAllowSmallFile(true);
            List<LifecycleRule.StorageTransition> storageTransitionList = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransitionList.add(storageTransition);
            lifecycleRule.setStorageTransition(storageTransitionList);
            lifecycleRuleList.add(lifecycleRule);
            
            // Create a lifecycle rule and set the ID to rule2. Specify that the previous versions of the objects whose names contain the dir prefix and whose size is greater than 64 KB are changed to IA 10 days after the objects are last accessed. In addition, specify that the storage classes of the objects whose names contain the dir prefix are changed to Standard when the objects are accessed again. 
            LifecycleRule lifecycleRule2 = new LifecycleRule("rule2", "dir", LifecycleRule.RuleStatus.Enabled);
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition = new LifecycleRule.NoncurrentVersionStorageTransition();
            noncurrentVersionStorageTransition.setStorageClass(StorageClass.IA);
            noncurrentVersionStorageTransition.setNoncurrentDays(10);
            noncurrentVersionStorageTransition.setIsAccessTime(true);
            noncurrentVersionStorageTransition.setReturnToStdWhenVisit(true);
            noncurrentVersionStorageTransition.setAllowSmallFile(false);

            List<LifecycleRule.NoncurrentVersionStorageTransition> noncurrentVersionStorageTransitionList = new ArrayList<LifecycleRule.NoncurrentVersionStorageTransition>();
            noncurrentVersionStorageTransitionList.add(noncurrentVersionStorageTransition);
            lifecycleRule2.setNoncurrentVersionStorageTransitions(noncurrentVersionStorageTransitionList);
            lifecycleRuleList.add(lifecycleRule2);

            setBucketLifecycleRequest.setLifecycleRules(lifecycleRuleList);

            // Configure the lifecycle rules. 
            ossClient.setBucketLifecycle(setBucketLifecycleRequest);
        } 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();
            }
        }
    }
}

Python

import argparse
import datetime
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="put bucket lifecycle sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
  args = parser.parse_args()
  credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
  cfg = oss.config.load_default()
  cfg.credentials_provider = credentials_provider
  cfg.region = args.region
  if args.endpoint is not None:
    cfg.endpoint = args.endpoint
  client = oss.Client(cfg)

  result = client.put_bucket_lifecycle(oss.PutBucketLifecycleRequest(
    bucket=args.bucket,
    lifecycle_configuration=oss.LifecycleConfiguration(
      rules=[
        oss.LifecycleRule(
          id='rule1',
          status='Enabled',
          prefix='data/',
          transitions=[oss.LifecycleRuleTransition(
            days=200,
            storage_class=oss.StorageClassType.IA,
            is_access_time=True,
            return_to_std_when_visit=False
          )]
        ),
        oss.LifecycleRule(
          id='rule2',
          status='Enabled',
          prefix='log/',
          transitions=[
            oss.LifecycleRuleTransition(
              days=120,
              storage_class=oss.StorageClassType.IA,
              is_access_time=True,
              return_to_std_when_visit=False
            ),
            oss.LifecycleRuleTransition(
              days=250,
              storage_class=oss.StorageClassType.ARCHIVE
              # If is_access_time is not set, the rule is based on the last modified time by default.
            )
          ]
        )
      ]
    )
  ))

  print(f'status code: {result.status_code}, '
        f'request id: {result.request_id}')

if __name__ == "__main__":
  main()

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{
				{
					// In lifecycle rule "rule1", transition all objects with the prefix "data/"
					// to the Infrequent Access (IA) storage class 200 days after they are last accessed.
					// When these objects are accessed again, they remain in the IA storage class.
					ID:     oss.Ptr("rule1"),
					Status: oss.Ptr("Enabled"),
					Prefix: oss.Ptr("data/"),
					Transitions: []oss.LifecycleRuleTransition{
						{
							Days:                 oss.Ptr(int32(200)),
							StorageClass:         oss.StorageClassIA,
							IsAccessTime:         oss.Ptr(true), // Set to true for a rule based on last access time.
							ReturnToStdWhenVisit: oss.Ptr(false),
						},
					},
				},
				{
					// In lifecycle rule "rule2", transition all objects with the prefix "log/"
					// to the Infrequent Access (IA) storage class 120 days after they are last accessed.
					// When these objects are accessed again, they remain in the IA storage class.
					// A single rule cannot contain more than one IsAccessTime=true Transition.
					// The 250-day Archive transition is configured in a separate rule (rule3) below.
					ID:     oss.Ptr("rule2"),
					Status: oss.Ptr("Enabled"),
					Prefix: oss.Ptr("log/"),
					Transitions: []oss.LifecycleRuleTransition{
						{
							Days:                 oss.Ptr(int32(120)),
							StorageClass:         oss.StorageClassIA,
							IsAccessTime:         oss.Ptr(true), // Set to true for a rule based on last access time.
							ReturnToStdWhenVisit: oss.Ptr(false),
						},
					},
				},
				{
					// In lifecycle rule "rule3", transition all objects with the prefix "log/"
					// to the Archive storage class 250 days after they are last accessed.
					// When these objects are accessed again, they remain in the Archive storage class.
					// This rule is separate from rule2 because a single rule cannot contain
					// more than one IsAccessTime=true Transition.
					ID:     oss.Ptr("rule3"),
					Status: oss.Ptr("Enabled"),
					Prefix: oss.Ptr("log/"),
					Transitions: []oss.LifecycleRuleTransition{
						{
							Days:                 oss.Ptr(int32(250)),
							StorageClass:         oss.StorageClassArchive,
							IsAccessTime:         oss.Ptr(true), // Set to true for a rule based on last access time.
							ReturnToStdWhenVisit: oss.Ptr(false),
						},
					},
				},
			},
		},
	}

	// 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)
}

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);

{}
$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.
            isAccessTime: 'true', // Trigger the change based on the last access time.
            returnToStdWhenVisit: 'true' // Return to the Standard storage class after they are accessed.
        )
    ),
    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.
);

ossutil

Use o ossutil para configurar regras de ciclo de vida. Para obter mais informações sobre como instalar o ossutil, consulte Install ossutil.

O exemplo a seguir mostra como configurar 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\",\"IsAccessTime\":true,\"ReturnToStdWhenVisit\":true},\"AbortMultipartUpload\":{\"Days\":\"10\"}}}"

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

Referência da API

As operações anteriores são baseadas em chamadas de API. Se precisar de um alto grau de personalização, envie solicitações REST API diretamente. Isso exige que você escreva seu próprio código para calcular assinaturas. Para obter mais informações, consulte PutBucketLifecycle.

Perguntas frequentes

O que acontece se eu criar duas regras de ciclo de vida para objetos que têm o mesmo prefixo em um bucket, onde uma regra é baseada na última modificação e a outra no último acesso?

Por exemplo, você cria duas regras de ciclo de vida para o bucket de destino chamado examplebucket. A Regra 1 especifica que todos os objetos com o prefixo doc são excluídos 30 dias após a última modificação. A Regra 2 especifica que todos os objetos com o prefixo doc são transferidos para a classe de armazenamento Infrequent Access 30 dias após o último acesso.

O OSS executa regras de ciclo de vida com base no princípio de minimizar os custos do usuário. Portanto, apenas a Regra 1 entra em vigor. Isso ocorre porque a Regra 1 especifica que os objetos correspondentes são excluídos após 30 dias, após os quais nenhuma taxa é incorrida. Em contraste, a Regra 2 transfere objetos para a classe de armazenamento Infrequent Access, o que ainda gera taxas de armazenamento e taxas de recuperação de dados.

Quando uma alteração em uma regra de ciclo de vida configurada entra em vigor e como os dados que correspondiam à regra original são tratados?

Por exemplo, você configurou uma regra de ciclo de vida para objetos com o prefixo er serem transferidos para a classe de armazenamento Infrequent Access 30 dias após o último acesso e, em seguida, retornarem à classe de armazenamento Standard se forem acessados após mais 30 dias. No entanto, 35 dias após o último acesso, você altera o prefixo na regra de ciclo de vida de er para re. Nesse caso, os objetos originais apenas fazem a transição para a classe de armazenamento Infrequent Access. A transição subsequente para a classe de armazenamento Standard não ocorre. O último acesso para objetos que correspondem à nova regra também é contado a partir do momento em que o rastreamento de acesso foi ativado para o bucket.

Se o Intelligent Tiering estiver ativado em um bucket com versionamento habilitado, como as camadas de armazenamento se aplicam a diferentes versões de um objeto?

Cada objeto em um bucket com versionamento habilitado possui um ID de versão exclusivo, e objetos com IDs de versão diferentes são independentes entre si. Portanto, uma versão não atual de um objeto pode estar na classe de armazenamento Infrequent Access enquanto a versão atual está na classe de armazenamento Standard.

Posso desativar o rastreamento de acesso?

Sim, desde que não existam regras de ciclo de vida baseadas no último acesso no bucket. Após desativar o rastreamento de acesso, o sistema para de rastrear o último acesso dos objetos. Na próxima vez que você ativar o rastreamento de acesso, o sistema atualizará o último acesso de todos os objetos.

Referências

O último acesso (LastAccessTime) é um atributo importante de um objeto e é usado em cenários como faturamento e regras de ciclo de vida. Após ativar o rastreamento de acesso para um bucket, algumas operações em um objeto podem atualizar seu LastAccessTime. Para obter mais informações, consulte How common operations affect the last access time of objects.