O blog da AWS

Dez dicas para otimização de custos na AWS

Nota: Este blog post é uma atualização da versão publicada em novembro de 2016. https://aws.amazon.com/pt/blogs/aws-brasil/dez-dicas-para-otimizacao-de-custos-na-aws/

Otimização de custos é um assunto recorrente entre os clientes da AWS: todos desejam, de alguma maneira, obter uma conta menor no final do mês. Entenda por otimizar custos a redução dos seus gastos com AWS, mas mantendo os níveis de robustez e escalabilidade de suas aplicações, sem que estes sejam impactados.

Este artigo conterá diversas dicas de fácil implementação, que irão ajudá-los a criar e manter um ambiente com custo otimizado na AWS.

Você aprenderá a identificar oportunidades de ganhos rápidos com o AWS Trusted Advisor e AWS Compute Optimizer, a criar ambientes transientes de desenvolvimento, testes e homologação, e saberá mais sobre conceitos, recursos e ferramentas da AWS disponíveis para ajuda-lo em diversos cenários de redução de custos.

1 – AWS Trusted Advisor

O AWS Trusted Advisor é uma ferramenta on-line que fornece orientações de como otimizar seu ambiente seguindo as melhores práticas da AWS.

Visão geral de funcionamento do AWS Trusted Advisor

Ela oferece um conjunto de verificações em cinco categorias: otimização de custos, segurança, tolerância a falhas, desempenho e limites de serviços.

Visão consolidada das cinco categorias de verificações

Através da ferramenta, você terá recomendações de recursos com potencial de otimização. Veja alguns exemplos relacionados à otimização de custos.

Identifique instâncias de Amazon EC2 com baixa utilização

O Low Utilization Amazon EC2 Instances check verifica quais instâncias EC2 estavam com baixa atividade – ligadas em qualquer momento durante os últimos 14 dias e alerta se a utilização diária de CPU foi menor do que 10% ou se a entrada e saída de rede foi menor do que 5 MB durante 4 dias ou mais.

Instâncias EC2 com baixa utilização poderiam ser redimensionadas para um tamanho menor, consolidadas ou mesmo desligadas.

Identifique as instâncias de Amazon EC2 em potencial para reserva e receba descontos

O Amazon EC2 Reserved Instances Optimization check verifica o histórico de consumo nos últimos 30 dias das instâncias EC2 e gera recomendações qualificadas para reservas. Em cenários de previsibilidade de utilização é possível realizar a reserva de instância, recebendo descontos de até 75% se comparados aos custos do modelo on-demand. Veja os detalhes do funcionamento de reserva de instâncias

Identifique volumes Amazon EBS com baixa utilização e reduza o custo através de snapshot e deleção

Volumes EBS que possuem baixa atividade (menor que 1 IOPS por dia) em um período de 7 dias, indicam que provavelmente não estão em uso. Identifique esses volumes através do Trusted Advisor Underutilized Amazon EBS Volumes Check.

Para reduzir os custos, primeiro tire um snapshot dos volumes (caso você precise no futuro), então delete-os. Você pode automatizar a criação de snapshots através do Amazon Data Lifecycle Manager. Siga estes passos para deletar os volumes EBS.

Identifique instâncias de Amazon RDS e Amazon Redshift com baixa utilização e reduza o custo pausando-as

Use o Trusted Advisor Amazon RDS Idle DB instances check para identificar as instâncias de banco de dados que não tiveram alguma conexão nos últimos 7 dias.

Para reduzir os custos, pare essas instâncias utilizando as etapas descritas neste blog post. Para o Amazon Redshift, utilize o Trusted Advisor Underutilized Redshift clusters check, para identificar os cluster que não tiveram conexões e menos do que 5% de utilização média de CPU em 99% do tempo nos últimos 7 dias. Para reduzir os custos, pause os clusters seguindo os procedimentos descritos nesse blog post.

Opções para pausa do cluster de Amazon Redshift

Reavalie a arquitetura de redes e reduza custos deletando balanceadores de carga ociosos
Utilize o Trusted Advisor Idle Load Balancers check para obter um relatório de balanceadores de cargas que tiveram RequestCount menor do que 100 nos últimos 7 dias. Utilize os passos descritos aqui para deletar esses balanceadores e reduzir os custos. Adicionalmente, utilize os passos deste blog para reavaliar os custos de transferência de dados através do Cost Explorer.

Saiba mais sobre o AWS Trusted Advisor em https://aws.amazon.com/pt/premiumsupport/technology/trusted-advisor/

2 – AWS Compute Optimizer

O AWS Compute Optimizer faz recomendações dos recursos computacionais que são ideais para suas cargas de trabalho, com objetivo de reduzir custos e melhorar o desempenho, utilizando machine learning na análise de métricas do histórico de utilização. O provisionamento excessivo de recursos pode gerar custos desnecessários de infraestrutura e, em contrapartida, o provisionamento insuficiente de recursos computacionais pode causar a degradação do desempenho de suas aplicações.

Visão geral de funcionamento do AWS Compute Optimizer

O AWS Compute Optimizer vai te ajudar a escolher o tipo de instância EC2 mais adequado, baseado no histórico de utilização, incluindo aquelas que fazem parte de um Amazon EC2 Auto Scaling Group.

Recomendações dos tipos de instâncias

O AWS Compute Optimizer está disponível sem custos adicionais. Veja mais detalhes do serviço neste blog post.

3 – Ambientes de Desenvolvimento, Testes e Homologação

Desligue instâncias não utilizadas

