5 habilidades que todo engenheiro DevOps deve ter

Ser um engenheiro DevOps moderno é uma função seriamente complexa do ponto de vista tecnológico.

Requer que você esteja familiarizado com linguagens de programação comuns, como Node.JS, scripts em lote, Python ou scripts em lote. Outra expectativa é entender como incorporar a automação de testes nos processos de implantação.

Como integrador de código em pipelines automatizados, você precisa conhecer pelo menos a funcionalidade básica de vários serviços em nuvem.

Apesar dessa complexidade tecnológica, as habilidades técnicas nem sempre estão na vanguarda das habilidades que faltam aos engenheiros de DevOps. Embora se esperasse assumir que o domínio das competências técnicas é a chave, vários insights recolhidos de verdadeiros profissionais de DevOps mostram que as suas competências interpessoais são muitas vezes ainda mais importantes.

Habilidades importantes de DevOps

Fonte: devopsuniversity.org

Observar a interação de um engenheiro DevOps dentro de uma equipe Scrum costuma ser uma observação bastante interessante. Na maioria das vezes, eles têm poucos detalhes sobre o conteúdo concreto das histórias que o restante da equipe está implementando, apenas por causa das informações técnicas sobre funcionalidades concretas dentro das histórias para a equipe.

No entanto, eles precisam ser capazes de incorporar o resultado da equipe em um pipeline de implantação viável, juntamente com a execução e validação de vários testes automatizados.

É aqui que não é mais suficiente ser um especialista técnico de baixo nível. A comunicação está se tornando uma parte fundamental do sucesso. Então, vamos explorar as habilidades mais importantes de DevOps necessárias.

Habilidades interpessoais

Na verdade, é a colaboração e a discussão dentro da equipe ágil a principal razão pela qual a falta de habilidades interpessoais encabeça a lista de habilidades de DevOps. Se você ainda se pergunta por quê, aqui estão alguns dos argumentos mais sólidos:

  • Os engenheiros de DevOps não podem ser eficazes sem adaptabilidade ao restante da equipe de desenvolvimento. Esta equipe está construindo a base dos recursos do software ou da plataforma. Cabe ao engenheiro DevOps criar um ambiente ativo para tudo isso e fazê-lo funcionar.
  • Além de estarem sincronizados com sua própria equipe de desenvolvimento, eles são um ponto de contato importante para partes interessadas externas que buscam obter acesso à plataforma de software. Devem ser capazes de compreender tais pedidos e traduzir toda a complexidade técnica do ambiente automatizado de nuvem em equivalentes não técnicos, para que as partes interessadas possam realmente compreendê-los. E seja o middleware definitivo entre a equipe de desenvolvimento e as partes interessadas externas.
  • Embora normalmente você possa construir um sistema de aprendizagem para adquirir habilidades técnicas específicas, amadurecer nas habilidades interpessoais certas exige que você se aprofunde muito em sua integridade e personalidade. Aprender a se olhar de outra perspectiva no tempo e identificar as áreas de crescimento. Isso não é algo que todos possam fazer com facilidade.
  Entendendo a terminologia da chave da AWS para iniciantes

Rede

Quando você olha para o cenário tecnológico das plataformas de nuvem modernas, não é preciso muito para se perder. Você precisa lidar com serviços de sistema de arquivos, vários serviços de banco de dados, APIs de back-end, arquiteturas de servidor ou sem servidor, serviços de front-end, modelos de aprendizado de máquina, ambientes híbridos, redes privadas virtuais, balanceadores de carga de alta disponibilidade, vários serviços de streaming em tempo real e muito mais.

É impossível saber tudo sobre tudo. Mas é absolutamente necessário que os engenheiros de DevOps saibam como conectar tudo em uma plataforma de software funcional. Construir uma comunidade de rede forte é uma obrigação.

Encontrar o equilíbrio ideal entre a simplicidade e a eficácia da comunicação de sistemas distribuídos é um desafio que eles precisam estar cientes e prontos para dar uma solução à equipe.

