Configure regras de ciclo de vida com base no último acesso aos objetos em um bucket do Object Storage Service (OSS). Após a configuração, o OSS monitora os padrões de acesso dos objetos no bucket, identifica dados frios e os move automaticamente para a classe de armazenamento especificada. Isso permite o armazenamento em camadas e a redução de custos.
Casos de uso
-
Multimídia
Ao armazenar vídeos e imagens de um site em um bucket do OSS, parte dos dados pode tornar-se pouco acessada com o tempo. Para esses dados, altere a classe de armazenamento para Acesso Pouco Frequente (IA). Já para dados enviados há muito tempo, mas ainda acessados frequentemente, mantenha a classe de armazenamento Standard. Configure uma regra de ciclo de vida para o bucket baseada no último acesso aos objetos. Dessa forma, dados frios e quentes ficam em classes de armazenamento diferentes, o que reduz os custos.
-
Álbuns ou discos de rede
Um bucket pode armazenar álbuns de fotos ou funcionar como disco de rede. Para reduzir custos de armazenamento de dados pouco acessados e manter o acesso em tempo real, configure uma regra de ciclo de vida. Assim, os dados serão movidos automaticamente para a classe de armazenamento IA após o número especificado de dias desde o último acesso.
-
Ciências da vida
O sequenciamento genético gera grande volume de dados. Na maioria dos casos, a frequência de acesso é determinada pelo último acesso, e não pela última modificação. Embora seja possível implementar manualmente o armazenamento em camadas com base em análise de logs, configurar uma regra de ciclo de vida baseada no último acesso é mais eficiente. O OSS identifica automaticamente dados frios e quentes e os armazena nas classes adequadas. Também é possível definir políticas baseadas no último acesso e na última modificação na mesma regra para gerenciar dados com maior flexibilidade.
Limites
Exclusão de dados
Não é possível excluir dados usando regras de ciclo de vida baseadas no último acesso.
Condições de correspondência
As regras de ciclo de vida suportam correspondência apenas por prefixos e tags. Não há suporte para correspondência por curingas, sufixos ou expressões regulares.
Ciclo de vida 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 com uma política de partes para um bucket, não será possível configurar outra regra com política de partes para nenhum objeto nesse bucket.
-
Exemplo 2
Se você configurar uma regra de ciclo de vida com uma política de partes para objetos cujos nomes contenham o prefixo dir1 em um bucket, não poderá criar outra regra com política de partes para objetos com prefixos sobrepostos, como dir1/dir2.
Observações de uso
Quantidade de regras de ciclo de vida
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 no último acesso.
Taxas
-
Taxas de monitoramento e gerenciamento de objetos
Ao ativar o rastreamento de acesso para um bucket, são geradas taxas de monitoramento e gerenciamento de objetos. No entanto, essas taxas não são cobradas.
-
Taxas de armazenamento para objetos IA armazenados por menos que a duração mínima
Objetos IA têm duração mínima de armazenamento de 30 dias. Há cobrança pelo uso de armazenamento de objetos IA mantidos por menos tempo que o mínimo. Os exemplos a seguir mostram como a cobrança funciona ao configurar regras de ciclo de vida baseadas no último acesso:
Exemplo 1: O OSS converte um objeto Standard para IA 10 dias após a criação e o reconverte para Standard após 5 dias, conforme a regra configurada. Nesse caso, há cobrança pelo armazenamento do objeto IA durante o período inferior à duração mínima (15 dias).
Exemplo 2: O OSS converte um objeto Standard para IA 10 dias após a criação e exclui o objeto IA após 15 dias, conforme a regra. Aqui, a cobrança refere-se ao armazenamento do objeto IA pelo período restante da duração mínima (5 dias).
Para mais informações, consulte Taxas de armazenamento.
-
Taxas de recuperação de objetos IA
Ao acessar objetos IA, você paga taxas de recuperação de dados com base no tamanho dos objetos recuperados. Para mais detalhes, veja Taxas de processamento de dados.
-
Taxas de chamadas de API
A conversão de classes de armazenamento via regras de ciclo de vida gera taxas de chamada de API. Consulte Taxas de solicitação para mais informações.
Semântica de substituição
A operação PutBucketLifecycle substitui as configurações existentes de uma regra de ciclo de vida do bucket. Por exemplo, se já existir uma regra chamada Rule1 e você quiser adicionar outra chamada Rule2, siga estes passos:
Chame a operação GetBucketLifecycle para consultar a Rule1.
Adicione tanto a Rule1 quanto a Rule2 à configuração de regras de ciclo de vida.
Chame a operação PutBucketLifecycle para criar a Rule1 e a Rule2 no bucket.
Período de vigência
Após configurar uma regra de ciclo de vida, o OSS a carrega dentro de 24 horas. Depois de carregada, a regra é executada diariamente às 08:00:00 (UTC+8).
Tempo de conclusão
Depois que uma regra entra em vigor, operações como exclusão de objetos, transição de classe de armazenamento e expiração de partes de upload multipart são geralmente concluídas em até 24 horas para até 1 bilhão de objetos nas regiões China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen) e Singapura. Em outras regiões, essas operações costumam ser concluídas em 24 horas para até 100 milhões de objetos.
-
A execução pode levar mais de 24 horas — às vezes dias ou semanas — se houver muitos objetos para verificar, muitas tags, várias versões de um único objeto ou alto volume de novos objetos sendo gravados enquanto a tarefa está em andamento.
NotaSe o versionamento estiver ativado no bucket, cada operação em uma versão do objeto conta como uma operação separada.
Políticas de atualização do último acesso
Com o rastreamento de acesso ativado, o último acesso (LastAccessTime) de um objeto é atualizado conforme as seguintes regras:
Inicialização: Ao ativar o rastreamento de acesso, o
LastAccessTimede todos os objetos no bucket é definido com o timestamp desse evento.Regras de atualização: Operações como download ou sobrescrita de um objeto atualizam seu
LastAccessTime. Para saber quais operações afetam oLastAccessTime, consulte Como as operações comuns afetam o LastAccessTime dos objetos?.-
Mecanismo de atualização:
O
LastAccessTimeé atualizado de forma assíncrona, geralmente dentro de 24 horas.Dentro de uma janela de 24 horas, se o mesmo objeto for acessado várias vezes, o OSS registra o timestamp do primeiro acesso como o
LastAccessTimedo objeto. Acessos subsequentes nesse período não disparam nova atualização.
Classes de armazenamento suportadas
Use uma regra de ciclo de vida baseada no último acesso para mover objetos de Standard para IA e defina se eles devem retornar para Standard após serem acessados novamente.
-
Também é possível mover objetos de Standard ou IA para Archive, Cold Archive ou Deep Cold Archive, ou de Archive para Cold Archive ou Deep Cold Archive. Para mover objetos de Standard ou IA para Archive, Cold Archive ou Deep Cold Archive, abra um ticket para solicitar as permissões necessárias primeiro. Após a aprovação, especifique a classe de armazenamento de destino.
ImportanteApós a aprovação, se você usar uma regra baseada no último acesso para mover um objeto de Standard ou IA para Archive, Cold Archive ou Deep Cold Archive, o último acesso do objeto arquivado corresponderá ao momento em que o rastreamento de acesso foi ativado no bucket.
Configurar regra de ciclo de vida em 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 impede que ações de exclusão ou conversão de classe de armazenamento disparadas pela regra afetem os dados do OSS-HDFS e prejudiquem as operações de leitura e escrita.

