O blog da AWS

Otimizando o S3: Gerenciando Transições de Dados do Amazon S3 Intelligent-Tiering

Por Mateus Pereira, Arquiteto de Soluções Sênior de Parceiros na AWS.

À medida que as empresas aproveitam o poder dos datalakes e das tecnologias de machine learning e analytics para gerar insights e impulsionar seus negócios, o volume de dados armazenados cresce exponencialmente, levando ao aumento dos custos e à demanda por soluções escaláveis.

Com foco em otimizar esses custos, as organizações tem a prática de movimentar dados frios – aqueles de baixo acesso – para classes de armazenamento mais econômicas. Contudo, com o aumento contínuo do volume de dados, identificar esses dados e otimizar o posicionamento dessas informações se torna um desafio. Para maximizar os benefícios do armazenamento em camadas, é essencial monitorar o uso e os custos associados.

O Amazon S3 simplifica esse gerenciamento com funcionalidades como S3 Intelligent-Tiering, que monitora os padrões de acesso e movimenta os objetos entre camadas de armazenamento automaticamente. O serviço oferece múltiplos tiers, cada um projetado para atender a diferentes necessidades de desempenho, acesso e custo. Enquanto a classe S3 Standard mantém um custo fixo para todos os objetos, o S3 Intelligent-Tiering utiliza outras classes com menor custo para objetos menos acessados.

Entretanto, o uso do S3 Intelligent-Tiering pode apresentar desafios em ambientes com padrões de acesso previsíveis, requisitos de compliance ou necessidades específicas de armazenamento externo e backup. Nesses casos, podem surgir custos adicionais, como taxas de recuperação, monitoramento ou cobranças por exclusão de objetos, tornando vantajosa a migração para outra classe do S3. Este post explorará alternativas para essa movimentação e as considerações associadas.

Solução 1: Usando Regras de Ciclo de Vida do Amazon S3

Uma das maneiras de mover dados para fora do S3 Intelligent-Tiering é utilizar os S3 Lifecyle Rules. Essas regras permitem automatizar as transições de dados entre classes de armazenamento, incluindo mover objetos do Intelligent-Tiering para outras classes como S3 Standard, S3 Glacier ou S3 Glacier Deep Archive. Para implementar isso:

  • Navegue até o console do S3 e selecione o bucket contendo os dados que deseja mover.
  • Clique na aba “Gerenciamento” e crie uma nova regra de Lifecycle.

  • Configure a regra para transitar objetos da classe de armazenamento Intelligent-Tiering para a classe de armazenamento desejada, com base na idade ou outros critérios.
  • Revise e salve a regra de Lifecycle, e ela começará a mover seus dados automaticamente conforme as políticas definidas.

Considerações de custo

Ao usar do Amazon S3 para mover dados para fora da classe de armazenamento S3 Intelligent-Tiering, vários custos potenciais devem ser considerados, incluindo os custos de armazenamento da classe de armazenamento de destino (por exemplo, S3 Standard, S3 Glacier ou S3 Glacier Deep Archive), taxas de transição de dados por GB movido, custos de recuperação se acessar dados em classes de armazenamento de menor acesso, como o S3 Glacier, e possíveis taxas de exclusão antecipada se os requisitos de duração mínima de armazenamento da classe de destino não forem atendidos.

Solução 2: Usando a API do Amazon S3

Se você precisar de um controle mais granular ou deseja integrar o movimento de dados em sua aplicação ou fluxo de trabalho, pode usar a API do Amazon S3 para mover dados programaticamente para fora da classe Intelligent-Tiering. Essa abordagem envolve o uso de SDKs da AWS ou da AWS CLI para executar as chamadas da API necessárias, oferecendo flexibilidade e permitindo integrar o movimento de dados em suas aplicações ou fluxos de trabalho personalizados.

As etapas principais são:

  • Identifique os objetos que deseja mover e sua classe de armazenamento atual (S3 Intelligent-Tiering).
  • Use as APIs S3 CopyObject ou S3 PutObject para criar uma cópia dos objetos na classe de armazenamento de destino desejada.
  • (Opcional) Exclua os objetos originais na classe de armazenamento Intelligent-Tiering usando a API S3 DeleteObject.

Se houver requisitos específicos ou necessidade de um gerenciamento de dados mais personalizado, o SDK da AWS ou a AWS CLI podem ser usados para criar scripts que verificam periodicamente os objetos na classe S3 Intelligent-Tiering e os movem para a classe de armazenamento desejada. Esse método é eficaz para lidar com necessidades complexas ou em evolução de gerenciamento de dados. Os scripts utilizam as mesmas APIs do S3 (CopyObject e PutObject) e podem ser escritos em linguagens de programação como o SDK da AWS para Python ou o SDK da AWS para Java. Além disso, serviços da AWS como EC2 ou Lambda, podem ser aproveitados para executar esses scripts periodicamente. Veja os seguintes exemplos:

