Como reduzir custos com S3? 13 dicas que podem ajudar
Neste artigo, você aprenderá algumas das estratégias mais utilizadas para reduzir os custos do Amazon S3.
Primeiro, vamos revisar os fatores que afetam os custos mensais do Amazon S3. Você pagará em termos de:
- Tamanho dos dados armazenados a cada mês (GB).
- Número de operações de acesso concluídas (por exemplo, PUT, COPY, POST, LIST, GET, SELECT ou outros tipos de solicitação).
- Número de transições entre classes diferentes.
- Tamanho da recuperação de dados e quantidade de solicitações.
- Taxas de transferência de dados (largura de banda do Amazon S3) – Também conhecido como data transfer out
Um dos fatores de custo mais importantes é a classe de armazenamento. Certifique-se de compreender as diferentes classes disponíveis e seus casos de uso. Vamos revisá-los rapidamente e compará-los.
O Amazon S3 oferece 6 classes de armazenamento diferentes:
- S3 Standard
- S3 Intelligent-Tiering
- S3 Standard-IA
- S3 One Zone-IA
- S3 Glacier
- S3 Glacier Deep Archive
Lembre-se de que cada objeto S3 pode ser atribuído a uma classe de armazenamento específica. Portanto, um bloco pode ter objetos com diferentes classes simultaneamente.
Aqui está uma tabela que resume os principais parâmetros de custo para cada classe de armazenamento (para N. Região da Virgínia).
S3 Storage ClassStorage ($ / GB) GET ($ / 1000 solicitações)
Transições do ciclo de vida ($ por 1.000 solicitações)
Recuperação de dados ($ por 1.000 solicitações) Preço de recuperação de dados ($ por GB)
Para tornar as coisas mais simples, esta tabela não reflete todos os elementos cobrados pelo AWS S3. Por exemplo, ela não considera solicitações PUT (ou outras), recuperações de dados que não sejam em massa ou custos de transferência de dados. Mas descreve os custos que diferem com base nos tipos de classe.
Você também notará que o Preço / Gb de armazenamento aumenta de cima para baixo na tabela. Mas o custo de acesso aumenta ao mesmo tempo. Portanto, a classe certa a ser usada depende da frequência com que você acessa cada objeto S3.
A classe S3 Standard é normalmente usada para dados acessados com frequência. Embora o custo por Gb seja alto, você não paga pelo número de solicitações. E, portanto, essa classe de armazenamento é mais adequada para objetos lidos ou gravados várias vezes por mês.
A terceira classe da tabela é S3 Standard-IA. Tem um preço de armazenamento mais baixo. Mas o custo do acesso é maior. De acordo com a AWS, ela deve ser usada para dados de longa duração, mas raramente acessados, que precisam de acesso instantâneo.
Como regra geral, o S3 Standard-IA deve ser usado se o objeto for acessado em média menos de uma vez por mês. Por que um mês? Porque essa é a frequência em que S3 Standard e S3 Standard-IA têm aproximadamente o mesmo custo geral. E também é o tempo mínimo recomendado para manter os objetos na classe S3 Standard-IA. Se forem mantidos por menos de 30 dias, o restante será cobrado.
Normalmente, é difícil saber com que frequência o objeto é acessado. A AWS criou o S3 Intelligent-Tiering para resolver esse problema. Esta classe move automaticamente os dados entre as classes S3 Standard e S3 Standard-IA. E isso minimiza o custo S3 do objeto. Se você estiver mantendo um objeto por mais de 30 dias, a classe S3 Intelligent-Tiering será mais barata do que S3 Standard e S3 Standard-IA. Essa deve ser sua primeira opção nesses casos.
A classe S3 One Zone-IA é semelhante a S3 Standard-IA. Mas, em vez de armazenar dados em 3 (ou mais) AZs, os dados são armazenados em apenas um AZ. Por esse motivo, os dados podem ficar indisponíveis se o AZ falhar. Você deve usar o S3 One Zone-IA apenas se puder tolerar esse risco.
As últimas 2 classes da tabela são S3 Glacier e S3 Glacier Deep Archive. Eles têm o menor custo por GB. Mas o custo do acesso é alto. Portanto, eles são usados para fins de arquivamento. Eles substituem as bibliotecas usadas no local.
Você deve ter em mente que os objetos Glacier não estão imediatamente disponíveis. Se você quiser acessar o conteúdo de um objeto em qualquer classe Glacier, terá que esperar até que a recuperação termine. Para o modo de recuperação em massa, esse tempo é entre 5 e 12 horas. E outros modos de recuperação são mais rápidos, mas mais caros. Por esse motivo, o Glacier só deve ser usado para objetos raramente acessados. Por exemplo, o Glacier é ideal para backups, arquivamento e quaisquer dados acessados com pouca frequência a longo prazo.
A diferença entre o S3 Glacier e o S3 Glacier Deep Archive é que o último é para objetos acessados com menos frequência. Por exemplo, é recomendado para objetos acessados a cada 6 (ou mais) meses. Os custos de armazenamento do S3 Glacier Deep Archive são mais baixos. Mas o objeto precisa ser armazenado por pelo menos 180 dias naquela classe. Caso contrário, esse período mínimo será cobrado.
Acabamos de descrever as principais características de cada classe S3 e os casos de uso sugeridos. Agora podemos começar a otimizá-los.
Abaixo estão as principais estratégias para reduzir os custos do AWS S3:
1. Defina a classe s3 certa para novos objetos antes da criação
Sua primeira etapa é analisar os padrões de acesso para os seus dados. Comece a pensar sobre o uso pretendido para cada novo objeto a ser criado no S3. Cada objeto em S3 deve ter um padrão de acesso específico. E, portanto, há uma classe S3 que funciona melhor para isso. A classe certa deve ser aplicada a todos os novos objetos no Amazon S3. Não é possível definir a classe padrão por bloco no S3. Mas você pode atribuí-la por objeto.
Comece definindo a melhor classe para cada novo objeto no S3. E defina essa classe na operação que carrega esse objeto para o Amazon S3. Isso pode ser feito usando AWS CLI, AWS Console ou AWS SDK. Como consequência, cada novo objeto terá a classe certa. Essa pode ser a melhor estratégia para economizar dinheiro a longo prazo. E provavelmente será a estratégia mais eficiente em termos de tempo.
2. Ajuste a classe S3 para objetos existentes
Agora que você já definiu a classe certa para os novos objetos (a serem criados), você pode se concentrar nos objetos já criados. O processo é semelhante ao descrito no ponto anterior. Comece a analisar os padrões de acesso a dados para cada objeto existente em sua conta S3. Em seguida, decida a melhor classe para cada um. E, finalmente, atribua essa classe na configuração do objeto. Isso permitirá que você otimize cada intervalo S3 e, assim, reduza seus custos S3.
Como verificar se funcionou? Você pode usar o AWS Cost Explorer para verificar o seu custo S3 diário. Você também notará a redução de custos na fatura do próximo mês. As contas da AWS mostram o consumo de cada serviço, incluindo a do Amazon S3.
Considere que pode ser demorado atualizar cada classe de objeto após a sua criação. É por isso que é muito importante definir classes antes que os objetos sejam criados (conforme descrito anteriormente). Observe também que esse processo consiste em uma revisão objeto por objeto (ou bloco por bloco). E, dependendo do número de objetos que você tem, pode levar um tempo considerável. Provavelmente é melhor focar em objetos grandes (ou acessados com muita frequência). E então atualize suas classes de armazenamento primeiro.
Você também pode usar S3 Storage Class Analysis. Esta é uma ferramenta para analisar os padrões de acesso aos objetos S3. Ela monitora os objetos dentro de um bloco. E mostrará a quantidade de dados armazenados no intervalo, a quantidade de dados recuperados e com que frequência os dados são acessados (com base na idade do objeto). Observe que há uma cobrança pequena feita por esta ferramenta. Mas permite que você entenda se os objetos são acessados com frequência. Depois de entender o padrão de acesso, você pode atualizar a classe de armazenamento S3 de acordo. Por exemplo, se você descobrir que a maioria dos objetos em um bloco é acessada apenas uma vez por ano (e você não precisa de acesso imediato), você deve ajustar sua classe de armazenamento para S3 Glacier Deep Archive.
3. Remova objetos S3 não utilizados
Você provavelmente já percebeu que paga pela quantidade de dados armazenados no S3. Portanto, se você remover objetos não utilizados, também reduzirá os custos do S3.
Como verificar o conteúdo dos seus blocos S3? Existem várias maneiras.
Por exemplo, você pode listar os objetos em cada intervalo. Isso mostrará os nomes dos objetos (ou chave) sem baixar o conteúdo do objeto. Isso pode ser feito usando o AWS Console, AWS CLI ou SDK.
Outra opção para verificar o conteúdo dos blocos S3 é usar o CloudWatch Metrics. Use a métrica BucketSizeBytes para obter o tamanho completo do intervalo. Ou use a métrica NumberOfObjects para obter o número de objetos armazenados nela. Essas são as métricas por intervalo e mostrarão o tamanho dos intervalos. Em seguida, você pode começar a remover qualquer objeto não utilizado nos blocos maiores.
Você também pode ativar o S3 Inventory em um bloco. Essa ferramenta prepara um arquivo CSV (ou Apache ORC), que lista todos os objetos em um intervalo. E é entregue a outro bloco S3 diariamente ou semanalmente. Essa é uma boa abordagem quando você tem milhares de objetos em um intervalo e deseja encontrar rapidamente algumas de suas propriedades (como tamanho, status de criptografia ou hora da última modificação). Observe que o inventário S3 tem um pequeno custo quando ativo.
4. Use o S3 Lifecycle Management
O Amazon S3 oferece uma ferramenta para alterar automaticamente a classe de armazenamento de qualquer objeto. Por exemplo, você pode fazer a transição da classe S3 Standard para S3 Glacier após alguns dias de criação do objeto. Portanto, você pode fazer a transição de cada objeto para a classe de armazenamento mais adequada. E isso vai se traduzir em uma redução de custos.
Como funciona o gerenciamento do S3 Lifecycle? Você define regras para cada intervalo. Cada regra tem um período de transição. Ele conta o número de dias desde que o objeto foi criado (ou removido). E a regra também define a classe de armazenamento para a qual fazer a transição após esse período. Observe que você sempre pode fazer a transição dos objetos para uma classe de armazenamento de longo prazo. Mas você não pode fazer a transição para uma classe de armazenamento de curto prazo.
Você também pode definir uma regra de ciclo de vida para um intervalo inteiro ou com base em um prefixo. Portanto, você não precisa fazer a transição dos seus objetos um por um. O S3 Lifecycle Management é uma das ferramentas mais úteis para economizar custos no S3. E você deve sempre considerar usá-lo.
5. Expire objetos S3
Esta é outra estratégia para remover objetos não utilizados. O Amazon S3 Lifecycle Management também pode definir uma política de expiração. Isso permite que você expire um objeto alguns dias após a sua criação. Cada objeto expirado será removido automaticamente pela AWS.
Se você mantiver os arquivos de log (ou quaisquer outros dados temporários) como objetos S3, deverá definir uma expiração para eles. Por exemplo, você pode definir que os objetos de log expirem 30 dias após a criação. E eles serão removidos automaticamente.
6. Expire uploads de várias partes incompletos
O Amazon S3 carrega objetos grandes usando upload de várias partes. A AWS divide um arquivo grande em fragmentos menores, e cada um é carregado independentemente para o S3. Em seguida, o AWS junta as várias partes carregadas no objeto final. A AWS recomenda o uso de uploads de várias partes para objetos maiores que 100 Mb. E é necessário usá-lo para objetos com mais de 5 TB.
O upload de objetos grandes pode demorar algum tempo. E este processo de upload pode ser interrompido. Como consequência, o bloco de upload S3 manterá alguns fragmentos não utilizados. Para removê-los, você pode definir uma nova política do LifeCycle. As políticas têm uma configuração “Limpar uploads de várias partes incompletos” para expirar esses objetos parciais. A remoção desses objetos permitirá que você libere espaço no S3 e, em seguida, reduzirá custos.
7. Compactar objetos S3
Você também pode compactar qualquer objeto antes de enviar o objeto S3. Basta criar um arquivo compactado (por exemplo, ZIP, GZIP ou equivalente), que será menor que o original. E então você carrega o arquivo compactado no S3. A quantidade de dados usados no S3 será menor. Então, os custos do Amazon S3 serão reduzidos.
Observe que, para obter o arquivo original, você terá que baixá-lo e também descompactá-lo. Mas você pode economizar muito espaço no S3 (por exemplo, ao usar arquivos de texto).
8. Empacotar objetos S3
Lembre-se de que você também paga pelo número de operações realizadas no Amazon S3. Se você tiver que baixar muitos objetos S3 simultaneamente, pode ser uma boa ideia compactá-los em um grande objeto (por exemplo, TAR, ZIP ou equivalente).
Algumas classes de armazenamento têm encargos de capacidade mínimos para objetos. Por exemplo, a carga de capacidade mínima por objeto para S3 Standard-IA e S3 One Zone-IA é 128 KB. E a carga de capacidade mínima por objeto para as classes S3 Glacier e S3 Glacier Deep Archive é de 40 Kb.
Por esse motivo, um pequeno objeto de 1 KB (com classe S3 Standard-IA) será cobrado como 128 KB. Empacotar vários arquivos juntos aproveitará as vantagens das taxas de capacidade mínimas. Se você empacotar objetos de tamanho pequeno juntos, também reduzirá os custos do S3.
9. Limitar as versões do objeto
O controle de versão do S3 Object é uma ferramenta muito útil. Cada vez que você altera o conteúdo de um objeto, a AWS manterá a versão anterior dele. Mas se você tiver um objeto de 1 MB com 100 versões, estará pagando por 100 MB de armazenamento.
Mas você pode usar políticas de ciclo de vida para excluir automaticamente as versões anteriores após algum tempo. Por exemplo, você define uma política para excluir objetos após 30 dias de se tornarem desatualizados. Isso limitará o número de versões armazenadas e diminuirá o armazenamento usado. Esta é outra abordagem para aumentar sua economia.
10. Usar o modo de recuperação em massa para S3 Glacier
O tempo de recuperação significa a rapidez com que o Amazon S3 disponibiliza o conteúdo do objeto. Observe que quanto mais rápido você recuperar os objetos, mais cara será a operação. Se você puder esperar algumas horas para recuperar os objetos, poderá economizar dinheiro. Portanto, tente usar o modo de recuperação em massa, se possível. Você pode escolher o modo de recuperação ao solicitar essa recuperação.
11. Use a funcionalidade Query in Place
Alguns aplicativos armazenam tabelas como objetos Amazon S3. Essas tabelas têm um formato específico (como formatos JSON, CSV ou Apache Parquet). Para consultar os dados, você deve baixar o arquivo completo. E então você tem que consultar a tabela inteira para encontrar os dados desejados dentro da tabela.
Mas existem maneiras mais eficientes de obter o conteúdo. A AWS oferece ferramentas como Amazon Athena, S3 Select ou Amazon Redshift Spectrum. Essas ferramentas permitem que você execute consultas diretamente na nuvem. Elas processam os dados usando comandos SQL. E então elas enviam os dados de que você precisa.
Essas ferramentas oferecem muitas vantagens. Como as consultas são concluídas na nuvem, você precisará de menos poder de processamento local. Outro benefício é que você baixa menos dados do Amazon S3. Isso torna o processo mais rápido e barato. Lembre-se de que você é cobrado pela quantidade de dados baixados do S3. Se menos dados forem solicitados, você economizará dinheiro em largura de banda.
Observe que as consultas S3 têm um pequeno custo adicional. Você deve avaliar se obterá uma otimização de custos.
12. Mudar de região
Algumas regiões são muito mais caras do que outras. E isso também se aplica aos preços do Amazon S3.
Portanto, vale a pena considerar mover o seu bloco S3 para uma região com preços mais baixos.
Outro fator a ser considerado são os custos de transferência de dados entre regiões da AWS. Os dados enviados de um intervalo para um VPC na mesma região são gratuitos. Mas o envio de dados para um VPC em outra região terá um custo por Gb. É uma boa ideia manter um bloco na região para onde os dados são enviados.
Uma boa estratégia, principalmente para aplicações que tem buckets no Brasil, é avaliar a mudança para uma região mais barata, e passar a utilizar a entrega via CDN para cache de objetos. Com isso é possível reduzir custos de transfer out sem perder qualidade de entrega.
Fonte: https://dzone.com/articles/how-to-reduce-amazon-s3-costs
Precisa de ajuda para reduzir custos com S3 na AWS? A GoCache pode ajudar :) Fale conosco!