A maneira mais simples de reduzir custos em ambientes como esse é desligando as instâncias quando elas não estiverem sendo utilizadas, o que pode proporcionar, por exemplo, uma economia de até 74% em computação se as instâncias funcionarem apenas em horário comercial.

É possível realizar a inicialização e desligamento das instâncias manualmente ou de forma automática utilizando outras soluções da AWS. Você pode conferir essa estratégia de forma mais detalhada na seção “Remova recursos não utilizados ou ociosos”, através de soluções como o AWS Instance Scheduler.

Interrompa instâncias de banco de dados do Amazon RDS

Em ambientes de teste e desenvolvimento é bastante comum que não apenas as instâncias EC2 sejam usadas intermitentemente, mas também as instâncias de bancos de dados. Se este for o seu caso, você poderá parar a instância de banco de dados do Amazon RDS durante os períodos ociosos para economizar dinheiro. Quando a instância de banco de dados é interrompida, você é cobrado pelo armazenamento provisionado (inclusive IOPS provisionadas) e armazenamento de backup (inclusive snapshots manuais e backups automatizados na janela de retenção especificada), mas não pelas horas da instância de banco de dados.

Para saber mais sobre como parar uma instância de banco de dados do Amazon RDS acesse: https://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/USER_StopInstance.html

Snapshots

Se suas instâncias de bancos de dados forem ficar um período considerável de tempo ociosas é possível maximizar ainda mais a economia obtida criando um snapshot dos seus bancos de dados e encerrando a instância totalmente. Isso interrompe não apenas a cobrança das horas da instância de banco de dados, mas também do armazenamento provisionado e você paga apenas pelo armazenamento do backup do banco de dados durante esse período. No momento em que os bancos de dados forem necessários novamente é possível restaurá-lo completamente a partir do snapshot que você criou antes de encerrá-lo.

Para obter mais informações sobre os snapshots do Amazon RDS acesse: https://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html

Use o CloudFormation para recriar ambientes

Se seu ambiente de testes ou de desenvolvimento não sofre mudanças constantes você pode transformá-la em código utilizar o CloudFormation para provisionar seus recursos. O CloudFormation é uma solução da AWS que permite tratar sua infraestrutura como um código que pode ser utilizado para criar e recriar seus ambientes quantas vezes forem necessárias. Com essa solução é possível criar templates de sua infraestrutura e provisionar (ou excluir) todos os recursos que a compõem de forma automática, rápida e segura.

Usando essa estratégia é possível excluir todo o ambiente de desenvolvimento/teste nos momentos em que eles não serão úteis e recriá-los por completo em minutos no momento em que forem necessários novamente.

Se você não estiver usando provedores de recursos terceirizados, as operações do CloudFormation não são cobradas, de forma a permitir a redução dos custos de seu ambiente a quase zero nos períodos de ociosidade. Além disso, o CloudFormation torna mais fácil replicar sua infraestrutura por completo permitindo que você crie ambientes de testes idênticos aos seus outros ambientes rapidamente, mesmo que seja para testes rápidos e pontuais.

Para saber mais sobre o CloudFormation acesse: https://aws.amazon.com/pt/cloudformation/

Use o Amazon Redshift pause e resume

Assim como muitos outros serviços da AWS o Amazon Redshift agora possui uma função de pausa e retomada de funcionamento, viabilizando que sejam empregados também em ambientes de desenvolvimento e teste de forma eficiente. Sendo assim, clusters do Amazon Redshift que não sejam utilizados o tempo todo podem ser pausados durante os períodos de inatividade para economizar com os recursos computacionais e retome o funcionamento apenas quando for necessário.

Quando você pausa um cluster, o Amazon Redshift cria um snapshot e desliga os nós do cluster de forma que o faturamento computacional sob demanda fica suspenso e apenas o armazenamento de backup é faturado durante este período. Esse recurso pode proporcionar economias significativas a depender do tempo ocioso de seu cluster de Amazon Redshift.

Você pode obter mais informações sobre essa funcionalidade no link (em inglês): https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-operations.html#rs-mgmt-pause-resume-cluster

Uso de instâncias Spot do Amazon EC2

Com o objetivo de aproveitar a capacidade ociosa de infraestrutura dos datacenters, a AWS criou um modelo de preço dinâmico, chamado instâncias Spot. O preço das instâncias spot é baseado na oferta e demanda desta infraestrutura e oscila analogamente a uma bolsa de valores, com preços de instâncias subindo e descendo conforme outros clientes as solicitam.

Com esse modelo de precificação você define o preço máximo que deseja pagar por hora por uma instância, se o valor dessa da instância desejada nessa “bolsa de valores” cair para um valor abaixo do valor que você definiu, sua instância é iniciada. Se o valor subir e ficar “mais caro” que o valor selecionado por você, sua instância é interrompida após um aviso prévio de 2 minutos.

Esse modelo é ideal para aplicações que estejam preparadas para lidar com interrupções, o que permite que ela possa ser utilizada sem problemas em ambientes de desenvolvimento ou de testes e pode trazer uma economia de até 90% em relação ao preço on-demand.

EC2 Spot Blocks

Com as instâncias Spot Blocks é possível ter instâncias rodando por um período pré-definido de 1 a 6 horas de duração. Você consegue realizar uma requisição definindo a quantidade de horas que deseja usar além de definir o preço que deseja pagar e se houver a capacidade solicitada disponível para o período definido suas instâncias serão iniciadas e só serão interrompidas quando acabar o tempo requisitado.