AWS CLI

aws s3 cp s3://seu-bucket/seu-objeto s3://seu-bucket/seu-objeto --storage-class STANDARD_IA

aws s3 mv s3://seu-bucket/seu-objeto s3://seu-bucket/seu-objeto --storage-class STANDARD_IA (Comando de cópia com comando de exclusão)

AWS SDK Python

import boto3

def move_object(bucket_name: str, object_key: str, target_storage_class: str) -> None:
s3 = boto3.client('s3')
# Copiar o objeto para a nova classe de armazenamento
s3.copy_object(
Bucket=bucket_name,
Key=object_key,
CopySource={'Bucket': bucket_name, 'Key': object_key},
StorageClass=target_storage_class
)
# Excluir o objeto original
s3.delete_object(Bucket=bucket_name, Key=object_key)
print(f"Objeto {object_key} movido para a classe de armazenamento {target_storage_class}.")

# Exemplo de uso
bucket_name = 'nome-do-seu-bucket'
object_key = 'caminho/para/seu-objeto'
target_storage_class = 'GLACIER' # Escolha a classe de armazenamento desejada, como STANDARD_IA, GLACIER, DEEP_ARCHIVE, etc.

move_object(bucket_name, object_key, target_storage_class)
Python

Considerações de custo

Ao usar a API do Amazon S3 para mover programaticamente dados para fora da classe de armazenamento S3 Intelligent-Tiering, as principais considerações de custo incluem os custos de armazenamento da classe de armazenamento de destino, taxas de transferência de dados ao mover os dados, custos de requisição da API para as chamadas necessárias de CopyObject, PutObject e DeleteObject, custos potenciais de recuperação se os dados forem movidos para classes de armazenamento de menor acesso como o S3 Glacier, e taxas de exclusão antecipada se os requisitos de duração mínima de armazenamento da classe de destino não forem atendidos. A execução de scripts usando Lambda ou outros recursos para chamar as APIs do S3 incorrerá em custos de computação.

Solução 3: Usando o AWS DataSync

Para cenários de migração de dados em maior escala ou mais complexos, você pode usar o AWS DataSync, um serviço de transferência de dados que simplifica e acelera o movimento de dados para dentro, fora e dentro da AWS. O DataSync pode ser particularmente útil ao mover dados do S3 Intelligent-Tiering para outras classes de armazenamento ou serviços.

Para usar o DataSync para esse propósito:

  • Crie uma task do DataSync e configure a origem como o bucket S3 com dados na classe de armazenamento Intelligent-Tiering.

  • Especifique o local de destino de armazenamento, que pode ser outro bucket S3 (outra classe de armazenamento), um sistema de arquivos Amazon EFS ou um sistema de arquivos Amazon FSx.
  • Personalize as configurações da task, como o agendamento de transferência de dados, limites de largura de banda e opções de verificação de dados.

  • Inicie a task do DataSync, e ela moverá seus dados de forma segura e confiável para o local de destino.

Considerações de custo

Ao usar o AWS DataSync para mover dados para fora da classe de armazenamento Amazon S3 Intelligent-Tiering, as principais considerações de custo incluem as taxas por GB de dados transferidos através do serviço DataSync, os custos de armazenamento do local de destino (seja outro bucket S3, Amazon EFS ou Amazon FSx), taxas de transferência de dados para transferências de saída da região de origem da AWS, custos potenciais de recuperação se os dados forem movidos para classes de armazenamento de menor acesso, como o S3 Glacier, e taxas de exclusão antecipada se o local de armazenamento de destino tiver um requisito de duração mínima e os dados forem excluídos prematuramente.

Conclusão

O Amazon S3 Intelligent-Tiering é uma classe de armazenamento poderosa, mas pode haver momentos em que seja necessário mover proativamente os dados para outra classe. Neste post, exploramos três métodos eficientes para fazer isso: usando Lifecycle rules do Amazon S3, a API do Amazon S3, o AWS DataSync e criando scripts personalizados com AWS SDKs ou AWS CLI. Dependendo dos seus requisitos específicos, volume de dados e nível de automação necessário, essas abordagens podem ajudar a gerenciar de forma eficaz o armazenamento de dados e os custos dentro da AWS.

Sobre o Autor

Mateus Pereira é um Arquiteto de Soluções Sênior de Parceiros na AWS, atuando na região de LATAM. Sua experiência profissional anterior inclui desenvolvimento de software, arquitetura de aplicações em núvem com foco em virtualização, armazenamento e proteção de dados. Bacharel em Sistemas de Informação e MBA em Arquitetura de Soluções.