Cloud & Infraestrutura

Dominando FinOps Avançado na AWS: Reserved Instances, Savings Plans e Spot em Projetos Reais

8 min de leitura

Dominando FinOps Avançado na AWS: Reserved Instances, Savings Plans e Spot em Projetos Reais

Entendendo os Modelos de Preços na AWS A otimização de custos na AWS vai muito além de simplesmente desligar recursos ociosos. Reserved Instances (RIs), Savings Plans e Spot Instances são três pilares fundamentais que, quando combinados estrategicamente, podem reduzir sua conta em até 70%. O segredo está em entender que cada modelo atende a padrões de consumo diferentes e que a melhor economia vem de uma estratégia híbrida bem pensada. Reserved Instances oferecem descontos de 30-50% com compromisso de 1 ou 3 anos. Savings Plans, lançados mais recentemente, fornecem 20-30% de desconto com maior flexibilidade entre tipos de instâncias. Spot Instances chegam a 90% de desconto, mas podem ser encerradas a qualquer momento. A chave é identificar qual aplicação se beneficia de qual modelo. Quando Usar Cada Modelo Para cargas de trabalho previsíveis e constantes (bancos de dados, servidores web sempre ativos), Reserved Instances de 3 anos são ideais. Para ambientes dinâmicos onde há mudança frequente entre tipos de máquinas,

<h2>Entendendo os Modelos de Preços na AWS</h2>

<p>A otimização de custos na AWS vai muito além de simplesmente desligar recursos ociosos. Reserved Instances (RIs), Savings Plans e Spot Instances são três pilares fundamentais que, quando combinados estrategicamente, podem reduzir sua conta em até 70%. O segredo está em entender que cada modelo atende a padrões de consumo diferentes e que a melhor economia vem de uma estratégia híbrida bem pensada.</p>

<p>Reserved Instances oferecem descontos de 30-50% com compromisso de 1 ou 3 anos. Savings Plans, lançados mais recentemente, fornecem 20-30% de desconto com maior flexibilidade entre tipos de instâncias. Spot Instances chegam a 90% de desconto, mas podem ser encerradas a qualquer momento. A chave é identificar qual aplicação se beneficia de qual modelo.</p>

<h3>Quando Usar Cada Modelo</h3>

<p>Para cargas de trabalho previsíveis e constantes (bancos de dados, servidores web sempre ativos), Reserved Instances de 3 anos são ideais. Para ambientes dinâmicos onde há mudança frequente entre tipos de máquinas, Savings Plans EC2 são superiores. Spot Instances são perfeitas para processamento em batch, treinamento de modelos ML e workloads tolerantes a falhas—nunca para aplicações que exigem continuidade.</p>

<h2>Implementando uma Estratégia Prática</h2>

<p>Comecemos com análise real de custos usando AWS Cost Explorer e tags bem estruturadas. Toda instância deve ter tags como <code>ambiente</code>, <code>projeto</code>, <code>criticidade</code> e <code>tipo-workload</code>. Isso permite filtrar gastos com precisão.</p>

<pre><code class="language-python">import boto3

from datetime import datetime, timedelta

def analisar_custos_por_tag(tag_key, tag_value, dias=30):