Dessa forma você pode garantir que um ambiente permaneça rodando durante o período que você precisa a um preço que geralmente é de 30% a 45% menor que o de instâncias on-demand sem se preocupar com possíveis interrupções repentinas que podem acontecer com instâncias Spot normais. Por exemplo, você pode fazer requisições dessas instâncias para comprar seu ambiente de desenvolvimento ou de testes de forma a cobrir todo o horário em que esses ambientes serão úteis (como o horário comercial) e deixar que sejam automaticamente encerradas ao final do período requisitado.

Saiba mais em: https://aws.amazon.com/pt/ec2/spot/

4 – Remova recursos não utilizados ou ociosos

A precificação sob demanda da AWS permite que os recursos provisionados sejam cobrados apenas pelo tempo em que eles estão de fato sendo utilizados, tome vantagem disso e desligue suas instâncias ao fim da carga de trabalho desempenhada por elas.

Esta dica é bem aderente para ambientes onde não há a necessidade de ficarem ligados 24 horas nos 7 dias da semana. Ambientes de desenvolvimento, testes, treinamento, etc., geralmente não são utilizados nos períodos noturnos ou finais de semana e podem ser desligados. Uma menor utilização implica diretamente em economia de custos.

Se considerarmos uma jornada de trabalho de 8 horas durante dias comerciais e 4 horas aos sábados chegamos em um total de 44 horas semanais. Recursos que só são necessários durante esse período de tempo não devem permanecer ligados durante as 168 horas que compõem uma semana, o que pode significar uma economia de 74% no final do mês.

Para que essa economia seja alcançada suas instâncias podem ser iniciadas e desligadas manualmente através da AWS Console ou de maneira automatizada através de scripts ou serviços como AWS Lambda ou AWS Data Pipeline.

O EC2 Scheduler é uma solução desenvolvida pela AWS que possibilita o agendamento customizado da inicialização e desligamento de instâncias EC2. Saiba mais em: https://aws.amazon.com/pt/answers/infrastructure-management/ec2-scheduler/

Você também pode realizar o agendamento através do AWS Lambda:
https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/

Remova os demais recursos ociosos ou de baixa utilização

Além de instâncias EC2 existem outros diversos recursos que podem estar sendo subutilizados ou completamente ociosos. O esquecimento desses demais recursos também impacta em um maior gasto. Veja abaixo uma lista com os principais recursos ociosos esquecidos:

  • Baixa utilização de instâncias EC2: desligue-as ou faça a consolidação das aplicações em uma única instância;
  • Elastic Load Balancing ociosos, que não possuem alguma instância de backend associada. Se o ELB não recebe e distribui tráfego, então pode ser desligado;
  • Volumes EBS que não estão ligados a alguma instância ou estão subutilizados. Ao invés de deixar um volume EBS ocioso, caso queira recuperá-lo futuramente, tire e armazene o snapshot deste volume, que possui custo inferior;
  • Elastic IPs não associados a instâncias, sendo cobrados por esse período;
  • Conexões VPN não utilizadas;
  • NAT Gateways que não recebem tráfego;
  • Instâncias de Amazon RDS subutilizadas.

Para monitorar o consumo dos recursos de seu ambiente utilize o AWS CloudWatch. Faça a análise de diferentes métricas, de consumo atual e passado através dos dashboards, e detecte possíveis ociosidades. Saiba mais em https://aws.amazon.com/pt/cloudwatch/.

5 – Evite o desperdício: alinhe o provisionamento com o consumo/dimensionamento correto

Use o Amazon CloudWatch para monitorar seus recursos

O serviço de monitoramento Amazon CloudWatch possibilita o acesso métricas de seus recursos. Como por exemplo a porcentagem de consumo de CPU das instâncias EC2 presentes em seu ambiente, ou o volume de leitura e escrita de um determinado EBS, ou ainda o número de conexões em seu banco de dados rodando em um Amazon RDS.

Identifique os recursos ociosos ou subutilizados com as métricas do CloudWatch. Atue neles para adequar necessidade com provisionamento de forma a diminuir os custos relacionados a eles.

Escolha tamanho e tipo certos de instância

O Amazon EC2 oferece uma ampla seleção de tipos de instâncias otimizadas para atender a diferentes casos de uso. Os tipos de instâncias consistem em várias combinações de CPU, memória, armazenamento e capacidade de rede e oferecem flexibilidade de escolha da composição adequada de recursos para os seus aplicativos. Cada tipo de instância inclui um ou mais tamanhos de instância, permitindo a escalabilidade de seus recursos de acordo com os requisitos da carga de trabalho a ser executada. Conheça melhor as opções de instâncias em: https://aws.amazon.com/pt/ec2/instance-types/.

O EC2 Right Sizing Solution é uma ferramenta que realiza a análise do tamanho certo das instâncias de seu ambiente, oferecendo recomendações detalhadas sobre quais instâncias são mais efetivas em custo. Saiba mais em: https://aws.amazon.com/pt/answers/account-management/cost-optimization-ec2-right-sizing/.

Escolha o tipo certo de banco de dados

Escolha uma de nossas opções de bancos de dados baseado nas necessidades da sua aplicação. Existem banco de dados que são especializados em determinados workloads: são mais eficientes e conseguem realizar um número maior de operações, com os mesmos recursos de infraestrutura, se comparados ao modelo relacional que geralmente é empregado na maioria dos casos.

Tipo de banco de dados Casos de uso Serviço da AWS
Relacional Aplicações tradicionais, ERP, CRM, comércio eletrônico

Amazon AuroraAmazon RDS

Amazon Redshift

