Projeto DevOps: Flask API - Do código ao deploy!
- Descrição
- Currículo
- FAQ
- Revisões
Você se sente perdido nessa “sopa de letrinhas” de tecnologias no mundo de DevOps?
Não sabe como todas essas pontas se conectam, e qual valor agregam para o nosso dia a dia?
Se sua resposta foi sim, chances são de que este curso vai te ajudar… e muito!
Estruturei este treinamento de forma 100% prática, divididas em dois projetos, que efetivamente entregam algo real. Dessa forma, você vai aprendendo as tecnologias e já compreendendo onde cada uma se encaixa, facilitando para “gravar” o conhecimento na sua cabeça.
Deixa eu explicar um pouco sobre os módulos do treinamento:
-
Módulo 1 – (Projeto 1 – PaaS) – Setup do ambiente: Configuração inicial no repositório e criando a nossa primeira API com Flask.
-
Módulo 2 – (Projeto 1 – PaaS) – Docker: Configuração da nossa aplicação para rodar em containers. Vamos escrever o Dockerfile e docker-compose para subir toda a stack de desenvolvimento localmente.
-
Módulo 3 – (Projeto 1 – PaaS) – Flask / Codando: Aqui é onde a gente escreve código. É uma API básica para praticar um pouco de programação. Não é relevante para desenvolvedores, mas para profissionais de infraestrutura que não escrevem muito código, vai ser bem desafiador.
-
Módulo 4 – (Projeto 1 – PaaS) – Flask / Testes unitários: Muito se fala de testes unitários, mas geralmente não está claro para profissionais de infraestrutura. Aqui nós mesmos vamos escrever os testes da nossa aplicação. Com isso fica mais fácil jogar para o CI.
-
Módulo 5 – (Projeto 1 – PaaS) – Heroku, MongoDB Atlas & GitHub Actions: Finalização do primeiro projeto. Vamos fazer o deploy via Heroku (Paas), usando o banco do MongoDB Atlas (cloud do Mongo) e uma pipeline de CI/CD no GitHub Actions.
-
Módulo 6 – (Projeto 2 – k8s) – Flask / Codando: Vamos estender nossa API com operações de DELETE e PATCH.
-
Módulo 7 – (Projeto 2 – k8s) – Health Checks / Probes: Adicionamos healthchecks na nossa aplicação que será necessário para rodar em Kubernetes. Isso fará a integração com o conceito de Probes no Kubernetes.
-
Módulo 8 – (Projeto 2 – k8s) – Scans de Qualidade: Utilização de ferramentas terceiras para melhorar a qualidade do nosso projeto, tanto esteticamente quanto em segurança.
-
Módulo 9 – (Projeto 2 – k8s) – Kubernetes (desenvolvimento): Faremos a adaptação da aplicação para rodar em um cluster Kubernetes localmente. Isso envolve cluster KinD, Helm Charts, manifestos, probes, ingress, service e muito mais.
-
Módulo 10 – (Projeto 2 – k8s) – Helm (produção): Aqui levamos o projeto um pouco mais a sério. Vamos subir um cluster Kubernetes na AWS e deployar a aplicação com Helm, além de gerenciar Secrets de forma encriptada com Sealed Secrets.
-
Módulo 11 – (Projeto 2 – k8s) – Terraform: Vamos estender o nosso Terraform, adicionando outros recursos como bastion host, instância do MongoDB e add-ons do Helm.
-
Módulo 12 – (Projeto 2 – k8s) – Ansible: Para configurar o banco de dados, vamos usar o Ansible. Aqui aprendemos a reusar uma role existente, e ter toda a configuração do banco como código.
-
Módulo 13 – (Projeto 2 – k8s) – DNS (Route 53 & External DNS): Para deixar o projeto 100%, vamos usar uma URL de DNS pública. Usaremos um add-on para fazer a ponte entre o cluster e o Route 53, além de adicionar um certificado TLS.
-
Módulo 14 – (Projeto 2 – k8s) – GitHub Actions (CI/CD): Finalização do projeto com deploy no Kubernetes com GitHub Actions. Usaremos boas práticas de segurança com credenciais temporárias via OIDC, edição no RBAC do Kubernetes e Helm.
Sim, é um bombardeio de conhecimento. E não, não foi feito para ser fácil.
Eu quero que você realmente passe trabalho, pois é na dificuldade que a gente constrói o conhecimento de verdade.
Então, se você acredita que esse conhecimento pode te ajudar, ficarei muito feliz em ser seu instrutor aqui na Udemy! Conte comigo ao longo do curso em caso de dúvidas.
Te espero do outro lado.
-
1Introdução ao ProjetoVídeo Aula
-
2Introdução ao ProjetoTexto
-
3Proposta do ProjetoTexto
-
4Repositório no GitHub e chaves SSHVídeo Aula
-
5Setup do ambiente de desenvolvimento (venv e pip)Vídeo Aula
-
6Primeira execução do FlaskVídeo Aula
-
7Extensão Flask-RESTfulVídeo Aula
-
8Commitando e flake8!Vídeo Aula
-
16Primeiro insert com reqparseVídeo Aula
-
17Validando o CPFVídeo Aula
-
18O famoso try catchVídeo Aula
-
19Obtendo usuáriosVídeo Aula
-
20Tratando UserNotFoundVídeo Aula
-
21Application FactoryVídeo Aula
-
22Desacoplando a aplicação pt. 1Vídeo Aula
-
23Desacoplando a aplicação pt. 2Vídeo Aula
-
24Ajustando nossos arquivos DockerVídeo Aula
-
25Últimas mudançasVídeo Aula
-
31MongoDB AtlasVídeo Aula
-
32Configuração do HerokuVídeo Aula
O Heroku não tem mais Dynos de graça, mas o preço é extremamente baixo, então não precisa se preocupar.
https://www.heroku.com/pricing
Você pode usar o plano Basic qué 1 centavo de dólar por hora. Se testar e depois deletar a infra, não vai gastar nem 1 dólar.
-
33Deploy no HerokuVídeo Aula
-
34Configurando o Insomnia para ProduçãoVídeo Aula
-
35A primeira pipeline no GitHub ActionsVídeo Aula
-
36Configurando secrets da pipelineVídeo Aula
-
37Finalizando!Vídeo Aula
-
38Introdução ao móduloVídeo Aula
-
39Proposta do ProjetoTexto
-
40Uso de Branches e melhorias no DockerfileVídeo Aula
-
41Rota de patch de usuáriosVídeo Aula
O PATCH é basicamente nosso endpoint de atualização de dados. A função vai ficar mais ou menos assim:
def patch(self, cpf):
data = _user_parser.parse_args()
if not self.validate_cpf(data["cpf"]):
return {"message": "CPF is invalid!"}, 400
response = UserModel.objects(cpf=cpf)
if response:
response = UserModel.objects(cpf=cpf).update(**data)
return {"message": "User %s successfully updated!" % response}, 200
else:
return {"message": "User not found!"}, 404
Se o usuário existir no banco, realizamos a operação de update.
Aqui temos a documentação de API operations do MongoEngine:
3. API Reference — MongoEngine 0.27.0 documentation
-
42Testes da rota de patchVídeo Aula
-
43Rota de delete de usuáriosVídeo Aula
-
44ResumoTexto
-
52Criando cluster Kubernetes com KindVídeo Aula
-
53Makefile: Automatizando criação do cluster localVídeo Aula
-
54Encontrando o Helm Chart do MongoDBVídeo Aula
-
55Deploy do Helm Chart do MongoDBVídeo Aula
-
56Adicionando o MongoDB no MakefileVídeo Aula
-
57Manifesto de DeployVídeo Aula
-
58Alterando a imagePullPolicyVídeo Aula
-
59Probes e Secret para credenciaisVídeo Aula
-
60Injetando as variáveis ambienteVídeo Aula
-
61Expondo a aplicação com Service e IngressVídeo Aula
-
62Automação do setup completo de desenvolvimentoVídeo Aula
-
63ResumoTexto
-
64Ajustando os outputs do TerraformVídeo Aula
-
65Criação do cluster EKSVídeo Aula
-
66Criação do ECRVídeo Aula
-
67WARNING: Não esqueça de destruir a infra!Vídeo Aula
-
68Introdução ao HelmVídeo Aula
-
69Parametrizando o DeploymentVídeo Aula
-
70Parametrizando o Deployment pt. 2Vídeo Aula
-
71Parametrizando Ingress e ServiceVídeo Aula
-
72Como gerenciar Secrets no Kubernetes?Vídeo Aula
-
73Instalação do Sealed Secrets e KubesealVídeo Aula
-
74Sealed Secrets no TerraformVídeo Aula
-
75Encriptando o SecretVídeo Aula
-
76ResumoTexto
-
77Arquitetura do Projeto na AWSVídeo Aula
-
78Portando Sealed Secrets e ECR para o móduloVídeo Aula
-
79Criação da KeypairVídeo Aula
-
80Security Group do BastionVídeo Aula
-
81Bastion HostVídeo Aula
-
82Security Group do MongoDBVídeo Aula
-
83Security Group do MongoDB pt. 2Vídeo Aula
-
84MongoDB HostVídeo Aula
-
85ResumoTexto