client = boto3.client(&#039;ce&#039;)

end_date = datetime.now().date()

start_date = end_date - timedelta(days=dias)

response = client.get_cost_and_usage(

TimePeriod={

&#039;Start&#039;: start_date.strftime(&#039;%Y-%m-%d&#039;),

&#039;End&#039;: end_date.strftime(&#039;%Y-%m-%d&#039;)

},

Granularity=&#039;MONTHLY&#039;,

Metrics=[&#039;UnblendedCost&#039;],

Filter={

&#039;Tags&#039;: {

&#039;Key&#039;: tag_key,

&#039;Values&#039;: [tag_value]

}

}

)

total_cost = 0

for result in response[&#039;ResultsByTime&#039;]:

cost = float(result[&#039;Total&#039;][&#039;UnblendedCost&#039;][&#039;Amount&#039;])

total_cost += cost

print(f&quot;Período: {result[&#039;TimePeriod&#039;][&#039;Start&#039;]} - Custo: ${cost:.2f}&quot;)

return total_cost

Uso

custo_producao = analisar_custos_por_tag(&#039;ambiente&#039;, &#039;producao&#039;)

print(f&quot;Custo total: ${custo_producao:.2f}&quot;)</code></pre>

<p>Após identificar padrões de consumo, crie uma matriz de decisão: instâncias com &gt;80% de utilização 24/7 → RI 3 anos; instâncias com padrão estável mas com variações → Savings Plans; workloads esporádicos → Spot. Para implementação, use o Compute Optimizer da AWS que fornece recomendações automáticas baseadas em histórico de 30 dias.</p>

<h3>Automação com Terraform</h3>

<p>Infrastructure as Code permite replicar modelos de compra consistentemente:</p>

<pre><code class="language-hcl"># main.tf

terraform {

required_providers {

aws = {

source = &quot;hashicorp/aws&quot;

version = &quot;~&gt; 5.0&quot;

}

}

}

provider &quot;aws&quot; {

region = &quot;us-east-1&quot;

}

variable &quot;instancia_tipo&quot; {

default = &quot;t3.large&quot;

}

variable &quot;usar_spot&quot; {

type = bool

default = false

}

resource &quot;aws_instance&quot; &quot;app_server&quot; {

ami = &quot;ami-0c55b159cbfafe1f0&quot;

instance_type = var.instancia_tipo

Spot Instance

spot_price = var.usar_spot ? &quot;0.030&quot; : null

tags = {

Name = &quot;app-otimizado&quot;

ambiente = &quot;producao&quot;

criticidade = &quot;media&quot;

}

}

resource &quot;aws_ec2_instance_purchase_option&quot; &quot;ri_compra&quot; {

count = var.usar_spot ? 0 : 1

instance_type = var.instancia_tipo

availability_zone = &quot;us-east-1a&quot;

term = &quot;THREE_YEARS&quot;

payment_option = &quot;ALL_UPFRONT&quot;

}</code></pre>

<h2>Otimizando Spot Instances com Interrupção Resiliente</h2>

<p>Spot Instances são a fronteira de economia, mas exigem arquitetura resiliente. A melhor prática é usar grupos de instâncias com múltiplas zonas e tipos.</p>

<pre><code class="language-python">import boto3

def criar_fleet_spot_resiliente():

ec2 = boto3.client(&#039;ec2&#039;)

response = ec2.request_spot_instances(

SpotPrice=&#039;0.025&#039;,

InstanceCount=2,

Type=&#039;persistent&#039;,

LaunchSpecification={

&#039;ImageId&#039;: &#039;ami-0c55b159cbfafe1f0&#039;,

&#039;InstanceType&#039;: &#039;t3.large&#039;,

&#039;KeyName&#039;: &#039;minha-chave&#039;,

&#039;SecurityGroups&#039;: [&#039;default&#039;],

&#039;BlockDeviceMappings&#039;: [

{

&#039;DeviceName&#039;: &#039;/dev/xvda&#039;,

&#039;Ebs&#039;: {

&#039;VolumeSize&#039;: 20,

&#039;VolumeType&#039;: &#039;gp3&#039;,

&#039;DeleteOnTermination&#039;: True

}

}

]

},

AvailabilityZoneGroup=&#039;us-east-1&#039;

)

request_ids = [r[&#039;SpotInstanceRequestId&#039;] for r in response[&#039;SpotInstanceRequests&#039;]]

print(f&quot;Fleet criada com {len(request_ids)} instâncias solicitadas&quot;)

return request_ids

def monitorar_interrupcoes():

ec2 = boto3.client(&#039;ec2&#039;)

response = ec2.describe_spot_instance_requests(

Filters=[

{&#039;Name&#039;: &#039;status-code&#039;, &#039;Values&#039;: [&#039;capacity-not-available&#039;]}

]

)

for request in response[&#039;SpotInstanceRequests&#039;]:

print(f&quot;Aviso: {request[&#039;SpotInstanceRequestId&#039;]} - Capacidade indisponível&quot;)

criar_fleet_spot_resiliente()

monitorar_interrupcoes()</code></pre>

<p>Combine isso com Auto Scaling Groups que misturam on-demand (40%) com Spot (60%) para garantir disponibilidade enquanto economiza dramaticamente. Implemente handlers de interrupção de 2 minutos usando o EC2 Instance Metadata Service v2 para notificações de término.</p>

<h2>Medição e Ajuste Contínuo</h2>

<p>FinOps não é set-and-forget. Estabeleça métricas mensais: taxa de utilização por modelo, economia alcanzada versus orçamento, e custo por unidade de negócio. Use AWS Budgets com alertas em 50%, 80% e 100% de limite. Crie dashboards no CloudWatch ou QuickSight mostrando economia acumulada vs. baseline on-demand.</p>

<pre><code class="language-python">def calcular_roi_finops():

Preços mensais aproximados para t3.large em us-east-1

on_demand_mensal = 61.00

ri_3anos_mensal = 32.00 # amortizado

spot_mensal = 18.30

economia_ri_vs_od = ((on_demand_mensal - ri_3anos_mensal) / on_demand_mensal) * 100

economia_spot_vs_od = ((on_demand_mensal - spot_mensal) / on_demand_mensal) * 100

print(f&quot;RI 3 anos economiza: {economia_ri_vs_od:.1f}% vs On-Demand&quot;)

print(f&quot;Spot economiza: {economia_spot_vs_od:.1f}% vs On-Demand&quot;)

print(f&quot;Economia híbrida (40% RI + 60% Spot): {(0.4economia_ri_vs_od + 0.6economia_spot_vs_od):.1f}%&quot;)

calcular_roi_finops()</code></pre>

<h2>Conclusão</h2>

<p>Três aprendizados principais consolidam sua masterização em FinOps avançado: <strong>primeiro</strong>, reconhecer que não existe solução única—a combinação estratégica de RIs, Savings Plans e Spot, calibrada para cada workload, é o diferencial. <strong>Segundo</strong>, automatização via Infrastructure as Code e monitoramento contínuo não são luxo, mas essencial para manter ganhos consistentes. <strong>Terceiro</strong>, FinOps é um ciclo permanente de análise-otimização-medição onde pequenos ajustes geram economia exponencial em ambientes de escala produtiva.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://aws.amazon.com/architecture/cost-optimization-pillar/" target="_blank" rel="noopener noreferrer">AWS Cost Optimization Best Practices</a></li>

<li><a href="https://aws.amazon.com/ec2/pricing/" target="_blank" rel="noopener noreferrer">EC2 Pricing Models Detailed Comparison</a></li>

<li><a href="https://docs.aws.amazon.com/compute-optimizer/latest/ug/what-is-compute-optimizer.html" target="_blank" rel="noopener noreferrer">AWS Compute Optimizer Documentation</a></li>

<li><a href="https://www.finops.org/framework/introduction/" target="_blank" rel="noopener noreferrer">FinOps Foundation - Getting Started Guide</a></li>

<li><a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance" target="_blank" rel="noopener noreferrer">Terraform AWS EC2 Complete Reference</a></li>

</ul>

Comentários

Mais em Cloud & Infraestrutura

Dominando Secrets Manager e KMS: Gerenciamento de Segredos e Criptografia em Projetos Reais
Dominando Secrets Manager e KMS: Gerenciamento de Segredos e Criptografia em Projetos Reais

Introdução ao Secrets Manager e KMS na AWS Gerenciar segredos em aplicações m...

Amazon Inspector e Trusted Advisor: Vulnerabilidades e Boas Práticas na Prática
Amazon Inspector e Trusted Advisor: Vulnerabilidades e Boas Práticas na Prática

Amazon Inspector: Análise Automatizada de Vulnerabilidades Amazon Inspector é...

Dominando AWS Lambda: Fundamentos, Triggers e Execution Model em Projetos Reais
Dominando AWS Lambda: Fundamentos, Triggers e Execution Model em Projetos Reais

Fundamentos do AWS Lambda AWS Lambda é um serviço de computação sem servidor...