Chave-valor Aplicativos da Web de alto tráfego, sistemas de comércio eletrônico, aplicativos de jogos Amazon DynamoDB
Em memória Armazenamento em cache, gerenciamento de sessões, placares de jogos, aplicações geoespaciais

 

Amazon ElastiCache for Memcached

Amazon ElastiCache for Redis

Documento Gerenciamento de conteúdo, catálogos, perfis de usuários Amazon DocumentDB
Colunar Aplicativos industriais de alta escala para manutenção de equipamentos, gerenciamento de frota e otimização de rotas Amazon Managed Apache Cassandra Service
Em grafos Detecção de fraudes, redes sociais, mecanismos de recomendação Amazon Neptune
Séries temporais Aplicativos IoT, DevOps, telemetria industrial Amazon Timestream
Livros Contábeis Sistemas de registro, cadeia de suprimentos, registros, transações bancárias Amazon QLDB

Consolidação de servidores

Aproveite ao máximo a capacidade dos recursos através da implantação de várias aplicações em uma única instância. Esta estratégia tem o objetivo de minimizar a capacidade ociosa através da consolidação de aplicações nos servidores. Tome vantagem de estratégias de containers para alcançar isso.

Se você procura… considere usar… pois…
Armazenar, criptografar e gerenciar imagens de Containers Amazon ECR O ECR compacta e criptografa suas imagens de contêiner, tornando-as rápidas para iniciar e disponíveis para serem executadas em qualquer lugar.
Rodar aplicações em contêiner ou criar microsserviços Amazon ECS O Amazon Elastic Container Service (Amazon ECS) é um serviço de orquestração de contêiner totalmente gerenciado que fornece a maneira mais segura, confiável e escalável de executar aplicativos em contêiner.
Gerenciar contêineres com o Kubernetes Amazon EKS O Amazon Elastic Kubernetes Service (Amazon EKS) é um serviço Kubernetes totalmente gerenciado que fornece a maneira mais segura, confiável e escalável de executar aplicativos em contêiner usando o Kubernetes.
Rodar contêineres sem gerenciar servidores AWS Fargate O AWS Fargate elimina a necessidade de provisionar e gerenciar servidores, permite especificar e pagar pelos recursos por aplicação e melhora a segurança através do isolamento de aplicações.
Rodar contêineres com controle em nível do servidor Amazon EC2 As máquinas virtuais EC2 oferecem controle de seus clusters de servidores e fornecem uma ampla variedade de opções de personalização.

Reduza a capacidade ociosa com AWS Lambda

AWS Lambda é o serviço que permite a execução de código sem a utilização de servidores. Com ele você será cobrado somente quando as funções Lambda forem executadas. O custo é calculado pelo número de execuções, consumo de memória e duração das execuções das funções. Desta maneira, você não paga pela capacidade ociosa de sua infraestrutura de computação, mas paga somente pelo que você processa, sem desperdícios.

Você poderá substituir suas instâncias EC2 por funções Lambda e se beneficiar deste modelo de custo. Por exemplo, webservices tradicionais podem ser reconstruídos utilizando-se AWS API Gateway + AWS Lambda. Você pode utilizar o Lambda para consumir e processar eventos que ocorrem em seu ambiente da AWS, como por exemplo a gravação de objetos no Amazon S3 ou a chegada de mensagens no Amazon Kinesis, etc.

Saiba mais sobre o AWS Lambda em: https://aws.amazon.com/pt/lambda/

6 – Elasticidade e Escalabilidade

Escalabilidade e Elasticidade na nuvem

Por escalabilidade, entendemos como a habilidade de um sistema em se adaptar para atender a variações nos níveis de demanda conforme a necessidade. Ou seja, estar apto a operar normalmente quando há um aumento ou diminuição de carga. Isso pode ocorrer de duas formas: vertical ou horizontalmente.

Escalar verticalmente, ou scale-up, corresponde a acrescentar recursos a um mesmo nó, aumentando sua capacidade. Isto geralmente está relacionado a modificar recursos de uma instância, como o número de vCPUs, memória, capacidade de armazenamento e rede, etc.

Já escalar horizontalmente, ou scale-out, se refere a alteração do número de nós em um grupo de servidores. Neste sentido, ao invés de se aumentar os recursos alocados aos servidores, há um incremento no número de servidores dentro do conjunto visando se adaptar à nova demanda.

O conceito de elasticidade tira proveito da escalabilidade para aumentar os recursos quando necessário e diminuí-los quando não forem mais precisos, lembrando a habilidade de um elástico ao esticar e encolher. Isso ocorre muitas vezes de forma automática e para alinhar os recursos utilizados de acordo com a demanda para que não haja desperdício de recursos.

 

Escalando seus recursos e aproveitando a elasticidade

Tratando-se de otimização de custos, a estratégia de scale-up é usada para lidar com um pico de consumo e reduzi-los conforme a diminuição da demanda. Assim, evita-se o super provisionamento de um recurso pelo pior cenário, que estaria ocioso maior parte do tempo, e utiliza-se recursos menores, de menor custo, com capacidade bem justa, para atender o baseline da aplicação.

Tome como exemplo uma aplicação de recursos humanos que necessita calcular a folha de pagamento dos funcionários no final de cada mês. Usualmente um processo desses implica em um pico de processamento que pode durar algumas horas. Uma estratégia consistiria em aumentar o tamanho das instâncias de servidores de aplicação e banco de dados para lidar com cálculo e, após o término, voltar ao tamanho original.

Saiba alterar o tamanho de sua instância EC2 em https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-resize.html

