# ELB: ELB sem utilização

> Esta regra identifica Load Balancers (Classic ELB e ELBv2 – Application ou Network) que **não possuem uso ativo**, ou seja:
>
> * Classic ELB sem instâncias associadas
> * ELBv2 sem target groups e sem listeners
>
> O objetivo é detectar balanceadores ociosos que continuam gerando custo.

***

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

Load Balancers geram custo contínuo mesmo quando:

* Não possuem tráfego
* Não possuem instâncias registradas
* Foram criados para testes e abandonados
* Aplicações foram desativadas

Impactos:

* Custo fixo recorrente
* Crescimento desnecessário de infraestrutura
* Falta de governança de recursos de rede

Essa regra é uma otimização direta de infraestrutura ociosa.

***

**Detalhamento técnico da regra**

A regra realiza varredura regional para:

* Classic Load Balancers (ELB v1)
* Application e Network Load Balancers (ELB v2)

Aplica validação de uso e filtro temporal de criação.

***

**Como a regra é executada**

1. Autentica na conta AWS por região.
2. Executa:

   ```
   elb:DescribeLoadBalancers
   elbv2:DescribeLoadBalancers
   ```
3. Coleta tags via:

   ```
   elb:DescribeTags
   elbv2:DescribeTags
   ```
4. Aplica filtros de tag (inclusão/exclusão).
5. Para cada Load Balancer:
   * Aplica filtro temporal (`CreatedTime`).
   * Verifica uso:

**Para Classic ELB (v1)**

```
Se Instances estiver vazio → considerado não utilizado
```

**Para ELBv2 (Application/Network)**

Executa:

```
describe_target_groups
describe_listeners
```

Se:

```
TargetGroups vazio
E
Listeners vazio
```

→ considerado não utilizado

6. Recursos que atendem os critérios são sinalizados.

***

**Lógica aplicada**

Um Load Balancer será sinalizado quando:

```
Atende filtro temporal
E
(
    (v1 AND sem instâncias)
    OR
    (v2 AND sem target groups AND sem listeners)
)
```

***

**Campos analisados**

Load Balancer:

* `LoadBalancerName`
* `LoadBalancerArn`
* `CreatedTime`
* `DNSName`
* `VPCId`
* `Type`
* `Tags`
* Região

Campos críticos:

* `Instances` (v1)
* Target Groups (v2)
* Listeners (v2)

***

**Parâmetros considerados na busca**

APIs utilizadas:

* `elb:DescribeLoadBalancers`
* `elbv2:DescribeLoadBalancers`
* `elb:DescribeTags`
* `elbv2:DescribeTags`
* `elbv2:DescribeTargetGroups`
* `elbv2:DescribeListeners`

Configuração adicional:

* Filtro temporal baseado em `CreatedTime`
* Operador configurável (`greater_than` ou `less_than`)
* Dias definidos em `checker.period.days`

***

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

Período Avaliado: 15 dias

A regra considera:

```
CreatedTime
```

Configuração padrão é para `greater_than 15 dias`, apenas Load Balancers criados há mais de 15 dias serão avaliados.

> 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**

A economia potencial corresponde à remoção completa do Load Balancer ocioso.

***

**Fórmula Oficial de Savings**

```
Savings = sum("lineitem/unblendedcost")
```

O recurso não possui valor operacional quando não está em uso.

***

**Campo de custo utilizado**

No Billing AWS:

* Service: AmazonEC2 ou ElasticLoadBalancing
* Line Item Type: Usage
* Usage Types:
  * LoadBalancerUsage
  * LCUUsage (para ALB/NLB)
* Campo financeiro considerado:
  * `lineitem/unblendedcost`

***

**Exemplo aplicado ao Billing**

Cenário:

* 4 Application Load Balancers não utilizados
* Custo médio por ALB: $25/mês
* Custo total: $100/mês

Cálculo:

```
Savings = $100/mês
```

Savings anual:

```
100 × 12 = $1.200
```

***

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

* Validar se o LB não está aguardando deploy.
* Confirmar se não é ambiente de contingência.
* Revisar ambientes de teste antigos.
* Automatizar limpeza via pipeline.
* Monitorar criação manual fora de IaC.

Possíveis exceções:

* Load Balancers reservados para failover.
* Ambientes de staging aguardando uso.
* Projetos em implantação.

Recomenda-se validação rápida antes da exclusão definitiva.
