Este projeto consiste em uma API que torna possível gerenciamento de cadastro de usuários.
As pipelines de integração continua e continua são feitas no Jenkins.
A API fica hospedada em um eks.
Foi utilizado o terraform como IaC para provisionamento do ambiente na AWS.
- Funcionalidades
- Dependências
- Como rodar o projeto a API localmente
- Como rodar o projeto com Docker
- Como rodar o projeto com Kubernetes local
- Como testar as funcionalidades da aplicação manualmente
- Começando
- Pre-Requisitos
- Provisionar infraestrutura com terraform
- Deploy
- EKS
- Como fazer um teste de carga
- Como acessar as ferramentas?
🏆 Cadastro de usuários
🏆 Consulta de usuários através do CPF
🏆 Consulta de todos os usuários
🏆 Alteração de usuários cadastrados através do CPF
🏆 Deleção de usuários através do CPF
- python = 3.8.5
- docker >= 20.10.7
- terraform >= 0.15.0
- kind >= 0.19.0
- gunicorn >= 20.1.0
- kubernetes EKS >= 1.24
- kubernetes Local >= 1.25.9
make run-api-local
Ex:
make run-api-docker-local
make run-full-deployments-k8s-local
Importe a configuração do postman localizada em postman e utilize a documentação para utilizar a API.
git clone [email protected]:msnhd2/srechallenge.git
cd srechallenge
1) Instale as ferramentas abaixo para começar com deployments no terraform. Se você estiver usando o Mac OS, execute os comandos abaixo para configurar as ferramentas necessárias.
- Terraform : brew install terraform
- AWS CLI (Opcional) : brew install awscli
- TF Lint (Opcional) : brew install tflint
- TfSwitch(Opcional) : brew install warrensbox/tap/tfswitch
Como fazer
1) Para Deployar o código terraform e provisionar a infraestrutura, precisamos de credenciais para conectar com a AWS. Abaixo estão as formas de exportar credenciais.
- Opção-1: Exportando Secret Key and Access Key
export AWS_ACCESS_KEY_ID="<< SUA ACCESS KEY >>"
export AWS_SECRET_ACCESS_KEY="<< SUA SECRET ACCESS KEY>>"
-
Opção-2: Use o Profile (Se você acessar AWS através de SSO) pre-requisito: Verifique se a AWS CLI está instalada no computador
aws configure sso SSO start URL [None]: <<sso-start-url da sua conta aws>> SSO Region [None]: <<region onde o sso está ativado>>
- Selecione a conta com a qual deseja trabalhar
- Forneça um nome de profile
- Isso cria uma entrada no arquivo
.aws/config
- Exporte o profile
AWS_PROFILE
export AWS_PROFILE=((profile_name))
export TF_VAR_region=((REGION_TO_DEPLOY))
Observação: substitua os espaços reservados "BUCKET_NAME" e "REGION_TO_DEPLOY" pelos valores apropriados.
- Configure o S3 Bucket por meio da CLI
$ aws s3api create-bucket \
--bucket ((BUCKET_NAME))\
--region ((REGION_TO_DEPLOY))\
--create-bucket-configuration LocationConstraint=((REGION_TO_DEPLOY))
- Habilite o versionamento
$ aws s3api put-bucket-versioning --bucket ((BUCKET_NAME)) --versioning-configuration Status=Enabled
-
Permissões para configurar o log
- Atualize o nome do bucket para apontar para o seu bucket no arquivo "logging_bucket_policy.json" (linha nº: 12) presente na raiz do seu repositório.
$ aws s3api put-bucket-policy --bucket ((BUCKET_NAME))--policy file://logging_bucket_policy.json
Pela CLI
Neste projeto foi utilizado o terraform para provisionar o cluster kubernetes e todas as suas dependencias(VPC, IAM, worker nodes).
terraform init
terraform plan -var-file dev.tfvars
#terraform apply -var-file dev.tfvars
terraform apply -var-file dev.tfvars
Pela pipelline
TO DOCaminho a produção: trunk base development Temos apenas 2 branches fixas no projeto: main e development O restante das branchs são feature branchs
Quando desejar que o codigo novo chegue a produção deve-se efetuar o merge do PR para BRANCH maine a pipeline de CD irá:
- Efetuar o deploy da imagem com a tag latest no registry através do ArgoCD
Quando o PR for criado o CI do GithubActions irá:
- Executar o lint
- Executar testes unitários
- Rodar scan do SonarCloud
- Validar status do QualityGate
- Efetuar o build da imagem docker gerando a tag, e efetuando o push no registry
-
🏆 Auto Scale Cluster
🏆 Auto Scale Pods(HPA) -
🏆 Grafana
🏆 Promotheus -
🏆Nginx -
🏆 FortIO -
🏆 Dashboard
- Com o(s) pod(s) da aplicação rodando execute o seguinte comando:
make running_fortio
Especificação:
- 800 requisições por segundo
- Duração de dois minutos
- 70 conexões simultaneas
Após isso monitore o consumo de recursos pelo grafana, kubernetes-dashboard ou com o comando:
watch -n1 kubectl get hpa -n srechallenge
Login e senha default URL: http://srechallenge-grafana.com
URL: http://srechallenge-prometheus.com
Login: admin Para obter a senha execute o comando a seguir:
make get-password-argocd
URL: http://srechallenge-argocd.com
Após executar o projeto no kubernetes local com o comando (make run-full-deployments-k8s), colete o token que é exibido e acesse o link
Melhorias a fazer
- Testar pipeline terraform
- Testar autoscaling dos nodes na aws
- Configurar ExternalDNS para o route53
- Implementar CD na pipeline
- Implementar terratest
- Implementar auto instrumentation open telemetry operator
Rodrigo Andrade Mendonça de Oliveira