Na prática de scale-out, aumentar a frota de servidores de maneira manual pode ser muito trabalhosa. Para isso, o Auto Scaling é o serviço da AWS que realiza essa tarefa de maneira automática, usufruindo da elasticidade.

Visão geral do AWS Auto Scaling

Assim, não há a necessidade de se provisionar a quantidade de instâncias baseadas no cenário de pico de acesso. Como boa prática, é mantido um número mínimo de instâncias para lidar com o baseline de acessos de sua aplicação. Conforme a quantidade de acessos aumenta, para lidar com a nova carga, novas instâncias são lançadas através do Auto Scaling. Conforme a carga diminui, o AWS Auto Scaling remove as instâncias ociosas, evitando o desperdício de infraestrutura.

O gráfico abaixo ilustra o potencial de desperdício em uma infraestrutura provisionada pelo pico. Como exemplo, a aplicação em questão tem 76% da capacidade computacional desperdiçada, enquanto somente 24% em media é realmente utilizado durante o mês.

Provisionamento pelo pico

Com o AWS Auto Scaling, o provisionamento de infraestrutura (em azul) é ajustado em função da demanda (em amarelo). Note que há pouco desperdício de infraestrutura, implicando em economia e diminuição de custos.

Com AWS Auto Scaling: ajuste entre provisionamento e demanda

Além das instâncias EC2, o AWS Auto Scaling permite criar planos de escalabilidade para outros recursos, como frotas spot do Amazon EC2, tarefas do Amazon ECS, tabelas e índices do Amazon DynamoDB e réplicas do Amazon Aurora.

Para saber mais sobre o AWS Auto Scaling, acesse https://aws.amazon.com/pt/autoscaling/

7 – Aproveite os tipos de precificação

On-demand

As instâncias on-demand são o tipo mais simples de precificação de instâncias EC2 e oferecem uma grande flexibilidade de uso de instâncias EC2. Com elas paga-se segundo o uso e sem compromisso de longo prazo. Você pode alterar as configurações das suas instâncias conforme sua necessidade e executá-las, interrompê-las, reiniciá-las, hiberná-las e encerrá-las a qualquer momento, tornando-as ótimas para cargas de trabalho de curto prazo ou irregulares.

Por ser o tipo mais caro de instância, não é recomendável utilizar esse tipo de precificação para todas as cargas de trabalho. Nos próximos tópicos dessa seção indicamos modelos de precificação recomendados para cargas de trabalhos mais previsíveis ou aplicações que sejam tolerantes a interrupções e que possuam flexibilidade em relação ao momento em que devem ser executadas.

Savings Plans

Uma alternativa às instâncias reservadas é o Savings Plans, que permite firmar um compromisso de uso de uma quantidade específica de poder computacional (medido em dólares/hora) com duração de um ou três anos. Dessa forma é possível obter uma economia em relação ao modelo de uso on-demand sem perder a flexibilidade de escolha de serviço ou configuração. Há dois tipos de Savings Plans:

 

Compute Savings Plans

Esse tipo de Savings Plans pode ser aplicado à instâncias EC2 independentemente da família a qual pertencem, seu tamanho, sistema operacional, tipo de locação ou região da AWS, além de poder ser aplicado ao uso do AWS Fargate e do AWS Lambda. Assim, você pode obter uma economia de até 66% e pode continuar se beneficiando dos preços do Savings Plans mesmo se precisar mudar a configuração da sua instância, se decidir passar a usar o Fargate ou o Lambda ou se precisar mudar de região.

EC2 Instance Savings Plans

Nesse tipo de Savings Plans você escolhe uma família e região específicas em que os descontos serão aplicados permitindo que você mantenha a flexibilidade de tamanho, sistema operacional, tipo de locação e AZ. Os descontos de até 72% serão aplicados a qualquer instância da família escolhida dentro da região especificada no momento da aquisição, por exemplo, se você adquirir um plano para a família de instâncias m4 você pode passar de uma instância m4.xlarge rodando Windows para uma instância m4.2xlarge rodando Linux e continuar com os preços do Savings Plans.

Você pode saber mais sobre o Savings Plans no link: https://aws.amazon.com/pt/savingsplans/

Reserva de Instâncias

Com o objetivo de diminuir os custos nos cenários onde há uma previsibilidade da utilização de instâncias, a AWS criou o modelo de instâncias reservadas. Nele é possível realizar a reserva de uma instância, com comprometimento de utilização de 1 ou 3 anos e receber descontos de até 75% se comparados aos custos do modelo on-demand.

Alguns clientes criaram regras de decisão de quanto se reservar uma instância. Por exemplo: “Se determinada instância ficou ligada 100% do tempo a mais de duas semanas e não pode ser desligada neste exato momento, então ela tem potencial para ser reservada”.

Ambientes podem ser compostos tanto por instâncias reservadas como por instâncias on-demand. Tome como exemplo um e-commerce tradicional, que possui picos de acesso durante o dia. O baseline de utilização poderia ser suportado por instâncias reservadas. Já os picos de utilização poderiam ser suportados por instâncias on-demand.

Saiba como as instâncias reservadas funcionam em:
https://aws.amazon.com/premiumsupport/knowledge-center/ec2-ri-basics/

Spot

Economize até 90% dos custos de EC2 utilizando instâncias Spot. Com o objetivo de aproveitar a capacidade ociosa de infraestrutura dos datacenters, a AWS criou um modelo de preço dinâmico, chamado instâncias Spot. O preço das instâncias spot é baseado na oferta e demanda desta infraestrutura e oscila analogamente a uma bolsa de valores.
Funciona da seguinte maneira: você define o preço máximo por hora que está disposto a pagar pela instância. Sua instância será inicializada caso seu preço escolhido seja maior que o preço de mercado das instâncias Spot. O preço do mercado é dinâmico e oscila conforme outros clientes solicitam instâncias Spot.

 

