Este é o repositório utilizado dentro do curso para gerenciar toda infraestrutura do projeto eks-express. Este projeto é composto por diversas stacks na pasta visando provisionar toda infraestrutura necessária para subir um Cluster EKS na AWS Production grade.
Toda essa stack é desenvolvida do absoluto zero, aula por aula. Recomendo que você assista as aulas em paralelo ao estudo do código deste repositório na sua conta AWS para melhor entendimento do que está provisionando.
Antes de realizar o deployment das stacks do Terraform, crie uma Role na sua conta AWS:
Atenção: Substitua as variáveis, <YOUR_ACCOUNT> e <YOUR_USER>.
aws iam create-role \
--role-name DevOpsNaNuvemRole-9db671b2-c6ce-460c-9eb0-f27e903d0f9a \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<YOUR_ACCOUNT>:user/<YOUR_USER>"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "f2ed091d-8d7d-46cb-be56-fb349d502cfb"
}
}
}]
}'📌 Observação: Para dúvidas, consulte Aula 05-AWS Role e Terraform Authentication do Módulo 2.
Anexe permissões administrativas à role criada:
aws iam attach-role-policy \
--role-name DevOpsNaNuvemRole-9db671b2-c6ce-460c-9eb0-f27e903d0f9a \
--policy-arn arn:aws:iam::aws:policy/AdministratorAccess3. Substituição da String arn:aws:iam::<YOUR_ACCOUNT>:role/DevOpsNaNuvemRole-9db671b2-c6ce-460c-9eb0-f27e903d0f9a nos Arquivos Terraform
find . -type f -name "*.tf" -exec sed -i \
's|arn:aws:iam::<YOUR_ACCOUNT>:role/DevOpsNaNuvemRole-9db671b2-c6ce-460c-9eb0-f27e903d0f9a|arn:aws:iam::<YOUR_ACCOUNT>:role/DevOpsNaNuvemRole|g' {} +find . -type f -name "*.tf" -exec sed -i '' \
's|arn:aws:iam::<YOUR_ACCOUNT>:role/DevOpsNaNuvemRole-9db671b2-c6ce-460c-9eb0-f27e903d0f9a|arn:aws:iam::<YOUR_ACCOUNT>:role/DevOpsNaNuvemRole|g' {} +Atenção: Substitua <YOUR_ACCOUNT> pela sua conta AWS.
A stack backend cria o bucket S3 e a DynamoDB para o Terraform state locking e remote backend:
cd ./00-backend && terraform init && terraform apply -auto-approve📌 Observação: O comando considera que você está na pasta root da aplicação.
Crie a base de redes para as próximas stacks:
cd ./01-networking && terraform init && terraform apply -auto-approveCrie um Cluster EKS, juntamente com alguns addons já instalados.
cd ./02-eks-cluster && terraform init && terraform apply -auto-approve📌 Observação: Se necessário ajuste a quantidade de nós worker nodes desejados no arquivo variables.tf. Se lembre de ajustar o nome dos usuários no arquivo locals.tf para que você tenha acesso ao cluster via console e via bash.
Torne o Cluster EKS dinâmico, adicionando e removendo nós dinamicamente utilizando Karpenter
cd ./03-karpenter-auto-scaling && terraform init && terraform apply -auto-approveHabilite o Web Application Firewall para filtrar requisições do Application Load Balancer:
cd ./04-security && terraform init && terraform apply -auto-approve📌 Observação: Lembre-se que a conexão do WAF ACL com o ALB é feito via annotation no ingress.
Configure o Amazon Prometheus e Grafana, para monitorar o Cluster EKS:
cd ./05-monitoring && terraform init && terraform apply -auto-approvePara destruir os recursos provisionados, siga esta ordem:
cd ./05-monitoring && terraform destroy -auto-approve
cd ./04-security && terraform destroy -auto-approve
cd ./03-karpenter-auto-scaling && terraform destroy -auto-approve
cd ./02-eks-cluster && terraform destroy -target=helm_release.external_dns -auto-approve
cd ./02-eks-cluster && terraform destroy -target=helm_release.load_balancer_controller -auto-approve
cd ./02-eks-cluster && terraform destroy -auto-approve
cd ./01-networking && terraform destroy -auto-approveAtenção: Mantenha a ordem ao destruir as stacks para evitar dependências quebradas.