# EKS: Versões de EKS

> Esta regra realiza o inventário e identificação de todos os **Clusters Amazon EKS (Elastic Kubernetes Service)** ativos na conta AWS. Ela lista os clusters provisionados, independentemente do status dos *Worker Nodes* ou da carga de trabalho, permitindo visibilidade sobre os custos fixos do Control Plane (Plano de Controle) do Kubernetes gerenciado.

***

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

O Amazon EKS cobra uma taxa fixa por hora para cada cluster criado (referente ao gerenciamento do Control Plane), além dos custos dos recursos de computação (EC2 ou Fargate) utilizados pelos nós.

**Riscos e Impactos:**

* **Custo Fixo ("Taxa de Cluster"):** Cada cluster EKS gera um custo aproximado de **$73,00 USD por mês** (cerca de $0.10/hora), mesmo que não tenha nenhum *Worker Node* rodando ou que esteja ocioso.
* **Shadow IT:** É comum que desenvolvedores criem clusters para testes e esqueçam de deletá-los. Um cluster esquecido continua gerando cobrança do Control Plane indefinidamente.
* **Governança de Versão:** Manter visibilidade de todos os clusters ajuda a identificar versões do Kubernetes (`version`) que estão próximas do fim do suporte (EOL), mitigando riscos de segurança e compatibilidade.

O objetivo desta regra é garantir que a organização pague apenas pelos Control Planes que são efetivamente necessários e produtivos.

***

**Detalhamento técnico da regra**

A regra executa uma varredura regional utilizando as APIs do serviço EKS para catalogar a infraestrutura de orquestração de containers.

**Como a regra é executada:**

1. O CCA autentica na conta AWS e itera sobre todas as regiões ativas.
2. Utiliza a API `eks:ListClusters` para obter os nomes de todos os clusters na região.
3. Para cada cluster encontrado, executa `eks:DescribeCluster` para obter metadados detalhados (ARN, versão, status, endpoint, data de criação).
4. Executa `eks:ListTagsForResource` para capturar as tags de cada cluster.
5. Aplica os filtros de tags (inclusão/exclusão) configurados na regra.
6. Retorna todos os clusters que passaram pelos filtros de tags.

**Parâmetros considerados na busca:**

* **APIs:** `eks:ListClusters`, `eks:DescribeCluster`, `eks:ListTagsForResource`.
* **Campos Analisados:** `cluster.name`, `cluster.status`, `cluster.version`, `cluster.createdAt`, `cluster.tags`.
* **Escopo:** Regional.

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

A regra avalia o estado atual do recurso (Snapshot). O intervalo de análise corresponde ao operador do período do filtro (ex: "maior que") combinado com os dias do período do filtro definidos na configuração da regra. *Nota Técnica:* Embora o CCA suporte filtros temporais, esta regra específica, em sua lógica padrão, lista **todos** os clusters ativos para inventário e visibilidade de custo fixo, a menos que customizações de código sejam aplicadas para filtrar por data de criação (`createdAt`).

**Intervalo de Análise:**

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

***

**Cálculo de Savings**

O savings é projetado com base na eliminação do custo fixo do Control Plane de clusters que forem identificados como desnecessários (ociosos, testes finalizados, duplicados).

**Fórmula Conceitual:**

```
Savings Mensal = (Custo Hora do EKS Control Plane × 730 horas)
```

**Campo de custo utilizado:**

* **Service:** `AmazonEKS`
* **Usage Type:** Geralmente `AmazonEKS-Hours:Headless` ou similar (varia por região).
* **Campo Financeiro:** `Unblended Cost` (ou `Amortized Cost` conforme visão financeira).

**Premissas:**

* Considera-se o preço público médio de **$0.10 USD por hora** por cluster (pode variar ligeiramente dependendo da região, mas é o padrão na maioria).
* Não inclui no cálculo o custo dos *Worker Nodes* (EC2), pois estes variam dinamicamente. O savings real ao desligar um cluster completo seria: *Custo do Control Plane + Custo dos Nodes*. O cálculo aqui é conservador, focando apenas no custo fixo do EKS.

**Exemplo aplicado ao Billing:**

Cenário: Identificado 1 cluster de teste chamado `eks-poc-analytics` criado há 45 dias e sem uso atual.

1. **Valor Atual (Custo Fixo):**
   * $0.10/hora × 730 horas/mês = **$73.00 USD/mês**.
2. **Valor Otimizado:**
   * Exclusão do Cluster: **$0.00 USD**.
3. **Resultado Final de Savings:**
   * **$73.00 USD** mensais recorrentes apenas pelo Control Plane.
   * Se houver 2 instâncias `m5.large` associadas (workers), o savings total seria ainda maior (aprox. +$140.00), totalizando \~$213.00.

***

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

* **Validação de Ociosidade:** Antes de deletar, verifique se há *Node Groups* ou *Fargate Profiles* associados e se há *Pods* rodando (conecte-se via `kubectl`).
* **Ambientes de Desenvolvimento:** Para ambientes não produtivos, avalie desligar o cluster fora do horário de uso. Como o EKS não possui "Stop/Start" nativo para o Control Plane (apenas deleção), considere automações que destroem e recriam o cluster via IaC (Terraform/CDK) ou consolide múltiplos ambientes (Namespaces) em um único cluster de desenvolvimento para pagar apenas uma taxa de Control Plane.
* **Tags Obrigatórias:** Utilize tags como `Environment`, `Owner` e `CostCenter` para facilitar a identificação de quem é o dono do cluster e se ele ainda é necessário.
* **Versões Depreciadas:** Utilize esta listagem para identificar clusters com versões antigas do Kubernetes que precisam de upgrade urgente.
