Egress EC2→Internet a US$0,09/GB: por que o CloudFront flat-rate ganha do Cloudflare para origem na AWS
Publicado em 29 de junho de 2026

O problema: egress direto é o custo invisível da AWS
Servidores que entregam conteúdo (mídia, PDFs, assets pesados) direto para a internet pagam egress AWS a US$0,09/GB. Numa frota medindo ~12,5 TB/mês, isso é ~US$1.124/mês — uma linha que muitas vezes se esconde dentro de "EC2-Other" e ninguém atribui à causa.
O ponto-chave da arquitetura: tráfego de EC2 para o CloudFront na MESMA região é US$0. Você só paga a saída do CloudFront — e aí entra o modelo flat-rate.
A matemática do flat-rate vs por-GB
Os planos flat-rate do CloudFront cobram um valor fixo por uma franquia grande de transferência, em vez de centavos por GB:
Saída direta EC2→Internet: 12,5 TB × US$0,09/GB ≈ US$1.124/mês
CloudFront (origem EC2 intra-região): EC2→CF = US$0 + CF→Internet flat-rate
Planos flat-rate (ordem de grandeza):
Free ~US$0 (franquia pequena)
Pro ~US$15 (~50 TB)
Business ~US$200
Premium ~US$1000
Cloudflare p/ ~50 TB de origem AWS: ~US$25 (plano) + ~US$4.500 de egress AWS→CF
(o egress AWS para FORA continua a US$0,09/GB)A pegadinha do Cloudflare na frente de origem AWS: você troca o plano por barato, mas continua pagando o egress AWS→Cloudflare a US$0,09/GB. O CloudFront, sendo da própria AWS, zera esse trecho.
Medir o egress por instância (o Cost Explorer engana)
O Cost Explorer agrega egress de forma que dificulta atribuir por instância. A medição confiável é a métrica NetworkOut do CloudWatch, por instância. Um script boto3 resolve — e há 4 armadilhas reais que custam tempo:
import boto3
# Armadilha 1: a região do client tem que ser a da instância (métrica é regional)
cw = boto3.client("cloudwatch", region_name="sa-east-1")
# Armadilha 2: Period tem limite — 30 dias em 1 datapoint (2592000) pode vir VAZIO;
# use granularidade menor e some, ou Period=86400 (diário).
# Armadilha 3: paginação — sem paginator você perde instâncias além da 1a página.
ec2 = boto3.client("ec2", region_name="sa-east-1")
paginator = ec2.get_paginator("describe_instances")
for page in paginator.paginate():
for r in page["Reservations"]:
for i in r["Instances"]:
iid = i["InstanceId"]
m = cw.get_metric_statistics(
Namespace="AWS/EC2", MetricName="NetworkOut",
Dimensions=[{"Name": "InstanceId", "Value": iid}],
StartTime="2026-02-01T00:00:00Z", EndTime="2026-03-01T00:00:00Z",
Period=86400, Statistics=["Sum"])
total_gb = sum(d["Sum"] for d in m["Datapoints"]) / (1024**3)
print(iid, round(total_gb, 1), "GB")
# Armadilha 4: em ambientes PEP 668, instalar boto3 exige --break-system-packagesNetworkOut em bytes, somado no mês e convertido para GB, dá o egress real por instância — a base para decidir quem vai para trás do CloudFront primeiro.
Lições
1. EC2→CloudFront intra-região é US$0. Esse é o motivo de o flat-rate do CloudFront vencer para origem na AWS: você não paga o trecho origem→CDN.
2. Cloudflare barato não zera o egress AWS. Origem na AWS continua pagando US$0,09/GB até o Cloudflare. Faça a conta completa, não só o preço do plano.
3. Meça por NetworkOut, não por Cost Explorer. A métrica do CloudWatch atribui egress por instância; o Cost Explorer agrega e esconde a origem.
Conclusão
Egress é o custo que cresce sem você perceber porque se dilui em linhas agregadas. Medindo NetworkOut por instância e colocando os maiores emissores atrás de um CloudFront flat-rate, ~US$1.124/mês de saída variável viram um custo fixo previsível — sem trocar de provedor, usando a aritmética que a própria AWS favorece.