Instâncias Spot tradicional

Para o modelo de instâncias Spot tradicional, caso o preço de mercado suba e fique maior que o seu preço inicial, sua instância receberá uma notificação e será finalizada dentro de dois minutos. Como existem riscos associados ao desligamento das instâncias, é desejável que suas aplicações sejam planejadas a serem tolerantes a estes tipos de eventos.
Existem alguns tipos aplicações que se beneficiam mais facilmente de instâncias Spot. Por exemplo:

  • Aplicações stateless;
  • Aplicações com AutoScaling, com a criação de dois grupos: um com instâncias Spot e outro com instâncias on-demand;
  • Processamento Batch;
  • Processamento utilizando Amazon EMR;
  • Servidores de Integração contínua (CI);
  • High performance computing (HPC);
  • Renderização e transcoding de mídia.

Spot Blocks

Spot Blocks são instâncias spots que irão rodar continuamente por um período finito, que pode ser definido de 1 a 6 horas de duração. O preço é baseado no período solicitado e a capacidade disponível, e é geralmente 30% a 45% menor do que o modelo on-demand.

Você submete uma requisição e define a quantidade de horas que você quer que suas instâncias rodem, juntamente com o preço máximo que está disposto a pagar. Quando existe capacidade disponível para o período solicitado, suas instâncias serão iniciadas e rodarão de forma contínua a um preço fixo. Elas serão encerradas automaticamente no final do período.
Este modelo é indicado para situações onde você tem jobs que precisam rodar continuamente por até 6 horas.

Saiba mais em https://aws.amazon.com/pt/ec2/spot/

8 – Ferramentas e mecanismos para Gerenciamento de Custos

Coloque Tags em sua infraestrutura

Tags são campos chave-valor que podem ser adicionados a sua infraestrutura, com o objetivo de facilitar a organização dos seus recursos. Alguns exemplos comuns de tags: centro de custo, tipo de ambiente (desenvolvimento ou produção), projeto, área de negócio, etc.

Além de facilitar a busca, é possível criar relatórios de custos que são filtrados e consolidados por tags específicas. Os relatórios de custos por tags podem fornecedor respostas para perguntas como “Qual o custo de infraestrutura para determinado projeto X” ou “Quanto determinada área de minha empresa está gastando com servidores”.

Saiba mais em: http://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html

Acesse, Organize e entenda seus os custos e o uso de AWS – AWS Cost Explorer e Relatórios de custos e uso

O AWS Cost Explorer tem uma interface fácil de usar que permite ver, compreender e gerenciar os custos e o uso da AWS com o passar do tempo. Comece a usar rapidamente criando relatórios personalizados (como dados de tabela e gráficos) que analisam os dados de uso e custo. O AWS Cost Explorer permite uma análise detalhada dos dados de custos e uso para identificar tendências, indicar os fatores determinantes dos custos e detectar anomalias.

Também é possível que sejam customizados os relatórios para atender necessidades específicas ou fazer o download das informações do billing para utilização em suas próprias ferramentas.

AWS Cost Explorer

Saiba mais em https://aws.amazon.com/aws-cost-management/aws-cost-explorer/

Relatório de custos e uso da AWS

O relatório de custos e uso da AWS contém o conjunto mais abrangente de dados de utilização e custo da AWS disponíveis, incluindo meta-dados adicionais sobre serviços, definição de preço e reservas da AWS. Mais detalhes em https://aws.amazon.com/aws-cost-management/aws-cost-and-usage-reporting/

Controle os custos e o uso da AWS – Budgets

O AWS Budgets permite que você defina orçamentos personalizados que enviam alertas quando o uso ou os custos excedem (ou tendem a exceder) o valor orçado.

Você também pode usar a ferramenta para definir metas de utilização ou cobertura de reservas e receber alertas quando a utilização cair abaixo do limite definido. Os alertas de reservas são compatíveis com reservas dos serviços Amazon EC2, Amazon RDS, Amazon Redshift, Amazon ElastiCache e Amazon Elasticsearch.

AWS Budgets Dashboard

https://aws.amazon.com/aws-cost-management/aws-budgets/

Alerta de faturamento

O alerta de billing permite que você receba notificações para ajudá-lo a monitorar a evolução do custo de sua conta na AWS.

Por exemplo, é possível criar um alerta que envia automaticamente um e-mail quando seu custo previsto alcançar um limite ao qual você definiu, evitando surpresas em sua conta. Siga este passo-a-passo para habilitar o monitoramento dos seus custos e criar seu primeiro alerta.

Alarme de Billing

Well-architected – Pilar de Otimização de Custos

Usando o AWS Well-Architected Framework você aprenderá as práticas recomendadas de arquitetura para projetar e operar com confiabilidade, sistemas seguros, eficientes e econômicos na nuvem. Ele fornece uma forma consistente de avaliação de suas arquiteturas com base nas melhores práticas.

A Otimização de Custos é um processo contínuo de aprimoramento de um
sistema durante todo o seu ciclo de vida. Desde o design inicial da sua primeira prova de conceito até a operação contínua de cargas de trabalho de produção, você pode adotar as
práticas deste documento para construir e operar sistemas minimizando custos, permitindo que seus negócios maximizem seu retorno sobre o investimento.

Estimativa de custos – AWS Pricing Calculator

