A trilha DevOps
Published: 2023-03-27 12:05:09






Algum tempo atrás, prestes a completar 20 anos de carreira, e 40 de idade, parei para repensar minha vida como um todo, e claro, minha carreira faz parte dela. Parece crise de meia idade, mas não é exatamente isso, porém, isso é assunto para outro post.

E antes que você se pergunte se DevOps é pra você, saiba que essa é uma trilha que atende tanto profissionais que vieram de infraestrutura como é o meu caso, quanto profissionais que vieram de desenvolvimento como é o caso do meu amigo e parceiro, o Tech Lead Leonardo Lemos, que gentilmente revisou esse texto, ou até profissionais que pretendem ingressar em TI.

No momento que escrevo esse post, o mercado de tecnologia no Brasil tem um GAP de aproximadamente de 400 mil vagas, e a previsão é que esses números dobrem nos próximos dois anos, pois as faculdades formam bem menos profissionais do que o mercado busca, além da concorrência de empresas de fora que pagam em dólar ou em euro.

Por fim, especialistas afirmam que a profissão de Platform Engineer estará entre as mais requisitadas do mercado no próximo ano.














## <center> Cloud Engineer, DevOps Engineer, SRE ou Plataform Engineer?


![DevOps](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yt7smrago29683brt1ru.jpg)




Com exceção do Cloud Engineer, para efeito de compreensão vamos tratar todas as demais funções como DevOps, visto que o stack delas é bem similar. “E o Cloud Engineer?” Ele já está englobado de certa forma na stack do DevOps, então não iremos focar neste texto.

Um ponto interessante a citar sobre o Cloud Engineer, e é único que irei me ater, é que ele costuma ter uma visão multi-cloud, o que de certa forma amplia o leque de opções desse profissional frente ao mercado.

E por fim, o que é o DevOps? Ele é Developer, ele é Infraestrutura, e ao mesmo tempo não é exatamente nenhum dos dois. Mas como assim? Vem comigo que eu te explico. Antes de mais nada, meu nome é Gustavo Schiavon, sou DevOps Engineer na Convenia, uma das pioneiras e principais HR Techs do Brasil.



##  <center> Trilha DevOps


![Mind](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ow6tjgzt2ywinpq9dlqi.jpg)


A trilha DevOps engloba uma série de ferramentas, de diferentes finalidades, e sim, você precisa se especializar em ao menos uma de cada dessas ferramentas. Lembra do Cloud Engineer, então, a cloud é uma dessas ferramentas, afinal, você também é Infra.

Além da cloud, você vai ter que se familiarizar com alguma ferramenta de CI/CD (lembre-se desse nome), observabilidade, mensageria, logs, repositório de código, testes, linguagem de programação (automação), container, orquestração de container, filas, e uma de infraestrutura como código, pois não se esqueça você também é Dev.



##  <center> Vamos por partes, desmembrando e desmistificando a stack DevOps


![Stack](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6q40frnm13pwr3p4se40.jpg)
 
Cloud - Vamos começar pelo item sem o qual nada existe, e que sugiro que seja seu ponto de partida. Embora existam dezenas de players no mercado, os principais ainda são AWS, Azure, GCP, OCP. Todos eles permitem que você utilize grande parte dos serviços gratuitamente para testar, e alguns serviços ainda são gratuitos para sempre. De todas, a AWS é a maior e mais madura delas, e com uma ótima trilha de aprendizado na própria plataforma .

CI/CD - Essa é a ferramenta, e porque não dizer, o conceito que melhor define a cultura DevOps. Imagine uma aplicação que “quase” nunca fica fora do ar. Sonho de todo plantonista, não é? Parte do que torna isso possível, são os pipelines CI/CD, que são instruções que irão dizer onde buscar o código, como buildar o container, que repositório salvar, e depois onde fazer o deploy. Alguns dos principais são o Jenkins, o Github Actions, e o Circle CI. O Jenkins costuma ser o mais usado.

Observabilidade: Tem um ditado que diz, que não se mede aquilo que não se gerencia, também é verdade que ninguém gosta de ficar ao sabor do vento, ou ser pego de surpresa. Ferramentas de observabilidade, te dão um panorama sobre a saúde de seu ambiente, e te alertam em caso de falhas, ou uso de recursos acima do normal. Os principais são o Prometheus, o Zabbix e o CloudWatch para quando se trabalha com AWS. Assim como o Zabbix costumava ser a principal opção para ambientes on premises, o Prometheus é uma solução muito difundida na cloud. Em ambos os casos, e para o CloudWatch também, é comum se usar o Grafana para centralizar os dados.

Mensageria: Foi se o tempo que a mensageria servia somente para trocar informações entre pessoas, hoje esses recursos estão diretamente ligados a ferramentas de monitoramento, por exemplo, para alarmar o time em tempo real, caso algo relevante deva ser analisado. Alguns bons exemplos de recursos assim são o Slack, HipChat e o IRC. O Slack é uma opção bastante utilizada, e que permite diversos tipos de integrações, como hooks, api token, entre outros.

