Descrição do problema: Uploads multipartes incompletos
O Amazon S3 é um ótimo armazenamento para armazenar seus dados – é simples, performático e barato o suficiente. Ele também tem várias opções de armazenamento para vários casos de uso. Então, se você estiver usando AWS, então, muito provavelmente, você também está usando S3.
Um dos casos mais usados do Amazon S3 dentro do R&D é armazenar alguns artefatos de desenvolvimento lá – pacotes de código-fonte, binários de instalação e até mesmo imagens de VM. Normalmente, eles estão sendo carregados no S3 como resultado de trabalhos de CI/CD. Embora deva haver uma política de retenção de artefatos definida para evitar o armazenamento de artefatos não reais, também há um tipo extremamente simples de otimização que deve ser aplicado aos seus buckets do Amazon S3 quase imediatamente após sua criação – retenção para objetos de multipart upload (MPU) incompletos.
Objetos MPU incompletos podem ocorrer se a parte do seu trabalho CI/CD que carrega artefatos para o bucket S3 falhar por algum motivo, como erro de rede. Nesse caso, parte dos dados que já foram carregados para o S3 ainda serão armazenados lá, mesmo que essa sessão de upload específica não seja retomada. Você pode dizer que não tem muitas falhas de upload para o Amazon S3, mas a experiência mostra que em um bucket que é usado para armazenar artefatos e existe há mais de um ano, até 20 por cento do armazenamento total pode ser consumido por objetos MPU incompletos.
Como verificar MPU incompleto?
A Amazon lançou recentemente o Amazon S3 Storage Lens – https://docs.aws.amazon.com/AmazonS3/latest/dev/storage_lens.html
O Storage Lens tem níveis Free e Advanced. Para esse caso, o nível Free é suficiente.
Navegue até a Lente de Armazenamento – https://s3.console.aws.amazon.com/s3/lens
Você verá uma lista de painéis disponíveis, com pelo menos um painel básico criado pela AWS para você:
Defina um filtro para uma região ou bucket específico se precisar:
E verifique a seguinte tendência para ver se você precisa se preocupar com armazenamento de uploads incompletos:
Se você perceber que os bytes de uploads multipartes incompletos são uma parte significativa do armazenamento total (mais de 3%), você deve otimizá-los.
Como otimizar o armazenamento MPU incompleto?
A melhor maneira de garantir que um bucket específico não tenha problemas de armazenamento MPU incompleto é definir uma Política de Ciclo de Vida para ele – https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html
O gerenciamento do ciclo de vida do S3 é um processo muito poderoso, embora complicado, mas a criação de uma política de MPU é bastante curta e simples.
Você pode usar o AWS S3 Console para fazer isso (marque a guia Gerenciamento na página específica do bucket do S3), bem como usar a AWS Command Line Interface (AWS CLI).
Para definir retenções de MPU, faça o seguinte:
- Certifique-se de ter o AWS CLI instalado e configurado.
- Prepare o seguinte arquivo mpu-retention.json:
{ "Regras": [ { "ID": "Retenção de MPU", "Status": "Habilitado", "Filtro": { "Prefixo": "" }, "AbortIncompleteMultipartUpload": { "DiasApósInicialização": 7 } } ] }
Ele descreve a política para abortar todas as sessões de upload incompletas que não estavam ativas nos últimos 7 dias.
3. Execute o seguinte comando para aplicar a política de retenção de MPU a seu-balde:
aws s3api put-bucket-lifecycle-configuration --bucket seu-bucket --lifecycle-configuration file://mpu-retention.json
Agora você definiu a regra de retenção de MPU para seu bucket e pode ter certeza de que não verá o problema novamente. Observe que as Políticas de Ciclo de Vida são aplicadas pela AWS uma vez por dia, então as novas políticas entrarão em vigor nas próximas 24 horas.
Max Bozhenko, Entusiasta e praticante de FinOps, CTO na Hystax