Exclusão de dados obsoletos com regras de expiração
Uma regra de expiração exclui objetos após um período definido (a partir da data de criação do objeto).
É possível configurar o ciclo de vida para objetos usando o console da web, a API de REST e as ferramentas de terceiros que são integradas ao IBM Cloud Object Storage.
-
Uma regra de expiração pode ser incluída em um depósito novo ou existente.
-
Uma regra de expiração existente pode ser modificada ou desativada.
-
Uma regra de Expiração recém-incluída ou modificada aplica-se a todos os objetos novos e existentes no depósito.
-
A inclusão ou modificação de políticas de ciclo de vida requer a função
Writer. -
Até 1000 regras de ciclo de vida (archive + expiração) podem ser definidas por depósito.
-
Permita até 24 horas para que quaisquer mudanças nas regras de Expiração entrem em vigor.
-
O escopo de cada regra de expiração pode ser limitado, definindo um filtro de prefixo opcional para ser aplicado a somente um subconjunto de objetos com nomes que correspondem ao prefixo.
-
Uma regra de expiração sem um filtro de prefixo será aplicada a todos os objetos no depósito.
-
O período de expiração para um objeto, especificado em número(s) de dias, é calculado a partir do momento em que o objeto foi criado e é encerrado à meia-noite UTC do dia seguinte. Por exemplo, se você tiver uma regra de expiração para um depósito para expirar um conjunto de objetos dez dias após a data de criação, um objeto que foi criado em 15 de abril de 2019 5h10 UTC expirará em 26 de abril de 2019 0h UTC.
-
As regras de expiração de cada depósito são avaliadas uma vez a cada 24 horas. Qualquer objeto que se qualifique para expiração (com base na data de expiração dos objetos) será enfileirado para exclusão. A exclusão de objetos expirados inicia no dia seguinte e geralmente leva menos de 24 horas. Não será faturado de você nenhum armazenamento associado de objetos depois que eles forem excluídos.
-
Em versão ativada ou depósitos suspensos, um
retém a versão atual e cria um marcador de exclusão em vez de excluir dados permanentemente. Para limpar um bucket habilitado para controle de versão, você pode definir duas regras de expiração. Adicione uma primeira regra que defina uma expiração para a versão atual e a versão não atual. Como o controle de versão está ativado, essa regra cria um marcador de exclusão para a versão. Adicione uma segunda regra com a seleção "Clean up expired object delete markers" (Limpar marcadores de exclusão de objetos expirados) para excluir os dados. Se o controle de versão estiver suspenso, você não verá a opção de limpar os marcadores de exclusão expirados na página de configuração da regra de expiração. Portanto, o controle de versão precisa ser ativado primeiro. Em seguida, adicione uma primeira regra que defina uma expiração para a versão atual e a versão não atual. Como o controle de versão está ativado, essa regra cria um marcador de exclusão para a versão. Adicione uma segunda regra com a seleção "Clean up expired object delete markers" (Limpar marcadores de exclusão de objetos expirados) para excluir os dados. -
O prazo de expiração de versões não atuais é determinado pelo último horário modificado de seu sucessor, arredondado para o dia seguinte à meia-noite UTC.
-
Se as versões forem excluídas manualmente de um objeto que tenha versões esperadas para expirar no dia seguinte, essas expirações poderão não ocorrer.
Políticas que especificam uma data no passado podem levar alguns dias para serem concluídas.
Sem cuidado, os dados podem ser perdidos permanentemente ao usar regras de expiração em um depósito com versão. Nos casos em que a versão é suspensa e há uma versão nula presente para o objeto expirado, os dados podem ser perdidos permanentemente. Nesse caso, um marcador de exclusão do null é sobrescrito, excluindo permanentemente o objeto
Os objetos que estão sujeitos a uma política de retenção do Immutable Object Storage de um depósito terão quaisquer ações de expiração adiadas até que a política de retenção não seja mais cumprida.
Atributos de regras de expiração
Cada regra de expiração tem os atributos a seguir:
ID
O ID de uma regra deve ser exclusivo dentro da configuração de ciclo de vida do depósito.
Expiration
O bloco de expiração contém os detalhes que governam a exclusão automática de objetos. Isso pode ser uma data específica no futuro ou um período de tempo após os novos objetos serem gravados.
NoncurrentVersionExpiration
O número de dias após o qual as versões não atuais de objetos são excluídas automaticamente
Prefixo
Uma sequência opcional que será correspondida com o prefixo do nome do objeto no depósito. Uma regra com um prefixo será aplicada somente aos objetos que corresponderem. É possível usar múltiplas regras para diferentes ações de expiração para
prefixos diferentes dentro do mesmo depósito. Por exemplo, dentro da mesma configuração de ciclo de vida, uma regra poderia excluir todos os objetos que iniciam com logs/ após 30 dias e uma segunda regra poderia excluir objetos
que iniciam com video/ após 365 dias.
Marcar
Uma opção de filtro que permite que as regras de expiração sejam aplicadas a objetos que contenham uma tag correspondente. O filtro de tags é fornecido como um contêiner que especifica uma string de chave e uma string de valor. A cadeia de caracteres da chave deve ter menos de 128 caracteres. A cadeia de valores deve ter menos de 256 caracteres.
ObjectSizeLessThan
Um filtro que restringe as ações do ciclo de vida a objetos com menos de um tamanho específico. Esse deve ser um valor inteiro maior que 0.
ObjectSizeGreaterThan
Um filtro que restringe as ações do ciclo de vida a objetos maiores que um tamanho específico. Esse deve ser um valor inteiro maior que 0.
E
Use o parâmetro AND para aplicar vários filtros a objetos que devem atender a todas as condições especificadas.
Status
Uma regra pode ser ativada ou desativada. Uma regra está ativa somente quando ativada.
Configurações de ciclo de vida de amostra
Essa configuração expira quaisquer novos objetos após 30 dias.
<LifecycleConfiguration>
<Rule>
<ID>delete-after-30-days</ID>
<Filter />
<Status>Enabled</Status>
<Expiration>
<Days>30</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Essa configuração exclui quaisquer objetos com o prefixo foo/ em 1º de junho 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>
Essa configuração expira quaisquer versões não atuais de objetos após 100 dias..
<LifecycleConfiguration>
<Rule>
<ID>DeleteAfterBecomingNonCurrent</ID>
<Filter/>
<Status>Enabled</Status>
<NoncurrentVersionExpiration>
<NoncurrentDays>100</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
Também é possível combinar regras de transição e expiração. Essa configuração arquiva quaisquer objetos 90 dias após a criação e exclui quaisquer objetos com o prefixo foo/ após 180 dias.
<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>
Essa configuração expira qualquer objeto com um valor de chave de tag de environment:production.
<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>
Essa configuração expira qualquer objeto com um tamanho de objeto menor que 2kb.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithObjectSizeLessThanFilter</ID>
<Filter>
<ObjectSizeLessThan>2048</ObjectSizeLessThan>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Essa configuração expira qualquer objeto com um tamanho de objeto maior que 1kb.
<LifecycleConfiguration>
<Rule>
<ID>DeleteWithObjectSizeGreaterThanFilter</ID>
<Filter>
<ObjectSizeGreaterThan>1024</ObjectSizeGreaterThan>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>180</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Essa configuração expira qualquer objeto maior que 10mb com valor de chave de tag igual a environmentnment:production e valor de chave de tag igual a environment:development.
<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>
Usando o console
Ao criar um novo depósito, marque a caixa Incluir regra de expiração. Em seguida, clique em Incluir regra para criar a nova regra de expiração. É possível incluir até cinco regras durante a criação do depósito e regras extras podem ser incluídas posteriormente.
Para um bucket existente, selecione Configuration (Configuração ) no menu de navegação e clique em Add rule (Adicionar regra ) na seção Expiration rule (Regra de expiração ).
Usando a API e SDKs
É possível gerenciar programaticamente as regras de expiração usando a API de REST ou os SDKs do IBM COS. Selecione o formato para os exemplos, selecionando uma categoria no alternador de contexto.
Incluir uma regra de expiração em uma configuração de ciclo de vida de um depósito
Referência de API REST
Essa implementação da operação PUT usa o parâmetro de consulta lifecycle para definir as configurações de ciclo de vida para o depósito. Essa operação permite uma definição de política de ciclo de vida única para
um depósito. A política é definida como um conjunto de regras que consistem nos parâmetros a seguir: ID, Status, Filter e Expiration.
Os usuários do Cloud IAM devem ter a função Writer para adicionar uma política de ciclo de vida de um bucket.
Infraestrutura clássica Os usuários devem ter permissões Owner no bucket para adicionar uma política de ciclo de vida de um bucket.
| Cabeçalho | Tipo | Descrição |
|---|---|---|
Content-MD5 |
Sequência | O base64 codificou o hash MD5 de 128 bits da carga útil, que é usado como uma verificação de integridade para garantir que a carga útil não foi alterada em trânsito. |
x-amz-checksum-crc32 |
Sequência | Esse cabeçalho é a soma de verificação Base64 codificada e de 32 bits CRC32 do objeto. |
x-amz-checksum-crc32c |
Sequência | Esse cabeçalho é a soma de verificação Base64 codificada e de 32 bits CRC32C do objeto. |
x-amz-checksum-crc64nvme |
Sequência | Esse cabeçalho é a soma de verificação Base64 codificada e de 64 bits CRC64NVME do objeto. A soma de verificação CRC64NVME é sempre uma soma de verificação completa do objeto. |
x-amz-checksum-sha1 |
Sequência | Esse cabeçalho é o Base64 codificado, 160 bits SHA1 digest do objeto. |
x-amz-checksum-sha256 |
Sequência | Esse cabeçalho é o Base64 codificado, 256 bits SHA256 digest do objeto. |
x-amz-sdk-checksum-algorithm |
Sequência | Indica o algoritmo usado para criar a soma de verificação do objeto ao usar o SDK. |
Um cabeçalho Content-MD5 ou um cabeçalho checksum (incluindo x-amz-checksum-crc32, x-amz-checksum-crc32c, x-amz-checksum-crc64nvme, x-amz-checksum-sha1 ou x-amz-checksum-sha256)
é necessário como uma verificação de integridade para a carga útil.
O corpo da solicitação deve conter um bloco XML com o esquema a seguir:
| Elemento | Tipo | Filhos | Antecessor | Restrição |
|---|---|---|---|---|
LifecycleConfiguration |
Contêiner | Rule |
Nenhum | Limite 1. |
Rule |
Contêiner | ID, Status, Filter, Expiration |
LifecycleConfiguration |
Limite 1000. |
ID |
Sequência | Nenhum | Rule |
Deve consistir em (a-z,A-Z,0-9) e nos símbolos a seguir: ! _ . * ' ( ) - |
Filter |
Sequência | Prefix |
Rule |
Deve conter um elemento Prefix |
Expiration |
Container |
Days ou Date |
Rule |
Limite 1. |
Days |
Número inteiro não negativo | Nenhum | Expiration |
Deve ser um valor maior que 0. |
Date |
Data | Nenhum | Expiration |
Deve estar no formato ISO 8601. |
NoncurrentVersionExpiration |
Data | NoncurrentDays |
Rule |
Limite 1. |
NoncurrentDays |
Número inteiro não negativo | Nenhum | NoncurrentVersionExpiration |
Deve ser um valor maior que 0. |
ObjectSizeGreaterThan |
Número inteiro não negativo | Nenhum | Filter,And |
Deve ser um valor maior que 0. |
ObjectSizeLessThan |
Número inteiro não negativo | Nenhum | Filter,And |
Deve ser um valor maior que 0. |
Prefix |
Sequência | Nenhum | Filter,And |
Deve ser usado com dois ou mais filtros. |
And |
Contêiner | Prefix,ObjectSizeGreaterThan, ObjectSizeLessThan, Tag |
Filter |
Pode conter um ou mais elementos Tag. |
Tag |
Contêiner | Key, Value |
Filter,And |
Deve definir uma chave e um filtro. |
Key |
Sequência | Nenhum | Tag |
A cadeia de caracteres deve ter menos de 128 caracteres. |
Value |
Sequência | Nenhum | Tag |
A cadeia de caracteres deve ter menos de 256 caracteres. |
O corpo da solicitação deve conter um bloco XML com o esquema que é tratado na tabela (consulte Exemplo 1).
<LifecycleConfiguration>
<Rule>
<ID>id1</ID>
<Filter />
<Status>Enabled</Status>
<Expiration>
<Days>60</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Sintaxe
PUT https://{endpoint}/{bucket}?lifecycle # path style
PUT https://{bucket}.{endpoint}?lifecycle # virtual host style
Exemplo de solicitação
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>
Amostra de código para uso com o SDK do COS NodeJS
O uso dos SDKs do IBM Cloud® Object Storage requer somente chamar as funções apropriadas com os parâmetros corretos e a configuração adequada.
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
});
Amostra de código para uso com o SDK do COS Python
O uso dos SDKs do IBM Cloud® Object Storage requer somente chamar as funções apropriadas com os parâmetros corretos e a configuração adequada.
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))
Amostra de código para uso com o SDK do COS Java
O uso dos SDKs do IBM Cloud® Object Storage requer somente chamar as funções apropriadas com os parâmetros corretos e a configuração adequada.
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;
}
}
Examinar a configuração de ciclo de vida de um depósito, incluindo a expiração
Essa implementação da operação GET usa o parâmetro de consulta lifecycle para examinar as configurações de ciclo de vida para o depósito. Uma resposta HTTP 404 será retornada se nenhuma configuração de
ciclo de vida estiver presente.
Os usuários do Cloud IAM devem ter a função Reader para examinar uma política de ciclo de vida de um bucket.
Infraestrutura clássica Os usuários devem ter permissões Read no bucket para examinar uma política de ciclo de vida de um bucket.
Sintaxe
GET https://{endpoint}/{bucket}?lifecycle # path style
GET https://{bucket}.{endpoint}?lifecycle # virtual host style
Solicitação de cabeçalho de exemplo
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
O uso dos SDKs do IBM Cloud® Object Storage requer somente chamar as funções apropriadas com os parâmetros corretos e a configuração adequada.
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))
O uso dos SDKs do IBM Cloud® Object Storage requer somente chamar as funções apropriadas com os parâmetros corretos e a configuração adequada.
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;
}
}
Excluir uma configuração de ciclo de vida de um depósito, incluindo a expiração
Essa implementação da operação DELETE usa o parâmetro de consulta lifecycle para examinar as configurações de ciclo de vida para o depósito. Todas as regras de ciclo de vida associadas ao depósito serão excluídas.
As transições definidas pelas regras não ocorrerão mais para novos objetos. No entanto, as regras de transição existentes serão mantidas para objetos que já foram gravados no depósito antes que as regras fossem excluídas. As Regras de expiração
não existirão mais. Uma resposta HTTP 404 será retornada se nenhuma configuração de ciclo de vida estiver presente.
Os usuários do Cloud IAM devem ter a função Writer para remover uma política de ciclo de vida de um depósito.
Os usuários da infraestrutura clássica devem ter permissões Owner no depósito para remover uma política de ciclo de vida de um depósito.
Sintaxe
DELETE https://{endpoint}/{bucket}?lifecycle # path style
DELETE https://{bucket}.{endpoint}?lifecycle # virtual host style
Solicitação de cabeçalho de exemplo
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
O uso dos SDKs do IBM Cloud® Object Storage requer somente chamar as funções apropriadas com os parâmetros corretos e a configuração adequada.
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
});
O uso dos SDKs do IBM Cloud® Object Storage requer somente chamar as funções apropriadas com os parâmetros corretos e a configuração adequada.
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))
O uso dos SDKs do IBM Cloud® Object Storage requer somente chamar as funções apropriadas com os parâmetros corretos e a configuração adequada.
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 regra do ciclo de vida
NoncurrentVersionExpiration é uma maneira prática de controlar automaticamente o acúmulo de versões e os custos de armazenamento. Veja os exemplos a seguir.
Não é possível usar as regras do NoncurrentVersionTransition para arquivar apenas versões não atuais de objetos em uma configuração de ciclo de vida, conforme observado em Arquivamento e expiração de objetos com controle de versão
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óximas etapas
A expiração é apenas um de muitos conceitos de ciclo de vida disponíveis para o IBM Cloud Object Storage. Cada um dos conceitos que abordamos nesta visão geral pode ser explorado mais detalhadamente na seção IBM Cloud Plataforma