Normalmente, você sabe que a infraestrutura que está construindo está madura o suficiente apenas quando começa a lidar mais seriamente com as questões e desafios de segurança da plataforma. E adivinhe – é novamente o domínio de um engenheiro DevOps.

Em vez de se ater a contatos antigos e comprovados, você precisa buscar novos constantemente para cobrir aquele novo serviço solicitado por sua equipe.

Testes de software

Especialmente no mundo Agile, a flexibilidade nas versões de software é crítica. Você pode ter uma configuração de scrum com períodos de sprint de duas semanas. Então, um novo lançamento de produção a cada duas semanas é uma expectativa.

Se você pensar em todo o ciclo de vida do projeto, que inclui planejamento, estimativa, desenvolvimento, teste e liberação, não será possível conseguir isso sem uma automação séria no maior número possível dessas etapas.

O principal pré-requisito para o sucesso nesta configuração (e, em última análise, para permitir um tempo mais rápido de implantação na produção) é um grande foco na automação de testes. Implantações mais rápidas juntamente com testes automatizados resultam em menos tempo para feedback dos usuários aos desenvolvedores.

Para um engenheiro de DevOps, isso significa integração dos resultados de várias equipes de teste em um pipeline de CI/CD:

  • Habilite a execução do script de teste de unidade após cada commit do repositório. Se não existirem, negocie com os desenvolvedores para criá-los.
  • Inclua casos de teste de integração nos pipelines de CI/CD, implantando em um ambiente de teste totalmente integrado e consistente. Não faz sentido executar testes de integração em todos os ambientes de desenvolvimento que a equipe de desenvolvimento está usando. Os casos de teste de integração devem funcionar perfeitamente no ambiente onde todos os serviços são implantados e os dados são consistentes.
  • Incorpore casos de teste completos do mundo real no pipeline de CI/CD. Torne-o uma execução obrigatória para cada implantação de código mestre no teste de integração ou no ambiente de teste de aceitação do usuário. Isso garante que todos os processos de negócios importantes e críticos possam ser executados sem falhas.
  Corrigir o Apple TV Remote não está funcionando

Escrever casos de teste eficazes de forma que você não exagere, mas também cubra todos os processos críticos, é outro desafio a ser dominado. Os engenheiros de DevOps não precisam necessariamente estar aqui sozinhos.

Analistas de negócios ou gerentes de garantia de qualidade podem fazer parte da rede (se não diretamente da equipe) para ajudar nisso e definir as etapas exatas. Mas então é função do engenheiro DevOps traduzi-lo em código executável automatizado.

CI/CD e infraestrutura como código

Já tocamos nisso em vários lugares. Ainda assim, não há como negar que o IaC (e subsequentemente a sua execução através de pipelines de CI/CD) são os principais resultados dos engenheiros de DevOps. É aqui que todas as entradas da equipe de desenvolvimento (na forma de diversas funcionalidades de serviço) são conectadas a alguns ambientes de infraestrutura reais. Em seguida, eles formam um software utilizável como saída de serviço, que pode ser implantado repetidamente em diferentes ambientes.

Não é à toa que este é um dos principais desafios de cada engenheiro DevOps. Ainda mais, se o requisito é permanecer independente da nuvem, isso geralmente significa escrever o IaC na linguagem Terraform e garantir que o código não contenha nuances específicas do provedor de nuvem. A experiência mostra isso claramente. Mudar para scripts de código de infraestrutura independentes de nuvem pode ser uma tarefa muito difícil, mesmo para engenheiros experientes.

É praticamente impossível manter a infraestrutura em nuvem usando apenas etapas manuais para implantações. Durante os tempos locais, esse era o padrão. Mas, da mesma forma, era o padrão sólido para entregar formas de trabalho em cascata. Não há chance de sobreviver com implantações manuais em um ambiente Agile. A transição deve ser feita, o que é quase sempre doloroso.

