Eliminación de datos obsoletos con reglas de caducidad
Una regla de caducidad suprime los objetos después de un periodo de tiempo definido (desde la fecha de creación del objeto).
Puede establecer el ciclo de vida de los objetos mediante la consola web, la API REST y herramientas de terceros que están integradas con IBM Cloud Object Storage.
-
Se puede añadir una regla de caducidad a un grupo nuevo o existente.
-
Una regla de caducidad existente se puede modificar o inhabilitar.
-
Se aplica una regla de caducidad nueva o modificada a todos los objetos nuevos y existentes del grupo.
-
Para añadir o modificar políticas de ciclo de vida se necesita el rol de
Writer. -
Se pueden definir un máximo de 1000 reglas de ciclo de vida (archivado + caducidad) por grupo.
-
Los cambios realizados en las reglas de caducidad pueden tardar hasta 24 horas en entrar en vigor.
-
El ámbito de cada regla de caducidad se puede limitar mediante la definición de un filtro de prefijo opcional que se aplica dolo a un subconjunto de objetos con nombres que coincidan con el prefijo.
-
Se aplicará una regla de caducidad sin un filtro de prefijo a todos los objetos del grupo.
-
El periodo de caducidad para un objeto, especificado en número de días, se calcula a partir del momento en que se creó el objeto y se redondea a la hora UTC de la medianoche del día siguiente. Por ejemplo, si tiene una regla de caducidad para que un conjunto de objetos de un grupo caduque diez días después de la fecha de creación, un objeto creado el 15 de abril de 2019 a las 05:10 UTC caducará el 26 de abril de 2019 a las 00:00 UTC.
-
Las reglas de caducidad de cada grupo se evalúan cada 24 horas. Cualquier objeto apto para que caduque (en función de la fecha de caducidad de los objetos) se colocará en la cola para su supresión. La supresión de los objetos caducados empieza al día siguiente y suele tardar menos de 24 horas. No se le facturará por el almacenamiento asociado correspondiente a los objetos una vez que se hayan suprimido.
-
En grupos de versiones habilitados o suspendidos, un
retiene la versión actual y crea un marcador de supresión en lugar de suprimir datos de forma permanente. Para limpiar un cubo habilitado para versiones, puede establecer dos reglas de caducidad. Añade una primera regla que establezca una caducidad para la versión actual y la versión no actual. Como el versionado está activado, esta regla crea un marcador de borrado para la versión. Añada una segunda regla con la selección "Limpiar marcadores de eliminación de objetos caducados" para eliminar los datos. Si el versionado está suspendido, no verá la opción de limpiar los marcadores de borrado caducados en la página de configuración de reglas de caducidad. Por lo tanto, primero hay que activar el versionado. A continuación, añada una primera regla que establezca una caducidad para la versión actual y la versión no actual. Como el versionado está activado, esta regla crea un marcador de borrado para la versión. Añada una segunda regla con la selección "Limpiar marcadores de eliminación de objetos caducados" para eliminar los datos. -
La hora de caducidad de las versiones no actuales viene determinada por la hora de última modificación de su sucesor, redondeada al día siguiente a medianoche UTC.
-
Si las versiones se suprimen manualmente de un objeto que tiene versiones que se espera que caduquen al día siguiente, es posible que no se produzcan estas caducidades.
Las políticas que especifican una fecha en el pasado pueden tardar unos días en completarse.
Sin precaución, los datos pueden perderse de forma permanente al utilizar reglas de caducidad en un grupo con versión. En los casos en los que se suspende el mantenimiento de versiones y hay una versión nula presente para el objeto caducado, es posible que los datos se pierdan de forma permanente. En este caso, se sobrescribe un marcador de supresión null, suprimiendo permanentemente el objeto.
Las acciones de caducidad de los objetos sujetos a una política de retención de Immutable Object Storage de un grupo se diferirán hasta que se deje de imponer la política de retención.
Atributos de las reglas de caducidad
Cada regla de caducidad tiene los atributos siguientes:
ID
El ID de una regla debe ser exclusivo dentro de la configuración del ciclo de vida del grupo.
Caducidad
El bloque de caducidad contiene los detalles que controlan la supresión automática de objetos. Puede ser una fecha específica en el futuro, o un periodo de tiempo después del cual se escriben los objetos nuevos.
NoncurrentVersionExpiration
Número de días transcurridos los cuales se suprimen automáticamente las versiones no actuales de los objetos.
Prefijo
Una serie opcional que se comparará con el prefijo del nombre de objeto en el grupo. Una regla con un prefijo solo se aplicará a los objetos que coinciden. Puede utilizar varias reglas para distintas acciones de caducidad para distintos prefijos
dentro del mismo grupo. Por ejemplo, dentro de la misma configuración de ciclo de vida, una regla podría suprimir todos los objetos que empiecen por logs/ transcurridos 30 días, y una segunda regla podría suprimir los objetos
que empiecen por video/ transcurridos 365 días.
Etiqueta
Una opción de filtro que permite aplicar reglas de caducidad a los objetos que contienen una etiqueta coincidente. El filtro de etiquetas se proporciona como un contenedor que especifica una cadena de clave y una cadena de valor. La cadena de claves debe tener menos de 128 caracteres. La cadena de valores debe tener menos de 256 caracteres.
ObjectSizeLessThan
Un filtro que restringe las acciones del ciclo de vida a objetos de un tamaño inferior a un tamaño específico. Debe ser un valor entero mayor que 0.
ObjectSizeGreaterThan
Un filtro que restringe las acciones del ciclo de vida a objetos mayores de un tamaño específico. Debe ser un valor entero mayor que 0.
Y
Utilice el parámetro AND para aplicar varios filtros a los objetos que deben cumplir todas las condiciones especificadas.
Estado
Una regla se puede habilitar o inhabilitar. Una regla solo está activa cuando está habilitada.
Configuración de ciclo de vida de ejemplo
Con esta configuración, los objetos nuevos caducan transcurridos 30 días.
<LifecycleConfiguration>
<Rule>
<ID>delete-after-30-days</ID>
<Filter />
<Status>Enabled</Status>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Esta configuración suprime cualquier objeto con el prefijo foo/ el 1 de junio de 2020.
<LifecycleConfiguration>
<Rule>
<ID>delete-on-a-date</ID>
<Filter>
<Prefix>foo/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Date>2020-06-01T00:00:00.000Z</Date>
</Expiration>
</Rule>
</LifecycleConfiguration>
Esta configuración caduca las versiones no actuales de los objetos después de 100 días.
<LifecycleConfiguration>
<Rule>
<ID>DeleteAfterBecomingNonCurrent</ID>
<Filter/>
<Status>Enabled</Status>
<NoncurrentVersionExpiration>
<NoncurrentDays>100</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
También puede combinar las reglas de transición y de caducidad. Esta configuración archiva los objetos 90 días después de su creación y suprime los objetos con el prefijo foo/ transcurridos 180 días.
<LifecycleConfiguration>
<Rule>
<ID>archive-first</ID>
<Filter />
<Status>Enabled</Status>
<Transition>
<Days>90</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
</Rule>
<Rule>
<ID>then-delete</ID>
<Filter>
<Prefix>foo/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Esta configuración caduca cualquier objeto con un valor de clave de etiqueta de entorno:producción.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithTagsFilter</ID>
<Filter>
<TagSet>
<Tag>
<Key>environment</Key>
<Value>production</Value>
</Tag>
</TagSet>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Esta configuración caduca cualquier objeto con un tamaño de objeto inferior a 2kb.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithObjectSizeLessThanFilter</ID>
<Filter>
<ObjectSizeLessThan>2048</ObjectSizeLessThan>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Esta configuración caduca cualquier objeto con un tamaño de objeto superior a 1kb.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithObjectSizeGreaterThanFilter</ID>
<Filter>
<ObjectSizeGreaterThan>1024</ObjectSizeGreaterThan>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Esta configuración caduca cualquier objeto mayor de 10mb con el valor de la clave de etiqueta igual a entorno:producción y el valor de la clave de etiqueta igual a entorno:desarrollo.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithMultipleFilter</ID>
<Filter>
<And>
<TagSet>
<Tag>
<Key>environment</Key>
<Value>production</Value>
</Tag>
<Tag>
<Key>environment</Key>
<Value>development</Value>
</Tag>
</TagSet>
<ObjectSizeGreaterThan>10485760</ObjectSizeGreaterThan>
</And>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Utilización de la consola
Cuando cree un grupo nuevo, marque el recuadro Añadir regla de caducidad. A continuación, pulse Añadir regla para crear la nueva regla de caducidad. Puede añadir un máximo de cinco reglas durante la creación de un grupo y se pueden añadir reglas adicionales posteriormente.
Para un cubo existente, seleccione Configuración en el menú de navegación y haga clic en Añadir regla en la sección Regla de caducidad.
Utilización de la API y los SDK
Puede gestionar mediante programación las reglas de caducidad mediante la API REST o los SDK de IBM COS. Seleccione el formato de los ejemplos seleccionando una categoría en el conmutador de contexto.
Adición de una regla de caducidad a la configuración del ciclo de vida de un grupo
Referencia de API REST
Esta implementación de la operación PUT utiliza el parámetro de consulta lifecycle para definir valores de ciclo de vida para el grupo. Esta operación permite una sola definición de política de ciclo de vida para
un grupo. La política se define como un conjunto de reglas que constan de los parámetros siguientes: ID, Status, Filter y Expiration.
Los usuarios de Cloud IAM deben tener el rol Writer para añadir una política de ciclo de vida desde un bucket.
Infraestructura clásica Los usuarios deben tener permisos Owner en el bucket para añadir una política de ciclo de vida desde un bucket.
| Cabecera | Tipo | Descripción |
|---|---|---|
Content-MD5 |
Serie | El hash de 128 bits MD5 codificado en base64 de la carga útil, que se utiliza como comprobación de integridad para garantizar que la carga útil no ha sido alterada en tránsito. |
x-amz-checksum-crc32 |
Serie | Esta cabecera es la suma de comprobación de 32 bits CRC32 codificada en Base64 del objeto. |
x-amz-checksum-crc32c |
Serie | Esta cabecera es la suma de comprobación de 32 bits CRC32C codificada en Base64 del objeto. |
x-amz-checksum-crc64nvme |
Serie | Esta cabecera es la suma de comprobación de 64 bits CRC64NVME codificada en Base64 del objeto. La suma de comprobación de CRC64NVME es siempre una suma de comprobación de objeto completo. |
x-amz-checksum-sha1 |
Serie | Este encabezado es el Base64 codificado, 160-bit SHA1 digest del objeto. |
x-amz-checksum-sha256 |
Serie | Este encabezado es el Base64 codificado, 256-bit SHA256 digest del objeto. |
x-amz-sdk-checksum-algorithm |
Serie | Indica el algoritmo utilizado para crear la suma de comprobación del objeto cuando se utiliza el SDK. |
Se requiere un encabezado Content-MD5 o un encabezado checksum (incluyendo x-amz-checksum-crc32, x-amz-checksum-crc32c, x-amz-checksum-crc64nvme, x-amz-checksum-sha1,
o x-amz-checksum-sha256) como comprobación de integridad para la carga útil.
El cuerpo de la solicitud debe contener un bloque XML con el esquema siguiente:
| Elemento | Tipo | Hijos | Predecesor | Restricción |
|---|---|---|---|---|
LifecycleConfiguration |
Contenedor | Rule |
Ninguna | Límite 1. |
Rule |
Contenedor | ID, Status, Filter, Expiration |
LifecycleConfiguration |
Límite 1000. |
ID |
Serie | Ninguna | Rule |
Debe constar de (a-z,A-Z,0-9) y los símbolos siguientes: ! _ . * ' ( ) - |
Filter |
Serie | Prefix |
Rule |
Debe contener un elemento Prefix |
Expiration |
Container |
Days o Date |
Rule |
Límite 1. |
Days |
Entero no negativo | Ninguna | Expiration |
Debe ser un valor mayor que 0. |
Date |
Fecha | Ninguna | Expiration |
Debe estar en formato ISO 8601. |
NoncurrentVersionExpiration |
Fecha | NoncurrentDays |
Rule |
Límite 1. |
NoncurrentDays |
Entero no negativo | Ninguna | NoncurrentVersionExpiration |
Debe ser un valor mayor que 0. |
ObjectSizeGreaterThan |
Entero no negativo | Ninguna | Filter,And |
Debe ser un valor mayor que 0. |
ObjectSizeLessThan |
Entero no negativo | Ninguna | Filter,And |
Debe ser un valor mayor que 0. |
Prefix |
Serie | Ninguna | Filter,And |
Debe utilizarse con dos o más filtros. |
And |
Contenedor | Prefix,ObjectSizeGreaterThan, ObjectSizeLessThan, Tag |
Filter |
Puede contener uno o más elementos de etiqueta. |
Tag |
Contenedor | Key, Value |
Filter,And |
Debe definir tanto una Clave como un Filtro. |
Key |
Serie | Ninguna | Tag |
La cadena debe tener menos de 128 caracteres. |
Value |
Serie | Ninguna | Tag |
La cadena debe tener menos de 256 caracteres. |
El cuerpo de la solicitud debe contener un bloque XML con el esquema que se aborda en la tabla (consulte el Ejemplo 1).
<LifecycleConfiguration>
<Rule>
<ID>id1</ID>
<Filter />
<Status>Enabled</Status>
<Expiration>
<Days>60</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Sintaxis
PUT https://{endpoint}/{bucket}?lifecycle # path style
PUT https://{bucket}.{endpoint}?lifecycle # virtual host style
Solicitud de ejemplo
PUT /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 17:50:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-MD5: M625BaNwd/OytcM7O5gIaQ==
Content-Length: 305
<LifecycleConfiguration>
<Rule>
<ID>id1</ID>
<Filter />
<Status>Enabled</Status>
<Expiration>
<Days>60</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Ejemplo de código que se utiliza con el SDK de NodeJS COS
Para utilizar los SDK de IBM Cloud® Object Storage solo es necesario llamar a las funciones adecuadas con los parámetros correctos y la configuración adecuada.
var aws = require('ibm-cos-sdk');
var ep = new aws.Endpoint('s3.us-south.cloud-object-storage.appdomain.cloud');
var config = {
endpoint: ep,
apiKeyId: 'ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE',
ibmAuthEndpoint: 'https://iam.cloud.ibm.com/identity/token',
serviceInstanceId: 'crn:v1:bluemix:public:cloud-object-storage:global:a/<CREDENTIAL_ID_AS_GENERATED>:<SERVICE_ID_AS_GENERATED>::',
};
var s3 = new aws.S3(config);
var date = new Date('June 16, 2019 00:00:00');
var params = {
Bucket: 'STRING_VALUE', /* required */
LifecycleConfiguration: {
Rules: [ /* required */
{
Status: 'Enabled', /* required */
ID: 'OPTIONAL_STRING_VALUE',
Filter: {}, /* required */
Expiration:
{
Date: date
}
},
]
}
};
s3.putBucketLifecycleConfiguration(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
Ejemplo de código que se utiliza con el SDK de Python COS
Para utilizar los SDK de IBM Cloud® Object Storage solo es necesario llamar a las funciones adecuadas con los parámetros correctos y la configuración adecuada.
import sys
import ibm_boto3
from ibm_botocore.client import Config
api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE"
service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
auth_endpoint = "https://iam.cloud.ibm.com/identity/token"
service_endpoint = "https://s3.us-south.cloud-object-storage.appdomain.cloud"
cos = ibm_boto3.client('s3',
ibm_api_key_id=api_key,
ibm_service_instance_id=service_instance_id,
ibm_auth_endpoint=auth_endpoint,
config=Config(signature_version='oauth'),
endpoint_url=service_endpoint)
response = cos.put_bucket_lifecycle_configuration(
Bucket='string',
LifecycleConfiguration={
'Rules': [
{
'Status': 'Enabled',
'Filter': {},
'Expiration':
{
'Days': 123
},
},
]
}
)
print("Bucket lifecyle: {0}".format(response))
Ejemplo de código que se utiliza con el SDK de Java COS
Para utilizar los SDK de IBM Cloud® Object Storage solo es necesario llamar a las funciones adecuadas con los parámetros correctos y la configuración adecuada.
package com.ibm.cloud;
import java.sql.Timestamp;
import java.util.List;
import java.util.Arrays;
import com.ibm.cloud.objectstorage.ClientConfiguration;
import com.ibm.cloud.objectstorage.SDKGlobalConfiguration;
import com.ibm.cloud.objectstorage.auth.AWSCredentials;
import com.ibm.cloud.objectstorage.auth.AWSStaticCredentialsProvider;
import com.ibm.cloud.objectstorage.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3ClientBuilder;
import com.ibm.cloud.objectstorage.services.s3.model.Bucket;
import com.ibm.cloud.objectstorage.services.s3.model.BucketLifecycleConfiguration;
import com.ibm.cloud.objectstorage.services.s3.model.ListObjectsRequest;
import com.ibm.cloud.objectstorage.services.s3.model.ObjectListing;
import com.ibm.cloud.objectstorage.services.s3.model.S3ObjectSummary;
import com.ibm.cloud.objectstorage.oauth.BasicIBMOAuthCredentials;
public class App
{
private static AmazonS3 _cosClient;
/**
* @param args
*/
public static void main(String[] args)
{
SDKGlobalConfiguration.IAM_ENDPOINT = "https://iam.cloud.ibm.com/identity/token";
String bucketName = "<sample-bucket-name>";
String api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE";
String service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
String endpoint_url = "https://s3.us-south.cloud-object-storage.appdomain.cloud";
String storageClass = "us-south";
String location = "us";
_cosClient = createClient(api_key, service_instance_id, endpoint_url, location);
// Define a rule for expiring items in a bucket
int days_to_delete = 10;
BucketLifecycleConfiguration.Rule rule = new BucketLifecycleConfiguration.Rule()
.withId("Delete rule")
.withExpirationInDays(days_to_delete)
.withStatus(BucketLifecycleConfiguration.ENABLED);
rule.setFilter(new LifecycleFilter());
// Add the rule to a new BucketLifecycleConfiguration.
BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration()
.withRules(Arrays.asList(rule));
// Use the client to set the LifecycleConfiguration on the bucket.
_cosClient.setBucketLifecycleConfiguration(bucketName, configuration);
}
/**
* @param bucketName
* @param clientNum
* @param api_key
* @param service_instance_id
* @param endpoint_url
* @param location
* @return AmazonS3
*/
public static AmazonS3 createClient(String api_key, String service_instance_id, String endpoint_url, String location)
{
AWSCredentials credentials;
credentials = new BasicIBMOAuthCredentials(api_key, service_instance_id);
ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(5000);
clientConfig.setUseTcpKeepAlive(true);
AmazonS3 cosClient = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
.withEndpointConfiguration(new EndpointConfiguration(endpoint_url, location)).withPathStyleAccessEnabled(true)
.withClientConfiguration(clientConfig).build();
return cosClient;
}
}
Examen de la configuración del ciclo de vida de un grupo, incluida la caducidad
Esta implementación de la operación GET utiliza el parámetro de consulta lifecycle para definir valores de ciclo de vida para el grupo. Se devolverá la respuesta HTTP 404 si no hay ninguna configuración
de ciclo de vida.
Los usuarios de Cloud IAM deben tener el rol Reader para examinar una política de ciclo de vida de un bucket.
Infraestructura clásica Los usuarios deben tener permisos Read en el bucket para examinar una política de ciclo de vida de un bucket.
Sintaxis
GET https://{endpoint}/{bucket}?lifecycle # path style
GET https://{bucket}.{endpoint}?lifecycle # virtual host style
Ejemplo de cabecera de solicitud
GET /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 17:50:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-MD5: M625BaNwd/OytcM7O5gIaQ==
Content-Length: 305
Para utilizar los SDK de IBM Cloud® Object Storage solo es necesario llamar a las funciones adecuadas con los parámetros correctos y la configuración adecuada.
var aws = require('ibm-cos-sdk');
var ep = new aws.Endpoint('s3.us-south.cloud-object-storage.appdomain.cloud');
var config = {
endpoint: ep,
apiKeyId: 'ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE',
ibmAuthEndpoint: 'https://iam.cloud.ibm.com/identity/token',
serviceInstanceId: 'crn:v1:bluemix:public:cloud-object-storage:global:a/<CREDENTIAL_ID_AS_GENERATED>:<SERVICE_ID_AS_GENERATED>::',
};
var s3 = new aws.S3(config);
var params = {
Bucket: 'STRING_VALUE' /* required */
};
s3.getBucketLifecycleConfiguration(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
import sys
import ibm_boto3
from ibm_botocore.client import Config
api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE"
service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
auth_endpoint = "https://iam.cloud.ibm.com/identity/token"
service_endpoint = "https://s3.us-south.cloud-object-storage.appdomain.cloud"
cos = ibm_boto3.resource('s3',
ibm_api_key_id=api_key,
ibm_service_instance_id=service_instance_id,
ibm_auth_endpoint=auth_endpoint,
config=Config(signature_version='oauth'),
endpoint_url=service_endpoint)
response = cos.Bucket('<name-of-bucket>').get_bucket_lifecycle_configuration(
Bucket='string'
)
print("Bucket lifecyle: {0}".format(response))
Para utilizar los SDK de IBM Cloud® Object Storage solo es necesario llamar a las funciones adecuadas con los parámetros correctos y la configuración adecuada.
package com.ibm.cloud;
import java.sql.Timestamp;
import java.util.List;
import java.util.Arrays;
import com.ibm.cloud.objectstorage.ClientConfiguration;
import com.ibm.cloud.objectstorage.SDKGlobalConfiguration;
import com.ibm.cloud.objectstorage.auth.AWSCredentials;
import com.ibm.cloud.objectstorage.auth.AWSStaticCredentialsProvider;
import com.ibm.cloud.objectstorage.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3ClientBuilder;
import com.ibm.cloud.objectstorage.services.s3.model.Bucket;
import com.ibm.cloud.objectstorage.services.s3.model.BucketLifecycleConfiguration;
import com.ibm.cloud.objectstorage.services.s3.model.ListObjectsRequest;
import com.ibm.cloud.objectstorage.services.s3.model.ObjectListing;
import com.ibm.cloud.objectstorage.services.s3.model.S3ObjectSummary;
import com.ibm.cloud.objectstorage.oauth.BasicIBMOAuthCredentials;
public class App
{
private static AmazonS3 _cosClient;
/**
* @param args
*/
public static void main(String[] args)
{
SDKGlobalConfiguration.IAM_ENDPOINT = "https://iam.cloud.ibm.com/identity/token";
String bucketName = "<sample-bucket-name>";
String api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE";
String service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
String endpoint_url = "https://s3.us-south.cloud-object-storage.appdomain.cloud";
String storageClass = "us-south";
String location = "us";
_cosClient = createClient(api_key, service_instance_id, endpoint_url, location);
// Use the client to read the configuration
BucketLifecycleConfiguration config = _cosClient.getBucketLifecycleConfiguration(bucketName);
System.out.println(config.toString());
}
/**
* @param bucketName
* @param clientNum
* @param api_key
* @param service_instance_id
* @param endpoint_url
* @param location
* @return AmazonS3
*/
public static AmazonS3 createClient(String api_key, String service_instance_id, String endpoint_url, String location)
{
AWSCredentials credentials;
credentials = new BasicIBMOAuthCredentials(api_key, service_instance_id);
ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(5000);
clientConfig.setUseTcpKeepAlive(true);
AmazonS3 cosClient = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
.withEndpointConfiguration(new EndpointConfiguration(endpoint_url, location)).withPathStyleAccessEnabled(true)
.withClientConfiguration(clientConfig).build();
return cosClient;
}
}
Supresión de la configuración del ciclo de vida de un grupo, incluida la caducidad
Esta implementación de la operación DELETE utiliza el parámetro de consulta lifecycle para definir valores de ciclo de vida para el grupo. Se suprimirán todas las reglas de ciclo de vida asociadas al grupo. Las transiciones
definidas por las reglas dejarán de ejecutarse para los objetos nuevos. Sin embargo, se mantendrán las reglas de transición existentes para los objetos que ya se habían escrito en el grupo antes de que se suprimieran las reglas. Las reglas
de caducidad dejarán de existir. Se devolverá la respuesta HTTP 404 si no hay ninguna configuración de ciclo de vida.
Los usuarios de Cloud IAM deben tener el rol de Writer para eliminar una política de ciclo de vida de un grupo.
Los usuarios de la infraestructura clásica deben tener permisos de Owner sobre el grupo para eliminar una política de ciclo de vida de un grupo.
Sintaxis
DELETE https://{endpoint}/{bucket}?lifecycle # path style
DELETE https://{bucket}.{endpoint}?lifecycle # virtual host style
Ejemplo de cabecera de solicitud
DELETE /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 17:50:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-Length: 305
Para utilizar los SDK de IBM Cloud® Object Storage solo es necesario llamar a las funciones adecuadas con los parámetros correctos y la configuración adecuada.
var aws = require('ibm-cos-sdk');
var ep = new aws.Endpoint('s3.us-south.cloud-object-storage.appdomain.cloud');
var config = {
endpoint: ep,
apiKeyId: 'ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE',
ibmAuthEndpoint: 'https://iam.cloud.ibm.com/identity/token',
serviceInstanceId: 'crn:v1:bluemix:public:cloud-object-storage:global:a/<CREDENTIAL_ID_AS_GENERATED>:<SERVICE_ID_AS_GENERATED>::',
};
var s3 = new aws.S3(config);
var params = {
Bucket: 'STRING_VALUE' /* required */
};
s3.deleteBucketLifecycleConfiguration(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
Para utilizar los SDK de IBM Cloud® Object Storage solo es necesario llamar a las funciones adecuadas con los parámetros correctos y la configuración adecuada.
import sys
import ibm_boto3
from ibm_botocore.client import Config
api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE"
service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
auth_endpoint = "https://iam.cloud.ibm.com/identity/token"
service_endpoint = "https://s3.us-south.cloud-object-storage.appdomain.cloud"
cos = ibm_boto3.resource('s3',
ibm_api_key_id=api_key,
ibm_service_instance_id=service_instance_id,
ibm_auth_endpoint=auth_endpoint,
config=Config(signature_version='oauth'),
endpoint_url=service_endpoint)
response = cos.Bucket('<name-of-bucket>').delete_bucket_lifecycle_configuration(
Bucket='string'
)
print("Bucket lifecyle: {0}".format(response))
Para utilizar los SDK de IBM Cloud® Object Storage solo es necesario llamar a las funciones adecuadas con los parámetros correctos y la configuración adecuada.
package com.ibm.cloud;
import java.sql.Timestamp;
import java.util.List;
import java.util.Arrays;
import com.ibm.cloud.objectstorage.ClientConfiguration;
import com.ibm.cloud.objectstorage.SDKGlobalConfiguration;
import com.ibm.cloud.objectstorage.auth.AWSCredentials;
import com.ibm.cloud.objectstorage.auth.AWSStaticCredentialsProvider;
import com.ibm.cloud.objectstorage.client.builder.AwsClientBuilder.EndpointConfiguration;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3;
import com.ibm.cloud.objectstorage.services.s3.AmazonS3ClientBuilder;
import com.ibm.cloud.objectstorage.services.s3.model.Bucket;
import com.ibm.cloud.objectstorage.services.s3.model.BucketLifecycleConfiguration;
import com.ibm.cloud.objectstorage.services.s3.model.ListObjectsRequest;
import com.ibm.cloud.objectstorage.services.s3.model.ObjectListing;
import com.ibm.cloud.objectstorage.services.s3.model.S3ObjectSummary;
import com.ibm.cloud.objectstorage.oauth.BasicIBMOAuthCredentials;
public class App
{
private static AmazonS3 _cosClient;
/**
* @param args
*/
public static void main(String[] args)
{
SDKGlobalConfiguration.IAM_ENDPOINT = "https://iam.cloud.ibm.com/identity/token";
String bucketName = "<sample-bucket-name>";
String api_key = "ZRZDoNoUseOLL7bRO8SAMPLEHPUzUL_-fsampleyYE";
String service_instance_id = "85SAMPLE-eDOb-4NOT-bUSE-86nnnb31eaxx"
String endpoint_url = "https://s3.us-south.cloud-object-storage.appdomain.cloud";
String storageClass = "us-south";
String location = "us";
_cosClient = createClient(api_key, service_instance_id, endpoint_url, location);
// Delete the configuration.
_cosClient.deleteBucketLifecycleConfiguration(bucketName);
// Verify that the configuration has been deleted by attempting to retrieve it.
config = _cosClient.getBucketLifecycleConfiguration(bucketName);
String s = (config == null) ? "Configuration has been deleted." : "Configuration still exists.";
System.out.println(s);
}
/**
* @param bucketName
* @param clientNum
* @param api_key
* @param service_instance_id
* @param endpoint_url
* @param location
* @return AmazonS3
*/
public static AmazonS3 createClient(String api_key, String service_instance_id, String endpoint_url, String location)
{
AWSCredentials credentials;
credentials = new BasicIBMOAuthCredentials(api_key, service_instance_id);
ClientConfiguration clientConfig = new ClientConfiguration().withRequestTimeout(5000);
clientConfig.setUseTcpKeepAlive(true);
AmazonS3 cosClient = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials))
.withEndpointConfiguration(new EndpointConfiguration(endpoint_url, location)).withPathStyleAccessEnabled(true)
.withClientConfiguration(clientConfig).build();
return cosClient;
}
}
NoncurrentVersionExpiration regla del ciclo de vida
NoncurrentVersionExpiration es una forma práctica de controlar automáticamente la acumulación de versiones y los costes de almacenamiento. Véanse los ejemplos siguientes.
No es posible utilizar reglas de NoncurrentVersionTransition para archivar sólo versiones no actuales de objetos en una configuración de ciclo de vida, como se indica en Archivado y caducidad de objetos versionados
curl -X "PUT" "https://$BUCKET.s3.$REGION.cloud-object-storage.appdomain.cloud/?lifecycle" \
-H 'Authorization: bearer $TOKEN' \
-H 'Content-Type: text/xml' \
-d '<?xml version="1.0" encoding="UTF-8"?>
<LifecycleConfiguration>
<Rule>
<ID>expire-old-versions</ID>
<Status>Enabled</Status>
<Filter></Filter>
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>'
cosClient.put_bucket_lifecycle_configuration(
Bucket=BUCKET,
LifecycleConfiguration={
'Rules': [{
'ID': 'expire-old-versions',
'Status': 'Enabled',
'Filter': {},
'NoncurrentVersionExpiration': {
'NoncurrentDays': 30
}
}]
}
)
Próximos pasos
La caducidad es solo uno de los muchos conceptos de ciclo de vida disponibles para IBM Cloud Object Storage. Cada uno de los conceptos que hemos tratado en este resumen puede estudiarse más a fondo en la sección PlataformaIBM Cloud.