AWS Pricing Calculator permite que você veja serviços da AWS e crie uma estimativa para o custo de seus casos de uso da AWS. Você pode modelar suas soluções antes de criá-las, explorar os pontos de preço e cálculos por trás de sua estimativa e encontrar os tipos de instância disponíveis e os termos do contrato que atendem às suas necessidades. Isso permite que você tome decisões informadas sobre o uso da AWS. Você pode planejar seus custos de AWS e uso, preço ou configuração de um novo conjunto de instâncias e serviços.

AWS Pricing Calculator é útil tanto para as pessoas que nunca usaram AWS quanto para usuários que desejam reorganizar ou expandir seu uso da AWS. Você não precisa de qualquer experiência com a nuvem ou AWS para usar AWS Pricing Calculator.

Saiba mais em https://calculator.aws/

9 – Serviços Gerenciados

Visão geral dos serviços gerenciados

Ao se utilizar serviços gerenciados, a carga de gerenciamento tarefas operacionais é reduzida, fazendo com que se possa aumentar os esforços em atividades que geram maior valor ao negócio. Ainda, tais serviços tiram proveito da escalabilidade da nuvem AWS, oferecendo um menor custo por transação ou serviço. A seguir temos alguns exemplos de serviços gerenciados:

Amazon RDS

O Amazon RDS é o banco de dados relacional gerenciado da AWS. Nele é possível utilizar os recursos de escalabilidade e elasticidade da nuvem. Aqui, você pode ver como aumentar e/ou diminuir a capacidade de armazenamento de seus bancos. Já neste link, você verá como escalar automaticamente no RDS, se aproveitando da elasticidade.

Amazon DynamoDB

O DynamoDB é o banco de dados NoSQL da AWS, altamente escalável e com diversas opções que ajudam na redução de custos. Você pode, por exemplo, escalar automaticamente suas tabelas usando a funcionalidade de AutoScaling do serviço. Aqui você pode ter uma noção de como fazer isso com tabelas existentes. Além disso, é possível habilitar a opção on-demand para requisições de leitura e escrita. Assim, você paga apenas pelo uso de acordo com as requisições. Para fazer isso, basta habilitar a função assim como na imagem:

Capacidades de escrita e leitura on-demand do Amazon DynamoDB

Amazon EMR

O Amazon EMR é o serviço de Hadoop gerenciado da AWS e nele também é possível realizar automaticamente um processo de escalabilidade. Neste link você pode ver como é feita a utilização do Auto Scaling no EMR, com guias e exemplos.

 Outros serviços

Mais serviços gerenciados importantes são os listados a seguir, além de diversos outros no catálogo da AWS:

  • Outros serviços gerenciados de banco de dados são: Amazon Elasticache (cache em memória) e Amazon Redshift (data warehouse)
  • Para serviços a nível de aplicação: utilize Amazon SQS, Amazon SNS, e Amazon SES pagando apenas pelo uso;
  • Se necessita/utiliza ferramentas de busca: Amazon CloudSearch ou Amazon ElasticSearch;
  • Na linha de streaming/processamento de dados em tempo real: Amazon Kinesis;
  • Para transcoding de mídia: Amazon Elastic Transcoder;
  • No gerenciamento de bases de usuários e serviços de autenticação: Amazon Cognito.

 

Aproveite os diferentes tipos de storage

A AWS oferece serviços que cobrem 3 tipos de armazenamento: armazenamento em bloco, armazenamento de arquivos e armazenamento de objetos. Cada serviço possui uma única combinação de desempenho, durabilidade, custo e interface de acesso. Abaixo apresentamos uma breve explicação de cada um deles e uma tabela comparativa com detalhes de acesso, casos de uso e preço.

Amazon EBS – Armazenamento em Bloco

O Amazon Elastic Block Store (EBS) é a solução de armazenamento em bloco da AWS e é o serviço que permite a criação de volumes para serem anexados a instâncias do Amazon EC2. Ele funciona como um volume anexado ao seu servidor, o qual será gerenciado por um sistema operacional e pode ser formatado com o sistema de arquivos que melhor atenda suas necessidades. Por conta disso, seu uso é indicado para os casos em que você precise de armazenar arquivos que serão acessados diretamente da sua instância com taxas de transferências ou com consumo intenso de transações.

Há 4 tipos de volumes diferentes General Purpose SSD (gp2) e Provisioned IOPS SSD (io1) cujo desempenho é baseado principalmente em IOPS e Throughput Optimized HDD (st1) e Cold HDD (sc1) cujo desempenho é baseado principalmente na taxa de transferência,

Para saber mais sobre os tipos de volume do EBS acesse https://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/ebs-volume-types.html

Instance Store

O Instance Store também oferece uma solução de armazenamento em bloco para as instâncias EC2, porém, diferentemente dos volumes EBS que são anexados às instâncias via rede, ele se localiza em discos anexados fisicamente ao host da instância. O armazenamento do Instance Store é temporário e se perde caso a instância for parada, encerrada ou sofrer alguma falha, sendo ideal para o armazenamento temporário de informações que são alteradas frequentemente, como buffers, caches, dados de rascunho e outros conteúdos temporários.

Para mais detalhes sobre o Instance Store acesse https://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/InstanceStorage.html

Armazenamento de Arquivos

O Amazon Elastic File System (EFS) é o serviço de sistema de arquivos NFS totalmente gerenciado da AWS que foi projetado para escalar automaticamente até petabytes e diminuir sob demanda e permite acesso compartilhado paralelo para milhares de instâncias do Amazon EC2 e com servidores locais, aos quais pode ser facilmente montado.

