# CF: Comprimindo Distribuições CloudFront

> Esta regra identifica distribuições Amazon CloudFront que **não estão corretamente configuradas para compressão e cache eficiente**, incluindo:
>
> * Compressão desabilitada (`Compress = false`)
> * Cache Policy sem Gzip habilitado
> * Cache Policy sem Brotli habilitado
> * TTLs configurados como 0
> * Behaviors legados sem Cache Policy moderna
>
> O objetivo é garantir otimização de performance e eficiência de transferência de dados.

***

**Contexto da regra e impacto no negócio**

CloudFront mal configurado pode gerar:

* Maior consumo de largura de banda
* Aumento de custo de transferência de dados
* Performance inferior para usuários finais
* Experiência degradada

Compressão adequada (Gzip e Brotli) reduz:

* Tamanho das respostas HTTP
* Transferência de dados
* Latência percebida
* Custo de Data Transfer Out

Essa regra é classificada como **ECONOMIA + PERFORMANCE**.

***

**Detalhamento técnico da regra**

A regra analisa cada distribuição CloudFront globalmente e valida:

1. Configuração do `DefaultCacheBehavior`
2. Configuração de todos os `CacheBehaviors`
3. Configurações da `Cache Policy`
4. Configuração de compressão
5. Valores de TTL

***

**Como a regra é executada**

1. Autentica na conta AWS (CloudFront é global).
2. Executa:

   ```
   cloudfront:ListDistributions
   ```
3. Para cada distribuição:
   * Aplica filtros de tag.
   * Executa:

     ```
     cloudfront:GetDistributionConfig
     ```
4. Valida:

**Etapa 1 – Default Cache Behavior**

Verifica:

```
DefaultCacheBehavior.Compress = true
```

Se `false` → distribuição sinalizada.

***

**Etapa 2 – Cache Policies**

Para cada behavior:

Se houver `CachePolicyId`:

Executa:

```
cloudfront:GetCachePolicy
```

Valida:

```
EnableAcceptEncodingGzip = true
EnableAcceptEncodingBrotli = true
MinTTL > 0
DefaultTTL > 0
MaxTTL > 0
```

Se qualquer condição falhar → sinaliza.

***

**Etapa 3 – Behaviors Legados**

Se o behavior não utilizar `CachePolicyId`:

* Deve ter `Compress = true`
* Mesmo assim é considerado **não otimizado**

***

**Lógica aplicada**

Uma distribuição será sinalizada quando:

```
Qualquer behavior:
  - Compress = false
  OU
  - Gzip desabilitado
  OU
  - Brotli desabilitado
  OU
  - TTL = 0
  OU
  - Uso de configuração legada sem Cache Policy moderna
```

Somente distribuições totalmente aderentes passam na verificação.

***

**Campos analisados**

CloudFront Distribution:

* `Id`
* `ARN`
* `DomainName`
* `Status`
* `DefaultCacheBehavior`
* `CacheBehaviors`
* `Tags`

Cache Policy:

* `EnableAcceptEncodingGzip`
* `EnableAcceptEncodingBrotli`
* `MinTTL`
* `DefaultTTL`
* `MaxTTL`

***

**Parâmetros considerados na busca**

APIs utilizadas:

* `cloudfront:ListDistributions`
* `cloudfront:GetDistributionConfig`
* `cloudfront:GetCachePolicy`

Não há filtro temporal.

***

**Período Avaliado (Filtro Temporal)**

Período Avaliado: 15 dias.

Configuração padrão é de identificar distribuições do CloudFront sem compressão ativada dentro do periodo de 15 dias.&#x20;

> Esse parâmetro de avaliação pode ser ajustado nas configurações das regras.

***

**Intervalo de Análise**

Execução padrão: a cada 8 horas.

***

**Cálculo de Savings (Conceitual)**

A economia ocorre pela redução de transferência de dados devido à compressão eficiente.

Modelo simplificado:

```
Savings = Redução de DataTransferOut × preço por GB
```

Em abordagem agregada no Billing:

```
Savings = sum("lineitem/unblendedcost") * percentual_estimado_de_redução
```

O percentual depende do tipo de conteúdo e padrão de tráfego.

***

**Campo de custo utilizado**

No Billing AWS:

* Service: AmazonCloudFront
* Usage Types:
  * DataTransfer-Out-Bytes
  * Requests-HTTP/HTTPS
* Line Item Type: Usage
* Campo financeiro considerado:
  * `lineitem/unblendedcost`

***

**Exemplo aplicado ao Billing**

Cenário:

* 20 TB/mês transferidos
* Compressão ineficiente
* Redução estimada com Brotli: 25%

Se custo mensal atual for:

```
$40.000
```

Estimativa:

```
Savings ≈ 40.000 × 0.25
Savings ≈ $10.000/mês
```

Savings anual:

```
10.000 × 12 = $120.000
```

***

**Dicas de uso e boas práticas para o usuário**

* Sempre utilizar Cache Policies modernas.
* Habilitar Gzip e Brotli.
* Definir TTLs maiores que zero.
* Evitar configurações legadas.
* Validar compressão via ferramentas de teste HTTP.

Possíveis exceções:

* Conteúdo já comprimido (ex: imagens otimizadas).
* APIs com respostas dinâmicas específicas.
* Requisitos técnicos específicos de cliente.

Recomenda-se adoção de política padrão corporativa para CloudFront.
