Las reglas de ciclo de vida basadas en la hora del último acceso permiten monitorear automáticamente los patrones de acceso a los datos e identificar los datos fríos. Después, puede trasladar esos datos fríos a otra clase de almacenamiento. De esta forma, implementa un almacenamiento por niveles para datos calientes y fríos, lo que reduce sus costos de almacenamiento.
Escenarios
-
Multimedia
Un sitio web almacena sus videos e imágenes en OSS. Con el tiempo, los datos históricos pasan gradualmente de calientes a fríos. Es posible que desee trasladar los datos sin accesos recientes a la clase de almacenamiento Infrequent Access. Sin embargo, algunos datos antiguos siguen siendo populares y deben permanecer en la clase de almacenamiento Standard. En este escenario, utilice una regla de ciclo de vida basada en la hora del último acceso para identificar automáticamente los datos calientes y fríos. Así implementará un almacenamiento por niveles y reducirá los costos de almacenamiento.
-
Álbumes de fotos o unidades en la nube
Establezca un periodo de transición personalizado para mover automáticamente los datos fríos que no han tenido accesos durante mucho tiempo a la clase de almacenamiento Infrequent Access. Al mismo tiempo, se garantiza el acceso en tiempo real.
-
Ciencias biológicas
El gran volumen de datos empresariales generado por la secuenciación genética suele clasificarse como caliente o frío según la hora del último acceso, no por la última modificación. Anteriormente, los clientes solo podían gestionar los niveles de datos de forma manual mediante el análisis de registros u otros métodos. Una regla de ciclo de vida basada en la hora del último acceso permite que el servidor identifique automáticamente los datos calientes y fríos para implementar un almacenamiento por niveles. También puede combinar directivas basadas en la hora del último acceso y en la de la última modificación dentro de la misma regla de ciclo de vida. Esto le brinda una gestión de datos más flexible.
Límites
No data deletion
Las reglas de ciclo de vida basadas en la hora del último acceso no sirven para eliminar datos.
Matching conditions
Las reglas de ciclo de vida solo admiten coincidencias basadas en prefijos y etiquetas. No son compatibles con coincidencias por comodines, sufijos ni expresiones regulares.
Part expiration limits
No configure dos o más reglas de ciclo de vida que contengan una directiva de ciclo de vida de partes para objetos cuyos nombres tengan prefijos superpuestos. A continuación se muestran algunos ejemplos:
-
Ejemplo 1
Si configura una regla de ciclo de vida con una directiva de partes para un bucket, no podrá configurar otra regla de ciclo de vida con una directiva de partes para ningún objeto de ese bucket.
-
Ejemplo 2
Si configura una regla de ciclo de vida con una directiva de partes para objetos cuyo nombre contiene el prefijo dir1 en un bucket, no podrá configurar otra regla de ciclo de vida con una directiva de partes para objetos con prefijos superpuestos, como dir1/dir2.
Notas de uso
Rule limit
Un bucket admite hasta 1000 reglas de ciclo de vida. Una regla de ciclo de vida puede contener tanto directivas basadas en la hora de la última modificación como directivas basadas en la hora del último acceso.
Overwrite semantics
La operación PutBucketLifecycle sobrescribe las configuraciones existentes de una regla de ciclo de vida de un bucket. Por ejemplo, si un bucket tiene configurada una regla de ciclo de vida llamada Rule1 y desea agregar otra llamada Rule2, siga estos pasos:
Llame a la operación GetBucketLifecycle para consultar Rule1.
Agregue Rule1 y Rule2 a la configuración de la regla de ciclo de vida.
Llame a la operación PutBucketLifecycle para crear Rule1 y Rule2 en el bucket.
Effective time
Después de crear una regla de ciclo de vida, OSS carga la regla en un plazo de 24 horas. Una vez cargada, OSS comienza a ejecutarla todos los días a las 08:00 (UTC+8).
Execution completion time
Una vez que la regla entra en vigor, las operaciones de ciclo de vida (como la eliminación de objetos, el cambio de clase de almacenamiento y la expiración de partes de cargas multiparte) suelen completarse en menos de 24 horas para un máximo de mil millones de objetos. Esto aplica en las regiones China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen) y Singapore. En otras regiones, estas operaciones suelen completarse en menos de 24 horas para un máximo de 100 millones de objetos.
-
La ejecución puede tardar más de 24 horas y, en algunos casos, varios días o semanas. Esto ocurre si hay muchos objetos por analizar, muchos objetos afectados por la regla de ciclo de vida, muchas etiquetas, múltiples versiones de un solo objeto o un alto volumen de objetos nuevos escritos mientras se ejecuta la tarea de ciclo de vida.
NotaSi el control de versiones está habilitado en el bucket, cada operación sobre una versión de un objeto se cuenta como una operación independiente.
Billing
-
Cargos por monitoreo y gestión de objetos
Al habilitar el seguimiento de accesos, se generan cargos por monitoreo y gestión de objetos. Sin embargo, OSS actualmente no cobra estos cargos.
-
Cargos por no cumplir la duración mínima de almacenamiento en Infrequent Access
Los objetos en la clase de almacenamiento Infrequent Access tienen una duración mínima de almacenamiento de 30 días. Si un objeto se almacena por menos de 30 días, se le cobra la parte restante de esa duración mínima. Los siguientes ejemplos describen cómo funciona este concepto de facturación con las reglas de ciclo de vida:
Ejemplo 1: Una regla de ciclo de vida traslada un objeto de Standard a la clase de almacenamiento Infrequent Access 10 días después de su creación. Cinco días más tarde, lo regresa a la clase de almacenamiento Standard. En este caso, se le cobran 15 días de almacenamiento para cumplir con el requisito de duración mínima de Infrequent Access.
Ejemplo 2: Una regla de ciclo de vida traslada un objeto de Standard a la clase de almacenamiento Infrequent Access 10 días después de su creación. El objeto se elimina 15 días más tarde. En este caso, se le cobran 5 días de almacenamiento para cumplir con el requisito de duración mínima de Infrequent Access.
Para obtener más información, consulte Storage fees.
-
Cargos por recuperación de datos en Infrequent Access
Los cargos por acceder a archivos en la clase de almacenamiento Infrequent Access se calculan según la cantidad de datos recuperados. Para obtener más información, consulte Data processing fees.
-
Cargos por solicitudes
Una regla de ciclo de vida genera cargos por solicitudes cuando cambia la clase de almacenamiento de un objeto. Para obtener más información, consulte Request fees.
Otras consideraciones
-
Directiva de actualización de la hora del último acceso:
Cuando se habilita el seguimiento de accesos, OSS actualiza el valor
LastAccessTimede un objeto según las siguientes reglas:Inicialización: Cuando se habilita el seguimiento de accesos, OSS establece el LastAccessTime de todos los objetos del bucket con la hora exacta en la que se habilitó esta función.
Reglas de actualización: Después de la inicialización, operaciones como descargar o sobrescribir un objeto actualizan el valor
LastAccessTimedel objeto. Para conocer qué operaciones actualizan el valorLastAccessTimede un objeto, consulte How common operations affect the last access time of objects.-
Mecanismo de actualización:
El valor
LastAccessTimese actualiza de forma asíncrona. Esta actualización suele completarse en un plazo de 24 horas.Si se accede al mismo objeto varias veces en un lapso de 24 horas, OSS registra la hora del primer acceso como el valor
LastAccessTimedel objeto. Los accesos posteriores dentro de ese periodo de 24 horas no activan ninguna actualización.
-
Clases de almacenamiento de destino para la transición:
Las reglas de ciclo de vida basadas en la hora del último acceso admiten el traslado de objetos de la clase de almacenamiento Standard a la clase de almacenamiento Infrequent Access. También puede elegir si desea que un objeto regrese automáticamente a la clase de almacenamiento Standard cuando se acceda a él.
-
Las reglas de ciclo de vida basadas en la hora del último acceso admiten el traslado de objetos de la clase de almacenamiento Standard o Infrequent Access a las clases Archive, Cold Archive o Deep Cold Archive. También puede trasladar objetos de la clase de almacenamiento Archive a Cold Archive o Deep Cold Archive. Si desea trasladar objetos de la clase de almacenamiento Standard o Infrequent Access a Archive, Cold Archive o Deep Cold Archive, envíe un ticket para solicitar los permisos. Una vez aprobada su solicitud, debe especificar la clase de almacenamiento de destino para la transición.
ImportanteDespués de aprobarse su ticket, si utiliza una directiva basada en la hora del último acceso para trasladar un objeto de la clase de almacenamiento Standard o Infrequent Access a Archive, Cold Archive o Deep Cold Archive, la hora del último acceso del objeto en la clase de destino será, de manera predeterminada, la hora en la que se habilitó el seguimiento de accesos para el bucket.
-
Configurar reglas de ciclo de vida en un bucket con OSS-HDFS habilitado:
Para configurar o modificar una regla de ciclo de vida basada en la hora del último acceso que coincida con todos los objetos de un bucket con OSS-HDFS habilitado, utilice el elemento NOT para excluir los objetos almacenados en el directorio
.dlsdata/. Esto evita que las acciones de eliminación de objetos o conversión de clases de almacenamiento desencadenadas por la regla de ciclo de vida afecten los datos de OSS-HDFS y, por consiguiente, las operaciones de lectura y escritura sobre ellos.
Procedimiento
Consola de OSS
Inicie sesión en la consola de OSS.
En el panel de navegación izquierdo, haga clic en Buckets. En la página que aparece, haga clic en el nombre del bucket de destino.
En el panel de navegación izquierdo, elija .
En la página Lifecycle, active el interruptor Enable Access Tracking y, a continuación, haga clic en Create Rule.
-
En el panel Create Lifecycle Rule, configure la regla de ciclo de vida según las descripciones a continuación.
-
El bucket tiene el control de versiones deshabilitado
Sección
Parámetro
Descripción
Basic Settings
Status
Establezca el estado de la regla de ciclo de vida. Puede seleccionar Enabled o Disabled.
-
Si habilita la regla de ciclo de vida, OSS cambia las clases de almacenamiento de los datos según dicha regla.
-
Si deshabilita la regla de ciclo de vida, la tarea de ciclo de vida se suspende.
Applied To
Seleccione los objetos a los que se aplica la regla de ciclo de vida. Puede elegir Objects with Specified Prefix o Whole Bucket.
Allow Overlapped Prefixes
De forma predeterminada, OSS comprueba si los prefijos de las reglas de ciclo de vida se superponen. Por ejemplo, suponga que configura las dos reglas siguientes con prefijos superpuestos:
-
Regla 1
Cambia todos los objetos con el prefijo
dir1/del bucket a la clase de almacenamiento Infrequent Access 180 días después de su último acceso. -
Regla 2
Cambia todos los objetos con el prefijo
dir1/dir2/del bucket a la clase de almacenamiento Archive 30 días después de su último acceso.
Si no selecciona esta opción, OSS rechaza la configuración porque los objetos del directorio
dir1/dir2/coincidirían con ambas reglas de transición.Si selecciona esta opción, los objetos del directorio
dir1/dir2/se cambian a la clase de almacenamiento Archive después de 30 días. Los demás objetos del directoriodir1/se cambian a la clase de almacenamiento Infrequent Access después de 180 días.Prefix
Introduzca el prefijo de objeto que debe coincidir con la regla.
-
Si establece el prefijo en img, la regla coincide con todos los objetos cuyo nombre comienza con img, como imgtest.png e img/example.jpg.
-
Si establece el prefijo en img/, la regla coincide con todos los objetos cuyo nombre comienza con img/, como img/example.jpg e img/test.jpg.
Tag
La regla de ciclo de vida se aplica únicamente a los objetos que tienen la etiqueta especificada. Por ejemplo, si selecciona Objects with Specified Prefix, establece el prefijo en img, define la clave de etiqueta como a y el valor como 1, la regla coincidirá con todos los objetos cuyo nombre comience con img y que tengan la etiqueta a=1. Para obtener más información sobre las etiquetas de objetos, consulte Object tagging.
NOT
Utilice la opción NOT para excluir de la regla de ciclo de vida los objetos que tengan un prefijo y una etiqueta específicos.
Importante-
Si la opción NOT está habilitada, debe especificar como mínimo un prefijo o una etiqueta.
-
La clave definida para la etiqueta en la condición NOT no puede ser igual a la clave definida en el parámetro Tag.
-
Si la opción NOT está habilitada, no es posible configurar una directiva de caducidad de partes.
Object Size
Especifique el tamaño de objeto al que se aplica la regla de ciclo de vida.
-
Minimum Size: la regla de ciclo de vida se aplica a los objetos mayores que este valor. El valor debe ser superior a 0 B e inferior a 5 TB.
-
Maximum Size: la regla de ciclo de vida se aplica a los objetos menores que este valor. El valor debe ser superior a 0 B e inferior o igual a 5 TB.
ImportanteSi configura Minimum size y Maximum size en la misma regla de ciclo de vida, tenga en cuenta lo siguiente:
-
Asegúrese de que el valor de Maximum size sea mayor que el de Minimum size.
-
No es posible configurar una directiva de caducidad de partes.
-
No es posible configurar una directiva para borrar marcadores de eliminación.
Policy for Objects
Object Lifecycle
Seleccione una directiva de caducidad para los objetos. Puede elegir Validity Period (Days), Expiration Date o Disabled. Si selecciona Disabled, la directiva de caducidad de objetos no surte efecto.
Lifecycle-based Rules
Configure la regla para cambiar la clase de almacenamiento de los objetos. Los datos se pueden mover a las siguientes clases de almacenamiento:
-
IA (Data Remains in IA After Access)
-
IA (Data Is Converted to Standard After Access)
-
Archive
-
Cold Archive
-
Deep Cold Archive
Por ejemplo, si selecciona la directiva Access Time, establece Validity Period (Days) en 30 e indica que los datos se cambien automáticamente a IA (Data Remains in IA After Access) tras ese periodo, un objeto al que se accedió por última vez el 1 de septiembre de 2021 pasará a esa clase de almacenamiento el 1 de octubre de 2021.
Policy for Parts
Part Lifecycle
Establezca la acción que se ejecutará en las partes caducadas. Si ya especificó una Tag, no es posible configurar este parámetro. Para la directiva de caducidad de partes, puede seleccionar Validity Period (Days) o Expiration Date, o bien elegir Disabled. Si selecciona Disabled, la directiva de caducidad de partes no surte efecto.
ImportanteUna regla de ciclo de vida debe incluir como mínimo una directiva de caducidad de objetos o una directiva de caducidad de partes.
Rules for Parts
Especifique cuándo caducan las partes según el periodo de validez o la fecha de caducidad seleccionados en la directiva correspondiente. Las partes caducadas se eliminan automáticamente y no se pueden recuperar.
-
-
El bucket tiene el control de versiones habilitado
Cuando se habilita el control de versiones, los elementos de configuración de las secciones Basic Settings y Policy for Parts se configuran de la misma manera que cuando está deshabilitado. La tabla a continuación describe únicamente las diferencias de configuración cuando el control de versiones está habilitado.
Sección
Parámetro
Descripción
Policy for Current Versions
Clear delete markers
Una vez habilitado el control de versiones, se añade la opción Clear Delete Markers a la directiva de limpieza. Las demás opciones permanecen iguales que cuando el control de versiones está deshabilitado.
Si selecciona esta opción y la versión actual de un objeto es la única existente y corresponde a un marcador de eliminación, OSS quita dicho marcador del objeto caducado. Si el objeto tiene varias versiones y la más reciente es un marcador de eliminación, OSS conserva el marcador. Para obtener más información sobre los marcadores de eliminación, consulte Delete markers.
Policy for Previous Versions
Object Lifecycle
Establezca la directiva de caducidad para las versiones anteriores de los objetos. Puede seleccionar Validity Period (Days) o Disabled. Si selecciona Disabled, la directiva de caducidad de objetos no surte efecto.
Lifecycle-based Rules
Establezca un periodo de N días. Cuando se accede a una versión anterior de un objeto, esta se cambia a otra clase de almacenamiento después de N días. Por ejemplo, si establece el periodo en 30 días, una versión anterior a la que se accedió el 1 de septiembre de 2021 pasará a la clase de almacenamiento especificada el 1 de octubre de 2021.
-
-
Haga clic en OK.
Después de guardar la regla, esta aparecerá en la lista de directivas.
SDK
Los SDK de OSS para Java, Go, Python y PHP admiten la creación de reglas de ciclo de vida basadas en la hora del último acceso. Antes de crear una regla de este tipo, debe habilitar el seguimiento de accesos en el bucket especificado. Para ver ejemplos de código, 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(®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.
);
ossutil
Puede usar ossutil para configurar reglas de ciclo de vida. Para obtener más información sobre cómo instalar ossutil, consulte Install ossutil.
En el siguiente ejemplo se muestra cómo configurar una regla de ciclo de vida para el bucket examplebucket:
ossutil api put-bucket-lifecycle --bucket examplebucket--lifecycle-configuration "{\"Rule\":{\"ID\":\"rule1\",\"Prefix\":\"tmp/\",\"Status\":\"Enabled\",\"Expiration\":{\"Days\":\"10\"},\"Transition\":{\"Days\":\"5\",\"StorageClass\":\"IA\",\"IsAccessTime\":true,\"ReturnToStdWhenVisit\":true},\"AbortMultipartUpload\":{\"Days\":\"10\"}}}"
Para obtener más información sobre este comando, consulte put-bucket-lifecycle.
Referencia de API
Las operaciones anteriores se basan en llamadas a la API. Si necesita un alto grado de personalización, puede enviar solicitudes de API REST directamente. Esto requiere que escriba su propio código para calcular las firmas. Para obtener más información, consulte PutBucketLifecycle.
Preguntas frecuentes
¿Qué ocurre si creo dos reglas de ciclo de vida para objetos con el mismo prefijo en un bucket, donde una se basa en la hora de la última modificación y la otra en la hora del último acceso?
Por ejemplo, suponga que crea dos reglas de ciclo de vida para el bucket de destino llamado examplebucket. La regla 1 indica que todos los objetos con el prefijo doc se eliminen 30 días después de su última modificación. La regla 2 indica que todos los objetos con el prefijo doc se cambien a la clase de almacenamiento Infrequent Access 30 días después de su último acceso.
OSS ejecuta las reglas de ciclo de vida con el principio de minimizar los costos del usuario. Por lo tanto, solo la regla 1 surte efecto. Esto se debe a que la regla 1 elimina los objetos coincidentes después de 30 días, tras lo cual no se generan cargos. En cambio, la regla 2 mueve los objetos a la clase de almacenamiento Infrequent Access, lo cual sigue generando cargos de almacenamiento y de recuperación de datos.
¿Cuándo surte efecto un cambio en una regla de ciclo de vida configurada y qué sucede con los datos que coincidían con la regla original?
Por ejemplo, suponga que configuró una regla de ciclo de vida para que los objetos con el prefijo er se cambien a la clase de almacenamiento Infrequent Access 30 días después del último acceso y, posteriormente, regresen a la clase de almacenamiento Standard si se vuelven a acceder 30 días más tarde. Sin embargo, 35 días después del último acceso, modifica el prefijo de la regla de ciclo de vida de er a re. En este caso, los objetos originales solo se cambian a la clase de almacenamiento Infrequent Access. La transición posterior a la clase de almacenamiento Standard no se produce. Además, la hora del último acceso de los objetos que coinciden con la nueva regla también se cuenta desde el momento en que se habilitó el seguimiento de accesos en el bucket.
Si Intelligent Tiering está habilitado en un bucket con control de versiones, ¿cómo se aplican los niveles de almacenamiento a las distintas versiones de un objeto?
Cada objeto en un bucket con control de versiones habilitado tiene un identificador de versión único, y los objetos con identificadores distintos son independientes entre sí. Por lo tanto, una versión anterior de un objeto puede estar en la clase de almacenamiento Infrequent Access mientras la versión actual se encuentra en la clase de almacenamiento Standard.
¿Puedo deshabilitar el seguimiento de accesos?
Sí, siempre que no existan reglas de ciclo de vida basadas en la hora del último acceso en el bucket. Una vez deshabilitado el seguimiento de accesos, el sistema deja de registrar la hora del último acceso de los objetos. La próxima vez que habilite el seguimiento de accesos, el sistema actualizará la hora del último acceso de todos los objetos.
Referencias
La hora del último acceso (LastAccessTime) es un atributo importante de un objeto y se utiliza en escenarios como la facturación y las reglas de ciclo de vida. Después de habilitar el seguimiento de accesos en un bucket, algunas operaciones sobre un objeto pueden actualizar su LastAccessTime. Para obtener más información, consulte How common operations affect the last access time of objects.