ECS: As versões da política de ciclo de vida do objeto não estão expirando
Summary: Política de ciclo de vida do objeto configurada pelo usuário e com a opção "Expiration" para excluir automaticamente os objetos. Mas, como o bucket tem o controle de versão ativado, as versões não atuais não estão sendo excluídas. ...
Symptoms
Nota: O problema abaixo não se aplica aos buckets suspensos ou desativados para controle de versão.
1. Em um bucket habilitado para versão, uma política de ciclo de vida é definida, como no exemplo abaixo, para expirar os objetos. A política foi configurada para expirar automaticamente e excluir objetos após um dia.
<?xml version="1.0" ?> <LifecycleConfiguration xmlns="http://s3.companyaws.com/doc/2006-03-01/"> <Rule> <ID>Expire Objects</ID> <Prefix/> <Status>Enabled</Status> <Expiration> <Days>1</Days> </Expiration> </Rule> </LifecycleConfiguration>
2. Para objetos que nunca tiveram versões criadas, a política de expiração de objeto acima resulta em um marcador de exclusão inserido no para substituir o objeto atual. E, portanto, o objeto atual se torna uma versão não atual em vez de ser excluído
Exemplo:
Antes que a política seja atendida, há um objeto e é o mais recente
[VERSION_ID]: 1558539564138 [IS_LATEST]: true [MTIME]: 2019-05-22T15:39:24.138Z [SIZE]: 54270 [OBJECT]: sample.object
Depois que a política for correspondida (após um dia), a expiração ocorrerá, mas o objeto se transformará em uma versão não atual e um dmarker será inserido como o objeto mais recente.
[VERSION_ID]: 1558539371262 [IS_LATEST]: false [MTIME]: 2019-05-22T15:36:11.262Z [SIZE]: 54270 [OBJECT]: sample.object >>> original object becomes non current version [VERSION_ID]: 1558539564138 [IS_LATEST]: true [MTIME]: 2019-05-22T15:39:24.138Z [SIZE]: DMARKER [OBJECT]: sample.object >>> DMarker inserted as latest version.
Os usuários que esperam ver o objeto ser totalmente excluído dessa política.
Cause
A expectativa do exemplo de política mencionado na seção anterior está incorreta para buckets de controle de versão. No entanto, isso é verdadeiro para buckets que não são de controle de versão, já que em buckets que não são de controle de versão, o objeto expira imediatamente e é excluído, tornando-se irrecuperável.
Por outro lado, com os buckets de controle de versão, os protocolos do S3 lidam com a expiração dos objetos de maneira diferente. Em vez disso, ele move o objeto para uma versão não atual. E adiciona um marcador de exclusão como espaço reservado. Com os buckets de controle de versão, a versão do objeto pode ser recuperada, o que permite uma recuperação de período de tolerância, dependendo das configurações de política. Esse é um comportamento esperado.
Para obter mais detalhes sobre políticas de ciclo de vida, controle de versão e expiração no S3, consulte a referência na seção "informações adicionais" na parte inferior deste artigo.
Resolution
Em um bucket habilitado para versão, é melhor usar o exemplo de política de ciclo da vida abaixo. Que, em vez disso, expira as versões não atuais e também exclui marcadores (que são resultado de uma exclusão direta em um objeto em um bucket de controle de versão).
Exemplo:
Neste exemplo, o S3 remove as versões atuais (objetos) 60 dias após sua criação, adicionando um marcador de exclusão para cada uma das versões atuais do objeto. Esse processo torna a versão atual não atual, e o marcador de exclusão se torna a versão atual.
O comando NoncurrentVersionExpiration ação na mesma configuração do ciclo de vida do S3 Remove objetos não atuais 30 dias depois que eles se tornam não atuais. Assim, neste exemplo, todas as versões de objeto são removidas permanentemente 90 dias após a criação do objeto.
NOTA IMPORTANTE: As políticas de ciclo de vida devem ser tratadas com cuidado; especifique o número de dias e as ações que correspondam às necessidades do seu aplicativo. A política abaixo é apenas um exemplo: ela expira tanto os dmarkers quanto as versões não atuais, o que torna as exclusões irrecuperáveis.
<LifecycleConfiguration> <Rule> ... <Expiration> <Days>60</Days> </Expiration> <NoncurrentVersionExpiration> <NoncurrentDays>30</NoncurrentDays> </NoncurrentVersionExpiration> </Rule> </LifecycleConfiguration>
Additional Information
Mais detalhes sobre o comportamento de expirações de política em buckets com e sem versões podem ser encontrados aqui; https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-expire-general-considerations.htmlhttps://docs.aws.amazon.com/AmazonS3/latest/userguide/intro-lifecycle-rules.html#intro-lifecycle-rules-actions
https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html#lifecycle-config-conceptual-ex7
Outras explicações também podem ser encontradas no Guia de acesso a dados do ECS, com detalhes de como definir a política de ciclo de vida
https://dl.dell.com/content/manual53094723-ecs-3-8-x-data-access-guide.pdf