# EC2: Instâncias EC2 com baixa utilização

> Esta regra identifica instâncias Amazon EC2 em estado `running` que apresentam:
>
> * Baixa utilização máxima de CPU (< 10%)
> * Baixo volume total de tráfego de saída de rede (< 5 MB)
> * Tempo mínimo desde a criação conforme período configurado
>
> O objetivo é detectar instâncias subutilizadas que representam oportunidade de rightsizing ou desligamento.

***

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

Instâncias EC2 frequentemente permanecem em execução mesmo quando:

* A aplicação foi descontinuada
* A carga reduziu significativamente
* O ambiente é utilizado apenas esporadicamente
* Foram superdimensionadas inicialmente

Manter instâncias com baixa utilização gera:

* Custo recorrente desnecessário
* Consumo ineficiente de orçamento
* Distorção da análise de capacidade

Essa regra atua como mecanismo de otimização contínua de infraestrutura.

***

**Detalhamento técnico da regra**

A regra executa análise regional das instâncias EC2 em execução.

***

**Como a regra é executada**

1. Autentica na conta AWS por região.
2. Lista instâncias com filtro:

   ```
   instance-state-name = running
   ```
3. Aplica filtros de tag (inclusão/exclusão).
4. Para cada instância:
   * Valida se atende ao critério de tempo mínimo desde criação.
   * Consulta métricas no CloudWatch para o período configurado:
     * `CPUUtilization` (Statistic: Maximum)
     * `NetworkOut` (Statistic: Sum)
   * Calcula:
     * CPU máxima registrada no período
     * Total de bytes de saída de rede
5. A instância é sinalizada se atender simultaneamente:
   * CPU máxima < 10%
   * NetworkOut total < 5 MB

***

**Lógica aplicada**

Uma instância será sinalizada quando:

```
Estado = running
E
(Idade da instância atende filtro temporal)
E
Max CPUUtilization < 10%
E
NetworkOut total < 5 MB no período analisado
```

***

**Campos analisados**

Instância EC2:

* `InstanceId`
* `InstanceType`
* `LaunchTime`
* `Architecture`
* `Tags`
* Região

CloudWatch:

* `CPUUtilization` (Maximum)
* `NetworkOut` (Sum)

***

**Parâmetros considerados na busca**

APIs utilizadas:

* `ec2:DescribeInstances`
* `cloudwatch:GetMetricStatistics`

Configuração técnica:

* Período analisado: `self.checker.period.days`
* Agregação diária (86400 segundos)
* Thresholds fixos:
  * CPU < 10%
  * NetworkOut < 5 MB

***

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

Período Avaliado (Filtro Temporal): A regra avalia:

* A data de criação da instância (`LaunchTime`)
* As métricas de CPU e NetworkOut dentro do intervalo correspondente aos dias definidos na configuração da regra.

Padrão é configurado para 15 dias, a regra analisará a utilização dos últimos 15 dias e considerará apenas instâncias criadas há pelo menos esse período.

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

O savings é baseado na possibilidade de:

* Rightsizing (redução de tamanho da instância) ou
* Desligamento da instância

***

**Fórmula Conceitual**

Para desligamento completo:

```
Savings Mensal = Custo mensal da instância
```

Para rightsizing:

```
Savings Mensal = (Custo instância atual – Custo instância recomendada)
```

***

**Campo de custo utilizado**

No Billing AWS:

* Service: AmazonEC2
* Usage Type:
  * BoxUsage
* Line Item Type: Usage
* Campo financeiro considerado:
  * `lineitem/unblendedcost`

***

**Elementos considerados**

* Tipo da instância
* Região
* Horas em execução
* Não considera Savings Plans ou RIs aplicadas (análise bruta de uso)

***

**Exemplo aplicado ao Billing**

Cenário:

* Instância m5.xlarge
* Custo mensal aproximado: $150
* CPU máxima registrada: 6%
* NetworkOut: 2 MB no período

Possível ação:

* Rightsize para t3.medium ($35/mês)

Cálculo:

```
Savings = 150 – 35
Savings = $115/mês
```

Savings anual:

```
115 × 12 = $1.380
```

***

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

* Validar padrão de uso sazonal antes de desligar.
* Verificar picos fora do período analisado.
* Avaliar recomendação de rightsizing em vez de exclusão.
* Revisar dependências (Load Balancer, Auto Scaling).
* Considerar uso de Instâncias Spot para cargas não críticas.
* Cruzar análise com cobertura de RI/Savings Plan.

Possíveis exceções:

* Instâncias de standby.
* Servidores de contingência (DR).
* Ambientes com uso extremamente esporádico.

Recomenda-se validação técnica antes da ação definitiva.