Métodos
Usar o console do OSS
Faça login no console do OSS.
No painel de navegação à esquerda, clique em Buckets. Na página exibida, clique no nome do bucket desejado.
Na árvore de navegação à esquerda, escolha Data Management > Lifecycle.
Na página Lifecycle, ative Enable Access Tracking e clique em Create Rule.
-
No painel Create Rule, configure os parâmetros. A tabela a seguir descreve cada parâmetro.
-
Parâmetros para buckets sem versionamento
Seção
Parâmetro
Descrição
Basic Settings
Status
Defina o status da regra de ciclo de vida. Selecione Enabled ou Disabled.
-
Ao ativar uma regra, o OSS executa as ações especificadas nos objetos definidos.
-
Ao desativar uma regra, as tarefas de gerenciamento de ciclo de vida associadas são interrompidas.
Applied To
Especifique os objetos aos quais a regra se aplica. Escolha Objects with Specified Prefix ou Whole Bucket.
Allow Overlapped Prefixes
Por padrão, o OSS verifica se há sobreposição de prefixos entre as regras. Suponha que o bucket já tenha uma regra (Rule 1) e você queira criar outra (Rule 2) com prefixo sobreposto:
-
Rule 1
Converter a classe de armazenamento de todos os objetos com o prefixo dir1/ no bucket para IA, 30 dias após a última modificação.
-
Rule 2
Converter todos os objetos com o prefixo dir1/dir2/ no bucket para Archive, 30 dias após o último acesso.
Sem essa opção marcada, o OSS detecta que os objetos no diretório dir1/dir2/ correspondem a duas regras e bloqueia a criação da Rule 2.
Com a opção marcada, a Rule 2 é criada. Os objetos em dir1/dir2/ serão convertidos para Archive após 30 dias. Os demais objetos em dir1/ serão convertidos para IA após 180 dias.
Prefix
Defina o prefixo nos nomes dos objetos aos quais a regra se aplica.
-
Se o prefixo for img, todos os objetos com esse prefixo no nome, como imgtest.png e img/example.jpg, corresponderão à regra.
-
Se o prefixo for img/, apenas objetos como img/example.jpg e img/test.jpg corresponderão à regra.
Tag
Defina tags. A regra só se aplica a objetos que possuem as tags especificadas. Por exemplo, se selecionar Objects with Specified Prefix, definir o prefixo como img e especificar uma tag com chave a e valor 1, a regra valerá para todos os objetos com o prefixo img e a tag a=1. Para mais detalhes sobre tags, veja Marcar objetos com tags.
NOT
Indique que a regra não deve ser aplicada a objetos com o prefixo e a tag especificados.
Importante-
Ao ativar o NOT, é obrigatório especificar pelo menos um dos parâmetros Prefix ou Tag.
-
A chave da tag no parâmetro NOT não pode ser igual à chave definida no parâmetro Tag.
-
Com o NOT ativado, não é possível incluir uma política de partes na regra.
Object Size
Defina o tamanho dos objetos aos quais a regra se aplica.
-
Minimum Size: A regra vale apenas para objetos maiores que o tamanho definido. O mínimo deve ser maior que 0 B e menor que 5 TB.
-
Maximum Size: A regra vale apenas para objetos menores que o tamanho definido. O máximo deve ser maior que 0 B e menor ou igual a 5 TB.
ImportanteAo definir tamanho mínimo e máximo na mesma regra, observe o seguinte:
-
O tamanho máximo deve ser maior que o mínimo.
-
Não é permitido incluir política de partes na regra.
-
Não é permitido incluir política para remover marcadores de exclusão.
Policy for Objects
Object Lifecycle
Defina a política de expiração de objetos. Selecione Validity Period (Days), Expiration Date ou Disabled. Se escolher Disabled, nenhuma política de expiração será configurada.
Lifecycle-based Rules
Defina políticas de conversão de classe de armazenamento. Valores válidos:
-
IA (Not Converted After Access)
-
IA (Converted to Standard After Access)
-
Archive
-
Cold Archive
-
Deep Cold Archive
Por exemplo, ao selecionar Access Time, definir Validity Period como 30 e mudar a classe para IA (Not Converted After Access), um objeto acessado pela última vez em 1º de setembro de 2021 será convertido para IA em 1º de outubro de 2021.
Policy for Parts
Part Lifecycle
Defina a ação para partes expiradas. Se a opção Tag estiver ativada, este parâmetro fica indisponível. Selecione Validity Period (Days), Expiration Date ou Disabled. Escolhendo Disabled, nenhuma política de expiração de partes será aplicada.
ImportanteUma regra de ciclo de vida deve conter pelo menos uma política de expiração de objetos ou de partes.
Rules for Parts
Defina quando as partes expiram usando um período de validade ou data específica. Partes expiradas são excluídas automaticamente e não podem ser recuperadas.
-
-
Parâmetros para buckets com versionamento
Configure os parâmetros nas seções Basic Settings e Policy for Parts da mesma forma que em buckets sem versionamento. A tabela abaixo descreve apenas os parâmetros específicos para buckets versionados.
Seção
Parâmetro
Descrição
Policy for Current Versions
Removal of Delete Marker
Em buckets versionados, a opção Removal of Delete Marker aparece no parâmetro Object Lifecycle. Os demais parâmetros seguem o mesmo padrão de buckets sem versionamento.
Se você selecionar Removal of Delete Marker e o objeto tiver apenas uma versão que seja um marcador de exclusão, o OSS considerará esse marcador expirado e o removerá. Caso o objeto tenha múltiplas versões e a atual seja um marcador de exclusão, o OSS o manterá. Para mais informações, consulte Marcador de exclusão.
Policy for Previous Versions
Object Lifecycle
Defina quando as versões anteriores expiram. Selecione Validity Period (Days) ou Disabled. Ao escolher Disabled, nenhuma política será aplicada aos objetos.
Lifecycle-based Rules
Especifique quantos dias os objetos podem ser retidos após se tornarem versões anteriores. No dia seguinte à expiração, elas serão movidas para a classe de armazenamento definida. Por exemplo, com Validity Period (Days) igual a 30, objetos que viraram versões anteriores em 1º de setembro de 2021 serão movidos em 1º de outubro de 2021.
ImportanteO momento em que um objeto se torna uma versão anterior corresponde à geração da próxima versão.
-
-
Clique em OK.
Após a criação, a regra aparecerá na lista de regras de ciclo de vida.
Usar SDKs do OSS
Apenas o OSS SDK for Java e o OSS SDK for Go permitem criar regras de ciclo de vida baseadas no último acesso. Antes de criar a regra, ative o rastreamento de acesso no bucket. Para ver exemplos de código, consulte Visão geral.
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(®ion, "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.
);
Usar ossutil
Configure regras de ciclo de vida usando o ossutil. Para instalar o ossutil, consulte Instalar ossutil.
O exemplo abaixo mostra como configurar uma regra para 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 mais detalhes, veja put-bucket-lifecycle.
Operação de API relacionada
A API abaixo fornece a infraestrutura essencial para executar as operações mencionadas. Se sua aplicação exigir alta personalização, chame diretamente a API RESTful do OSS. Para chamadas diretas, inclua o cálculo de assinatura no código. Consulte PutBucketLifecycle para mais informações.
Perguntas frequentes
O que acontece se eu configurar simultaneamente uma regra baseada na última modificação e outra no último acesso para objetos com o mesmo prefixo?
Suponha que você configure duas regras para o bucket examplebucket. A primeira exclui todos os objetos com o prefixo doc 30 dias após a última modificação. A segunda converte a classe de armazenamento desses mesmos objetos para IA 30 dias após o último acesso.
Nesse cenário, apenas a primeira regra terá efeito, pois o OSS prioriza a regra que gera menores custos. Com a primeira regra, não há cobranças após a exclusão dos objetos. Já a segunda regra geraria taxas de armazenamento ou recuperação após a conversão da classe.
Quando uma regra modificada entra em vigor e o que acontece com os objetos da regra original?
Imagine uma regra para objetos com prefixo er que converte a classe para IA 30 dias após o último acesso e retorna para Standard se acessados novamente após 30 dias em IA. Se você alterar o prefixo de er para re 35 dias após o último acesso dos objetos com prefixo er, esses objetos já estarão em IA e não poderão retornar para Standard pela regra antiga. Após a modificação, o último acesso dos objetos com o novo prefixo re será definido como a data em que o rastreamento de acesso foi ativado no bucket.
Como os objetos são armazenados em buckets versionados com regras baseadas no último acesso?
Cada objeto em um bucket versionado possui um ID de versão único, e objetos com IDs diferentes são armazenados separadamente. Ao aplicar regras baseadas no último acesso, a classe de armazenamento da versão atual pode diferir da classe de uma versão anterior do mesmo objeto.
É possível desativar o rastreamento de acesso?
Sim. Antes de desativar o rastreamento em um bucket, certifique-se de que não existam regras de ciclo de vida baseadas no último acesso. Após a desativação, o OSS para de registrar o último acesso dos objetos. Ao reativar o recurso posteriormente, o último acesso dos objetos será atualizado.
Referências
O LastAccessTime (último acesso) é um atributo fundamental dos objetos do OSS, utilizado em cenários como faturamento e regras de ciclo de vida. Com o rastreamento de acesso ativado no bucket, certas operações podem atualizar esse atributo. Para mais detalhes, consulte Como as operações comuns afetam o LastAccessTime dos objetos?