Logs: Se observabilidade te diz que tem algo errado, são os logs que vão dizer exatamente o que é, ou seja, saber que sua máquina está com alto consumo de CPU é importante, mas melhor que isso, é entender o que em sua aplicação está ocasionando isso. Exemplo de ferramentas que entregam essa visão é o Loki, o Sentry e o New Relic. Mas uma solução muito utilizada é a pilha ELK, que é composta pelo trio ElasticSearch, LogStash e Kibana.

Repositório de código: Tão importante quanto ter um código limpo, é ter um código versionado, e revisado. Para nossa sorte existem diversas soluções, que auxiliam nesse trabalho. As principais são o GitLab, GitHub e o GitBucket. O GitHub costuma ser o mais utilizado.

Testes: Assim como a maioria dos processos nessa cultura, os testes da aplicação devem ser rotinas automatizadas (testes sintéticos), até para que isso também entre numa esteira de monitoramento, e possamos ter controle se algum recurso não está disponível, ou se o tempo de resposta não está adequado. Algumas opções são o Selenium, Cucumber e o Datadog. Na Convenia utilizamos o Datadog para fazer monitoramento sintético e gerar métricas de SLI (indicador de nível de serviço), e atrelado a ele temos um OKR (objetivos e resultados chave). 

Linguagem de programação: Embora essa não seja o foco principal do DevOps, é importante saber lógica de programação, até porque para criar rotinas de automação, quase sempre será necessário criar um código para isso. A primeira linguagem que se deve ter em mente pensando nisso é o Python, além de entender de Shell Script e dependendo da trilha, Powershell. Assim como o Python costuma ser utilizado como uma das principais linguagens para automação, o Shell Script é o recurso nativo no Linux, que permite criar scripts para automatizar processos, a propósito, se você ainda não conhece de Linux, principalmente a parte de terminal, recomendo fortemente que estude.

Container: Toda aplicação moderna, é desenhada para rodar na forma de micro serviço. Sendo assim, é fundamental entender de container, como eles trabalham, como conversam com o servidor, e como entregam a aplicação. Embora existam outras opções no mercado como o Podman, sugiro fortemente que você estude Docker, que é o padrão que o mercado trabalha, e é um recurso que se pode subir facilmente através do terminal do Linux.

Orquestração de Container: Trabalhar com containers stand alone é possível, mas é sofrível, além de fugir a maioria das vezes da cultura de DevOps de entrega contínua. Assim, existe uma forma mais amigável de entrega e gestão de containers que é através de um orquestrador. Ele vai entregar de uma melhor forma, e gerenciar possíveis quedas, por exemplo. O padrão do mercado em orquestração de containers Docker é o Kubernetes, mas o Swarm também é usado, principalmente pelo fato de sua implementação ser muito mais simples que a do Kubernetes.

Filas: Os módulos de uma aplicação dividida em micro serviços, podem receber muitas requisições, assim como podem ocorrer de um desses módulos ficar indisponível quando outro módulo requisitar, ou precisar entregar um recurso. Um sistema de filas, opera fazendo a gestão dessas requisições e entregas de forma mais ordenada e assíncrona. O RabbitMQ assim como o Kafka fazem essa gestão.

Infraestrutura como código: A cereja do bolo sem dúvida é a infraestrutura como código, é ela que transforma o profissional de Infra em Dev e vice-versa. Embora não seja 100% necessária, é ela que permite ter todas as vantagens de dev em infra, como code-review, versionamento, etc. Diversas linguagens são bastante usadas para provisionar infraestrutura, como o Terraform, Ansible, Puppet e Chef. De todas elas, recomendo começar pelo Terraform, que além de ser amplamente utilizado para provisionar recursos em diversas tecnologias, é desenvolvido pela HashiCorp, que desenvolve outras soluções voltadas para cloud.


















##  <center> E como eu entro nessa?


![Start](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/39y8zdkabr00c1r4sccj.jpg)

Sugiro então que se prepare, e não tenha medo de dar um passo pra trás. “Mas eu já sou um Dev ou Infra Senior, mesmo assim vou ter que retornar duas casas?” Sim, vai, “cada escolha é uma renúncia, isso é a vida”. Então sente-se, ponha suas prioridades na balança, e pontue as vantagens de permanecer onde está, ou viver esse novo momento em sua carreira. 

Chegou a conclusão que é isso mesmo que você quer, então separe um tempo do seu dia para estudar, crie contas nas plataformas, pesquise, pergunte, participe de grupos de WhatsApp, Telegram, Discord, fóruns de discussão, e quando sentir segurança, se candidate em processos para medir a febre, a grande maioria tem desafios onde você poderá colocar em prática o que aprendeu até agora. 

Agora é com você, e se precisar de uma força, é só chamar!