{"id":15686474,"url":"https://github.com/thenets/workshop-eks","last_synced_at":"2026-03-19T05:57:05.336Z","repository":{"id":87614501,"uuid":"288844474","full_name":"thenets/workshop-eks","owner":"thenets","description":"Workshop EKS + Terraform","archived":false,"fork":false,"pushed_at":"2020-08-20T02:29:34.000Z","size":187,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-08T23:35:16.328Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thenets.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-19T21:47:52.000Z","updated_at":"2023-05-27T00:49:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"ef5396d2-5236-4603-9552-357bb89ca084","html_url":"https://github.com/thenets/workshop-eks","commit_stats":{"total_commits":3,"total_committers":1,"mean_commits":3.0,"dds":0.0,"last_synced_commit":"78006f2c71a59be77d20af6a180acc8731dbc069"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thenets/workshop-eks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenets%2Fworkshop-eks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenets%2Fworkshop-eks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenets%2Fworkshop-eks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenets%2Fworkshop-eks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thenets","download_url":"https://codeload.github.com/thenets/workshop-eks/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenets%2Fworkshop-eks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28766886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T03:54:34.369Z","status":"ssl_error","status_checked_at":"2026-01-26T03:54:33.031Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T17:40:23.297Z","updated_at":"2026-01-26T04:32:47.095Z","avatar_url":"https://github.com/thenets.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Workshop - EKS\n\nEstes são os arquivos da Terraform para trabalhar com a AWS.\nOs dois projetos possuem diferentes focos, um é de apenas apresentar a rede no ambiente AWS e o outro de apresentar o `EKS`.\n\n## Conceitos básicos\n\nAntes de falarmos do Terraform e dos recursos da AWS, é importante que alguns conceitos estejam claros:\n\n- **AWS CLI**: Utilizado para autenticar no ambiente AWS. É possível realizar a maior parte das ações disponíveis no Console AWS também pelo CLI.\n- **Hashicorp Terraform**: Ferramenta que será utilizada para provisionar os recursos na nuvem AWS com Infraestrutura como Código.\n\n## Observações\n\nO workshop foi construído utilizando as seguintes versões:\n\n- AWS CLI: 1.18.114\n- Hashicorp Terraform: 0.12.29\n- EKS: 1.17\n___\n\n## Generic Network\n\nO objetivo deste módulo Terraform é apresentar os recursos de rede da AWS e como trabalhar com um ambiente otimizado para receber o `EKS` no futuro.\n\nO código-fonte está localizado em: [./env/lab/generic-network](./env/lab/generic-network)\n\n![Generic Network](./docs/eks-diagram-Network.png)\n\nO Terraform criará os recursos apresentados acima. As principais observações são:\n\n- **Multi-AZ**: A `VPC` possui pelo menos 2 `AZ` para garantir alta disponibilidade.\n- **Private Subnet**: As subnets privadas são dedicadas para subir os workloads, sejam `EC2`, `Lambda`, `Fargate`, etc. Além disso, a rota padrão do `Route Table` redirecionará o tráfego para o `NAT Gateway` .\n- **Public Subnet**: As subnets públicas serão utilizadas para colocar os `NAT Gateway` e os `Application Load Balancer (ALB)`.\n- **NAT Gateway**: Recebe um IP público e cria uma saída NAT. Na prática, todo o workload colocado numa subnet privada possuirá apenas um IP público por AZ e provê melhor isolamento de rede.\n___\n\n## EKS\n\nCom a rede criada, agora é possível criar o cluster `EKS`.\n\nO objetivo deste módulo Terraform é criar os recursos de rede da AWS e apresentar os principais componentes do `EKS` e como eles se relacionam.\n\nO código-fonte que inclui tanto o `EKS`, quanto a rede, está localizado em: [./env/lab/generic-network](./env/lab/eks)\ncluster `EKS` ser provisionado.\n\n![EKS](./docs/eks-diagram-EKS.png)\n\nO Terraform criará os seguinte recursos, além da rede:\n\n- **EKS Control Plane**: Este é o principal componente do `EKS`. Engloba tudo que o `Kubernetes` precisa para funcionar, como o `kube-proxy`, `kubelet`, credentials, `etcd`. É necessário apenas definir a versão do Kuberentes e todo o resto a AWS é responsável por manter funcionando.\n- **Work Nodes**: Instâncias `EC2` (também é possível utilizar instâncias `Fargate`) que serão provisionadas nas subnets privadas. Estas instâncias serão automaticamente ingressadas no cluster `EKS` e serão responsáveis por executar os containers do workload.\n- **Launch Configuration**: Descreve tudo que é necessário para criar um instância `EC2` que será utilizada como `Work Node`.\n- **Auto Scaling Group**: É responsável por provisionar, através do `Launch Configuration`, novos `Work Nodes`.\n- **CloudWatch Events**: Eventos sobre scaling-in e scaling-out dos `Work Nodes`, além de outros eventos do `EKS` serão guardados aqui.\n- **CloudWatch Logs**: Logs do `Control Plane` serão enviados para este recurso. É importante ressaltar que NÃO SÃO OS LOGS DOS CONTAINERS. No caso de querer enviar também os logs dos containers, será necessário instalar o `Container Insights for EKS` após a criação do cluster.\n___\n\n## EKS for production\n\nAgora que todo o ambiente foi criado e você possui um `EKS` funcional, existem alguns pontos que devem ser considerados num ambiente produtivo. Este é um exemplo de arquitetura de um ambiente produtivo:\n\n![Complete Architecture](./docs/eks-diagram-Complete.png)\n\n- **CloudFront**: É importante colocar uma camada na borda que fique responsável por receber e mitigar ataques DDoS ou mesmo ataques que ocorrem na camada 7. O `CloudFront`, por exemplo, possui recursos de `Web Application Firewall (WAF)`, além de se integrar com o `Amazon Shield`, caso seja necessário um nível de segurança maior. Apesar dos recursos de segurança, também oferece soluções de `CDN`, caso as aplicações do cluster `EKS` precise de otimização de entrega de artefatos estáticos ou precise oferecer grandes arquivos.\n- **Application Load Balancer**: É um balanceador de carga que trabalha na camada 7 (aplicação) no protocolo HTTP e com suporte à TLS. Deve ser associado às subnets públicas caso o objetivo seja expor aplicações para a internet. Para utilizar em conjunto com o `EKS`, será necessário instalar o suporte para utilizar o Ingress em conjunto com o `ALB` após a criação do cluster.\n- **Container Insights**: Precisa ser instalado no cluster `EKS` manualmente após a criação. Adiciona uma melhor integração com o `CloudWatch` e o workload em `EKS`. Talvez os dois melhores benefícios sejam a obtenção de métricas dos pods e os logs dos containers.\n- **Site-to-Site VPN**: Para manter uma comunicação segura com o `EKS Control Plane` não é necessário o uso de VPN, pois existem outras soluções como MFA e tokens efêmeros para autentica no `IAM` e configurar o `kubectl`. Entretanto, se o objetivo é criar uma comunicação segurança entre os `Work Nodes` e a rede corporativa, será necessário criar uma VPN. A AWS oferece o recurso `Site-to-Site VPN` para este cenário.\n- **S3 Bucket para backup**: Talvez seja importante manter um `S3 Bucket` para fazer backup dos logs que são capturados pelo `CloudWatch Logs`. Além de benefícios relacionados a compliance, permite a integração com outros recursos da AWS, como o `Athena` para fazer uma análise dos logs dos containers e identificar anomalias que podem não ter sido encontradas por ferramentas de APM, especialmente se for logs relacionados à regras de negócio.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthenets%2Fworkshop-eks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthenets%2Fworkshop-eks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthenets%2Fworkshop-eks/lists"}