Mas uma vez feito corretamente, você está lá.

  • Precisa de uma implantação de produção? Basta executar o pipeline de lançamento que contém a implantação do código na produção.
  • Você precisa de outro ambiente de desenvolvimento para não se sobrepor a outros trabalhos de desenvolvimento dentro da equipe? Em seguida, encontre o pipeline de desenvolvimento e clique no botão Executar. Toda a infraestrutura de desenvolvimento será executada e criada automaticamente, incluindo dados de teste.
  • Uma vez eliminada a necessidade de existência de um ambiente, o mesmo pipeline de desenvolvimento pode executar os comandos de destruição para todos os serviços previamente implantados no ambiente.

É inevitável para uma equipe Agile bem-sucedida implementar a infraestrutura como um código e colocá-la dentro de pipelines de CI/CD que podem fazer o trabalho a qualquer momento e a qualquer momento. Os engenheiros de DevOps estão aqui para entregar.

Conteinerização

Fonte: aws.amazon.com

Em projetos de grande escala, a possibilidade de replicação rápida é crucial. Fazer centenas de cópias dos mesmos ambientes ao mesmo tempo não seria realmente possível sem ambientes em contêineres. A conteinerização é uma habilidade que requer uma curva de aprendizado acentuada. Essa é também a razão pela qual apenas alguns projetos estão realmente utilizando-o seriamente.

  Um guia básico para YouTubers

O servidor contêiner é um modelo a ser aplicado sempre que necessário e a saída será sempre a mesma. Infraestrutura idêntica e dados idênticos. É uma propriedade que somente engenheiros de DevOps podem construir para a equipe. Eles precisam aprender como criar isso usando ferramentas diferentes.

Os contêineres são projetados para serem facilmente criados e destruídos. Os engenheiros de DevOps devem implementar ferramentas de orquestração de contêineres, como Kubernetes ou Docker Swarm, que podem gerenciar automaticamente a implantação, o escalonamento e a recuperação de contêineres.

Os contêineres compartilham o mesmo sistema operacional host. Se um contêiner for comprometido, poderá comprometer outros contêineres no mesmo host. Além disso, se os contêineres forem criados a partir de imagens de terceiros, eles poderão conter vulnerabilidades dentro do código. Os engenheiros de DevOps devem fazer um esforço para implementar recursos de segurança, como isolamento de contêineres, controle de acesso e verificação de vulnerabilidades, para mitigar esses riscos.

A escalabilidade é outra propriedade nativa dos contêineres. Você pode escalá-los horizontalmente facilmente para lidar com o aumento da carga de trabalho. Isso pode levar a contenção de recursos e problemas de desempenho. Os engenheiros de DevOps devem implementar ferramentas de gerenciamento de recursos, como cgroups ou cotas de recursos Kubernetes, que podem limitar o número de recursos que cada contêiner pode consumir.

Os engenheiros de DevOps precisam abordar a conteinerização tendo em mente segurança, escalabilidade e resiliência. Entre todas as outras habilidades técnicas, dominar a conteinerização requer uma curva de aprendizado especialmente acentuada. A complexidade é muito alta. Essa é também a razão pela qual apenas alguns projetos estão realmente utilizando-o seriamente.

Conclusão

O praticante de DevOps é um membro único de sua equipe ágil. Você pode ter apenas um ou dois deles para todo o projeto, mas mesmo assim, eles serão cruciais para o sucesso.

As expectativas dos engenheiros de DevOps são altas, pois eles precisam desempenhar muitas funções ao mesmo tempo:

  • Eles devem ser desenvolvedores técnicos fortes,
  • jogadores de equipe cheios de empatia, compreensão e prontos para colaboração,
  • middleware eficaz entre a equipe de desenvolvimento e partes interessadas externas não técnicas,
  • conectando toda a equipe em automação e verificações de teste de código,
  • possibilitando os lançamentos regulares do projeto,
  • e construir consistentemente uma rede de especialistas que muda dia a dia.

Apesar de toda a complexidade técnica, é o elemento humano que desempenha um papel crucial no sucesso de qualquer iniciativa DevOps. Se você está prestes a se tornar um deles, tem todo o direito de se orgulhar de sua decisão e de adotar a abordagem educacional de uma perspectiva muito mais ampla, não se limitando apenas ao conhecimento técnico.

A seguir, verifique as perguntas e respostas mais frequentes das entrevistas sobre DevOps.