Ele possui duas classes de armazenamento: a Standard, para arquivos que são acessados com frequência, e a Infrequent Access, que oferece um custo de armazenamento mais baixo e uma taxa de recuperação para arquivos com padrão de acesso com frequência mais baixa e é possível ter arquivos em ambas as classes em um mesmo namespace sendo servidos de maneira transparente.

Para saber mais sobre o EFS acesse https://aws.amazon.com/pt/efs/

O Amazon FSx for Windows File Server oferece um armazenamento de arquivos totalmente gerenciado, altamente confiável e que é acessível pelo protocolo Server Message Block (SMB) Standard do setor. Ele é baseado no Windows Server, oferecendo uma ampla gama de recursos administrativos, como cotas de usuários, restauração de arquivos de usuário final e integração com o Microsoft Active Directory (AD).

O Amazon FSx ajuda a diminuir o TCO por meio da deduplicação de dados, reduzindo os custos em 50-60% para compartilhamento de arquivos para fins gerais. É fácil de começar a usar e não há compromissos mínimos ou taxas antecipadas.

Para saber mais sobre o FSx for Windows acesse https://aws.amazon.com/pt/fsx/windows/

Amazon S3 – Armazenamento de Objetos

O Amazon Simple Storage Service (S3) é a solução de armazenamento de objetos totalmente gerenciada e altamente escalável da AWS. A ideia de um armazenamento de objetos é a de cada arquivo é tratado de forma independente, recebendo um ID próprio, recebendo configurações como segurança e controle de acesso próprios e podendo ser diretamente acessado pela API.

Há diversas classes de armazenamento projetadas para diferentes necessidades de armazenamento e padrões de acesso. O S3 Standard para objetos relacionados ao mais diversos tipos de aplicações, o S3 Standard Infrequent Access e o S3 One Zone Infrequent Access para objetos com padrão de acesso menos frequente mas que ainda precisem de acesso rápido quando necessários, o S3 Glacier e o S3 Glacier Deep Archive para arquivamento de objetos que não precisem de acesso imediato e por longos períodos e o S3 Intelligent Tiering, que monitora o padrão de uso dos objetos colocando-os automaticamente em uma de suas duas classes: Standard ou Infrequent Access.

Para saber mais sobre as classes de armazenamento e acesse https://aws.amazon.com/pt/s3/storage-classes

Lifecycle policies e Analytics

O S3 oferece recursos adicionais que podem ajudar com a otimização de custos, como as lifecycle policies, que faz a transferência dos objetos entre as classes de armazenamento ou exclui objetos após períodos de tempo especificados por você para que não seja necessário se preocupar em gerenciar essas tarefas para objetos com padrões de acesso diminuam com o tempo ou que deixem de ser úteis com o tempo.

Caso você não saiba exatamente como os padrões de acesso mudam para os seus objetos é possível usar o S3 Analytics, recurso que analisa o padrão de acessos de seus objetos e faz recomendações de como tirar o melhor proveito das classes de Infrequent Access.

Para saber mais sobre as lifecycle policies e o analytics acesse https://docs.aws.amazon.com/pt_br/AmazonS3/latest/dev/object-lifecycle-mgmt.html e https://docs.aws.amazon.com/pt_br/AmazonS3/latest/dev/analytics-storage-class.html

Utilize Serverless

Serverless é uma arquitetura nativa da nuvem que permite criar e executar aplicativos e serviços sem preocupações com servidores. Ela elimina as tarefas de gerenciamento de infraestrutura, como provisionamento de servidores ou de clusters, patches, manutenção do sistema operacional e provisionamento de capacidade.

Com serverless, você paga apenas pelo que usa de maneira bastante granular. Isso evita o desperdício de recursos e permite que você pague somente pelas funcionalidades que estão sendo executadas em sua aplicação. Sem servidores para gerenciar, você pode transferir suas responsabilidades operacionais para a AWS. Desta maneira, serverless permite que você crie aplicativos modernos com maior agilidade e menor custo total de propriedade (TCO).

Você pode criar funcionalidades serverless para praticamente qualquer tipo de aplicativo ou serviço de backend, e cuidaremos do que for necessário para executar e escalar aplicativos com alta disponibilidade.

Saiba mais sobre serverless na AWS em https://aws.amazon.com/serverless/

 

10 – Materiais para aprimoramento

Os canais da AWS possuem diversos materiais sobre otimização de custos. Seguem algumas sugestões para aprimoramento:

–       Página da AWS sobre otimização de custos (em português) – https://aws.amazon.com/pt/pricing/cost-optimization/

–       Página da AWS sobre gerenciamento de custos (em português) – https://aws.amazon.com/pt/aws-cost-management/

–       Blog post (em inglês): 10 things you can do today to reduce AWS costs – https://aws.amazon.com/pt/blogs/compute/10-things-you-can-do-today-to-reduce-aws-costs/

–       Apresentação feita no AWS re:Invent 2019 (em inglês): Managing your cloud financials as you scale on AWS (ENT204-R1) – https://www.youtube.com/watch?v=ChupgIbZr5Q

–       Webinar: Otimização de Custos – AWS Builders Talk – Assista à essa série de vídeos que mostra as melhores práticas para otimizar os custos de sua arquitetura na AWS.

–       Webinar (em inglês): Nine ways to reduce your AWS Bill – AWS Online Tech Talks

–       Blog post (em inglês): FinDev and Serverless Microeconomics


Autores

Criado pelo time de Arquitetura de Soluções da Amazon Web Services no Brasil.